diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2008-04-11 21:40:35 +0200 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2008-04-16 21:59:57 +0200 |
commit | b16bd15c379410f2aa47837aa4a0de5712856ad5 (patch) | |
tree | fd391bb12b146aaf001ae169a4c98f7088299edd /net/mac80211/ieee80211_i.h | |
parent | proc: switch /proc/driver/ray_cs/ray_cs to seq_file interface (diff) | |
download | linux-b16bd15c379410f2aa47837aa4a0de5712856ad5.tar.xz linux-b16bd15c379410f2aa47837aa4a0de5712856ad5.zip |
mac80211: fix spinlock recursion
When STAs are expired, we need to hold the sta_lock. Using
the same lock for keys too would then mean we'd need another
key free function, and that'll just lead to confusion, so just
use a new spinlock for all key lists.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/ieee80211_i.h')
-rw-r--r-- | net/mac80211/ieee80211_i.h | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h index c642538e8282..ce566f3e0169 100644 --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h @@ -600,8 +600,7 @@ struct ieee80211_local { /* * The lock only protects the list, hash, timer and counter * against manipulation, reads are done in RCU. Additionally, - * the lock protects each BSS's TIM bitmap, a few items in - * STA info structures and various key pointers. + * the lock protects each BSS's TIM bitmap. */ spinlock_t sta_lock; unsigned long num_sta; @@ -635,6 +634,13 @@ struct ieee80211_local { struct list_head interfaces; + /* + * Key lock, protects sdata's key_list and sta_info's + * key pointers (write access, they're RCU.) + */ + spinlock_t key_lock; + + bool sta_sw_scanning; bool sta_hw_scanning; int scan_channel_idx; |