diff options
author | David S. Miller <davem@davemloft.net> | 2016-01-28 16:05:45 -0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-01-28 16:05:45 -0800 |
commit | bd7c5e31552c06f1186606de8914a135e55f6bac (patch) | |
tree | a3d29b319537297a3023af1949b15cca2cc38824 /net/mac80211/util.c | |
parent | c731f0e3493cc9031a0aceea6a50c70beed23e6d (diff) | |
parent | 6736fde9672ff6717ac576e9bba2fd5f3dfec822 (diff) | |
download | op-kernel-dev-bd7c5e31552c06f1186606de8914a135e55f6bac.zip op-kernel-dev-bd7c5e31552c06f1186606de8914a135e55f6bac.tar.gz |
Merge tag 'mac80211-for-davem-2016-01-26' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211
Johannes Berg says:
====================
Here's a first set of fixes for the 4.5-rc cycle:
* make regulatory messages much less verbose by default
* various remain-on-channel fixes
* scheduled scanning fixes with hardware restart
* a PS-Poll handling fix; was broken just recently
* bugfix to avoid buffering non-bufferable MMPDUs
* world regulatory domain data fix
* a fix for scanning causing other work to get stuck
* hwsim: revert an older problematic patch that caused some
userspace tools to have issues - not that big a deal as
it's a debug only driver though
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/mac80211/util.c')
-rw-r--r-- | net/mac80211/util.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/net/mac80211/util.c b/net/mac80211/util.c index 3943d4b..58f58bd 100644 --- a/net/mac80211/util.c +++ b/net/mac80211/util.c @@ -2043,16 +2043,26 @@ int ieee80211_reconfig(struct ieee80211_local *local) */ if (sched_scan_req->n_scan_plans > 1 || __ieee80211_request_sched_scan_start(sched_scan_sdata, - sched_scan_req)) + sched_scan_req)) { + RCU_INIT_POINTER(local->sched_scan_sdata, NULL); + RCU_INIT_POINTER(local->sched_scan_req, NULL); sched_scan_stopped = true; + } mutex_unlock(&local->mtx); if (sched_scan_stopped) cfg80211_sched_scan_stopped_rtnl(local->hw.wiphy); wake_up: - local->in_reconfig = false; - barrier(); + if (local->in_reconfig) { + local->in_reconfig = false; + barrier(); + + /* Restart deferred ROCs */ + mutex_lock(&local->mtx); + ieee80211_start_next_roc(local); + mutex_unlock(&local->mtx); + } if (local->monitors == local->open_count && local->monitors > 0) ieee80211_add_virtual_monitor(local); |