aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/mlme.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2008-07-15 03:13:44 -0400
committerDavid S. Miller <davem@davemloft.net>2008-07-15 03:13:44 -0400
commite308a5d806c852f56590ffdd3834d0df0cbed8d7 (patch)
tree294ff654e90950f5162737c26f4799b0b710b748 /net/mac80211/mlme.c
parentf1f28aa3510ddb84c966bac65611bb866c77a092 (diff)
netdev: Add netdev->addr_list_lock protection.
Add netif_addr_{lock,unlock}{,_bh}() helpers. Use them to protect operations that operate on or read the network device unicast and multicast address lists. Also use them in cases where the code simply wants to block calls into the driver's ->set_rx_mode() and ->set_multicast_list() methods. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/mac80211/mlme.c')
-rw-r--r--net/mac80211/mlme.c4
1 files changed, 4 insertions, 0 deletions
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 */