aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeemu Paasikivi <ext-teemu.3.paasikivi@nokia.com>2010-04-09 13:07:55 +0300
committerJohn W. Linville <linville@tuxdriver.com>2010-04-09 13:43:11 -0400
commit68dd5b7a45d1935fcd32b786e8d3d3f7bb4bbfe7 (patch)
treef3474311eea60bdf71612770dd7311e66749f6c5
parent00236aedf1d2c49a18ae9ea00698d97705ff7289 (diff)
downloadkernel_goldelico_gta04-68dd5b7a45d1935fcd32b786e8d3d3f7bb4bbfe7.zip
kernel_goldelico_gta04-68dd5b7a45d1935fcd32b786e8d3d3f7bb4bbfe7.tar.gz
kernel_goldelico_gta04-68dd5b7a45d1935fcd32b786e8d3d3f7bb4bbfe7.tar.bz2
mac80211: check whether scan is in progress before queueing scan_work
As scan_work is queued from work_work it needs to be checked if scan has been started during execution of work_work. Otherwise, when hw scan is used, the stack gets error about hw being busy with ongoing scan. This causes the stack to abort scan without notifying the driver about it. This leads to a situation where the hw is scanning and the stack thinks it's not. Then when the scan finishes, the stack will complain by warnings. Signed-off-by: Teemu Paasikivi <ext-teemu.3.paasikivi@nokia.com> Reviewed-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--net/mac80211/work.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/net/mac80211/work.c b/net/mac80211/work.c
index 1e1ea30..7bd8670 100644
--- a/net/mac80211/work.c
+++ b/net/mac80211/work.c
@@ -919,11 +919,16 @@ static void ieee80211_work_work(struct work_struct *work)
run_again(local, jiffies + HZ/2);
}
- if (list_empty(&local->work_list) && local->scan_req)
+ mutex_lock(&local->scan_mtx);
+
+ if (list_empty(&local->work_list) && local->scan_req &&
+ !local->scanning)
ieee80211_queue_delayed_work(&local->hw,
&local->scan_work,
round_jiffies_relative(0));
+ mutex_unlock(&local->scan_mtx);
+
mutex_unlock(&local->work_mtx);
ieee80211_recalc_idle(local);