diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2009-01-23 16:54:03 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-01-29 16:01:45 -0500 |
commit | c771c9d8da1e8292ef8bf7fd4ce135dacc650130 (patch) | |
tree | 79b259a6b0396cbecf9e775c7ba5a80e2c4d94c9 /net/mac80211/main.c | |
parent | 506d03f97d10e54fd27c58c872a98242326d6419 (diff) |
mac80211: add interface list lock
Using only the RTNL has a number of problems, most notably that
ieee80211_iterate_active_interfaces() and other interface list
traversals cannot be done from the internal workqueue because it
needs to be flushed under the RTNL.
This patch introduces a new mutex that protects the interface list
against modifications. A more detailed explanation is part of the
code change.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/main.c')
-rw-r--r-- | net/mac80211/main.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/net/mac80211/main.c b/net/mac80211/main.c index 210dfe3cf6c3..a109c06e8e4e 100644 --- a/net/mac80211/main.c +++ b/net/mac80211/main.c | |||
@@ -758,6 +758,7 @@ struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len, | |||
758 | local->hw.conf.radio_enabled = true; | 758 | local->hw.conf.radio_enabled = true; |
759 | 759 | ||
760 | INIT_LIST_HEAD(&local->interfaces); | 760 | INIT_LIST_HEAD(&local->interfaces); |
761 | mutex_init(&local->iflist_mtx); | ||
761 | 762 | ||
762 | spin_lock_init(&local->key_lock); | 763 | spin_lock_init(&local->key_lock); |
763 | 764 | ||
@@ -1008,6 +1009,8 @@ void ieee80211_free_hw(struct ieee80211_hw *hw) | |||
1008 | { | 1009 | { |
1009 | struct ieee80211_local *local = hw_to_local(hw); | 1010 | struct ieee80211_local *local = hw_to_local(hw); |
1010 | 1011 | ||
1012 | mutex_destroy(&local->iflist_mtx); | ||
1013 | |||
1011 | wiphy_free(local->hw.wiphy); | 1014 | wiphy_free(local->hw.wiphy); |
1012 | } | 1015 | } |
1013 | EXPORT_SYMBOL(ieee80211_free_hw); | 1016 | EXPORT_SYMBOL(ieee80211_free_hw); |