diff options
author | David S. Miller <davem@davemloft.net> | 2013-10-17 16:05:50 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-10-17 16:05:50 -0400 |
commit | df709a18cae475de38ddaff63584692d50267b92 (patch) | |
tree | 94db1a56c2427baaf1d2d92364718f69f77d95c7 /net/mac80211/scan.c | |
parent | ce97fef4235378108ed3bd96e1b3eab8fd0a1fbd (diff) | |
parent | 39c253ed7817bf477189a132b114303c9aa2c2d2 (diff) |
Merge branch 'for-davem' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless
John W. Linville says:
====================
Please pull this batch of fixes intended for the 3.12 stream!
For the mac80211 bits, Johannes says:
"Jouni fixes a remain-on-channel vs. scan bug, and Felix fixes client TX
probing on VLANs."
And also:
"This time I have two fixes from Emmanuel for RF-kill issues, and fixed
two issues reported by Evan Huus and Thomas Lindroth respectively."
On top of those...
Avinash Patil adds a couple of mwifiex fixes to properly inform cfg80211
about some different types of disconnects, avoiding WARNINGs.
Mark Cave-Ayland corrects a pointer arithmetic problem in rtlwifi,
avoiding incorrect automatic gain calculations.
Solomon Peachy sends a cw1200 fix for locking around calls to
cw1200_irq_handler, addressing "lost interrupt" problems.
Please let me know if there are problems!
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/mac80211/scan.c')
-rw-r--r-- | net/mac80211/scan.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/net/mac80211/scan.c b/net/mac80211/scan.c index 08afe74b98f4..d2d17a449224 100644 --- a/net/mac80211/scan.c +++ b/net/mac80211/scan.c | |||
@@ -238,6 +238,9 @@ static bool ieee80211_prep_hw_scan(struct ieee80211_local *local) | |||
238 | enum ieee80211_band band; | 238 | enum ieee80211_band band; |
239 | int i, ielen, n_chans; | 239 | int i, ielen, n_chans; |
240 | 240 | ||
241 | if (test_bit(SCAN_HW_CANCELLED, &local->scanning)) | ||
242 | return false; | ||
243 | |||
241 | do { | 244 | do { |
242 | if (local->hw_scan_band == IEEE80211_NUM_BANDS) | 245 | if (local->hw_scan_band == IEEE80211_NUM_BANDS) |
243 | return false; | 246 | return false; |
@@ -940,7 +943,23 @@ void ieee80211_scan_cancel(struct ieee80211_local *local) | |||
940 | if (!local->scan_req) | 943 | if (!local->scan_req) |
941 | goto out; | 944 | goto out; |
942 | 945 | ||
946 | /* | ||
947 | * We have a scan running and the driver already reported completion, | ||
948 | * but the worker hasn't run yet or is stuck on the mutex - mark it as | ||
949 | * cancelled. | ||
950 | */ | ||
951 | if (test_bit(SCAN_HW_SCANNING, &local->scanning) && | ||
952 | test_bit(SCAN_COMPLETED, &local->scanning)) { | ||
953 | set_bit(SCAN_HW_CANCELLED, &local->scanning); | ||
954 | goto out; | ||
955 | } | ||
956 | |||
943 | if (test_bit(SCAN_HW_SCANNING, &local->scanning)) { | 957 | if (test_bit(SCAN_HW_SCANNING, &local->scanning)) { |
958 | /* | ||
959 | * Make sure that __ieee80211_scan_completed doesn't trigger a | ||
960 | * scan on another band. | ||
961 | */ | ||
962 | set_bit(SCAN_HW_CANCELLED, &local->scanning); | ||
944 | if (local->ops->cancel_hw_scan) | 963 | if (local->ops->cancel_hw_scan) |
945 | drv_cancel_hw_scan(local, | 964 | drv_cancel_hw_scan(local, |
946 | rcu_dereference_protected(local->scan_sdata, | 965 | rcu_dereference_protected(local->scan_sdata, |