diff options
author | David S. Miller <davem@davemloft.net> | 2008-07-15 03:13:44 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-07-15 03:13:44 -0400 |
commit | e308a5d806c852f56590ffdd3834d0df0cbed8d7 (patch) | |
tree | 294ff654e90950f5162737c26f4799b0b710b748 /net/mac80211/mlme.c | |
parent | f1f28aa3510ddb84c966bac65611bb866c77a092 (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.c | 4 |
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 */ |