diff options
author | Johannes Berg <johannes.berg@intel.com> | 2013-03-27 23:20:27 +0100 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2013-04-08 09:17:00 +0200 |
commit | 3c3e21e7443bdb948437a6e925fd111e932dc083 (patch) | |
tree | f8d2035b81e1aef8c0f26ade67c9756da5109b2d /net/mac80211/util.c | |
parent | mac80211: purge remain-on-channel items when suspending (diff) | |
download | linux-3c3e21e7443bdb948437a6e925fd111e932dc083.tar.xz linux-3c3e21e7443bdb948437a6e925fd111e932dc083.zip |
mac80211: destroy virtual monitor interface across suspend
It has to be removed from the driver, but completely
destroying it helps handle unplug of a device during
suspend since then the channel context handling etc.
doesn't have to happen later when it's removed.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/util.c')
-rw-r--r-- | net/mac80211/util.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/net/mac80211/util.c b/net/mac80211/util.c index f9581c6378ae..43465b6e4778 100644 --- a/net/mac80211/util.c +++ b/net/mac80211/util.c @@ -1461,6 +1461,8 @@ int ieee80211_reconfig(struct ieee80211_local *local) /* add interfaces */ sdata = rtnl_dereference(local->monitor_sdata); if (sdata) { + /* in HW restart it exists already */ + WARN_ON(local->resuming); res = drv_add_interface(local, sdata); if (WARN_ON(res)) { rcu_assign_pointer(local->monitor_sdata, NULL); @@ -1650,6 +1652,9 @@ int ieee80211_reconfig(struct ieee80211_local *local) local->in_reconfig = false; barrier(); + if (local->monitors == local->open_count && local->monitors > 0) + ieee80211_add_virtual_monitor(local); + /* * Clear the WLAN_STA_BLOCK_BA flag so new aggregation * sessions can be established after a resume. |