diff options
Diffstat (limited to 'net/mac80211')
-rw-r--r-- | net/mac80211/main.c | 4 | ||||
-rw-r--r-- | net/mac80211/mlme.c | 4 |
2 files changed, 8 insertions, 0 deletions
diff --git a/net/mac80211/main.c b/net/mac80211/main.c index 36859e794928..095b7d928d64 100644 --- a/net/mac80211/main.c +++ b/net/mac80211/main.c | |||
@@ -292,7 +292,9 @@ static int ieee80211_open(struct net_device *dev) | |||
292 | local->fif_other_bss++; | 292 | local->fif_other_bss++; |
293 | 293 | ||
294 | netif_tx_lock_bh(local->mdev); | 294 | netif_tx_lock_bh(local->mdev); |
295 | netif_addr_lock(local->mdev); | ||
295 | ieee80211_configure_filter(local); | 296 | ieee80211_configure_filter(local); |
297 | netif_addr_unlock(local->mdev); | ||
296 | netif_tx_unlock_bh(local->mdev); | 298 | netif_tx_unlock_bh(local->mdev); |
297 | break; | 299 | break; |
298 | case IEEE80211_IF_TYPE_STA: | 300 | case IEEE80211_IF_TYPE_STA: |
@@ -491,7 +493,9 @@ static int ieee80211_stop(struct net_device *dev) | |||
491 | local->fif_other_bss--; | 493 | local->fif_other_bss--; |
492 | 494 | ||
493 | netif_tx_lock_bh(local->mdev); | 495 | netif_tx_lock_bh(local->mdev); |
496 | netif_addr_lock(local->mdev); | ||
494 | ieee80211_configure_filter(local); | 497 | ieee80211_configure_filter(local); |
498 | netif_addr_unlock(local->mdev); | ||
495 | netif_tx_unlock_bh(local->mdev); | 499 | netif_tx_unlock_bh(local->mdev); |
496 | break; | 500 | break; |
497 | case IEEE80211_IF_TYPE_MESH_POINT: | 501 | case IEEE80211_IF_TYPE_MESH_POINT: |
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index 8f51375317dd..1232ba25e1e9 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c | |||
@@ -3869,6 +3869,7 @@ void ieee80211_scan_completed(struct ieee80211_hw *hw) | |||
3869 | 3869 | ||
3870 | 3870 | ||
3871 | netif_tx_lock_bh(local->mdev); | 3871 | netif_tx_lock_bh(local->mdev); |
3872 | netif_addr_lock(local->mdev); | ||
3872 | local->filter_flags &= ~FIF_BCN_PRBRESP_PROMISC; | 3873 | local->filter_flags &= ~FIF_BCN_PRBRESP_PROMISC; |
3873 | local->ops->configure_filter(local_to_hw(local), | 3874 | local->ops->configure_filter(local_to_hw(local), |
3874 | FIF_BCN_PRBRESP_PROMISC, | 3875 | FIF_BCN_PRBRESP_PROMISC, |
@@ -3876,6 +3877,7 @@ void ieee80211_scan_completed(struct ieee80211_hw *hw) | |||
3876 | local->mdev->mc_count, | 3877 | local->mdev->mc_count, |
3877 | local->mdev->mc_list); | 3878 | local->mdev->mc_list); |
3878 | 3879 | ||
3880 | netif_addr_unlock(local->mdev); | ||
3879 | netif_tx_unlock_bh(local->mdev); | 3881 | netif_tx_unlock_bh(local->mdev); |
3880 | 3882 | ||
3881 | rcu_read_lock(); | 3883 | rcu_read_lock(); |
@@ -4063,12 +4065,14 @@ static int ieee80211_sta_start_scan(struct net_device *dev, | |||
4063 | local->scan_dev = dev; | 4065 | local->scan_dev = dev; |
4064 | 4066 | ||
4065 | netif_tx_lock_bh(local->mdev); | 4067 | netif_tx_lock_bh(local->mdev); |
4068 | netif_addr_lock(local->mdev); | ||
4066 | local->filter_flags |= FIF_BCN_PRBRESP_PROMISC; | 4069 | local->filter_flags |= FIF_BCN_PRBRESP_PROMISC; |
4067 | local->ops->configure_filter(local_to_hw(local), | 4070 | local->ops->configure_filter(local_to_hw(local), |
4068 | FIF_BCN_PRBRESP_PROMISC, | 4071 | FIF_BCN_PRBRESP_PROMISC, |
4069 | &local->filter_flags, | 4072 | &local->filter_flags, |
4070 | local->mdev->mc_count, | 4073 | local->mdev->mc_count, |
4071 | local->mdev->mc_list); | 4074 | local->mdev->mc_list); |
4075 | netif_addr_unlock(local->mdev); | ||
4072 | netif_tx_unlock_bh(local->mdev); | 4076 | netif_tx_unlock_bh(local->mdev); |
4073 | 4077 | ||
4074 | /* TODO: start scan as soon as all nullfunc frames are ACKed */ | 4078 | /* TODO: start scan as soon as all nullfunc frames are ACKed */ |