aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorTeemu Paasikivi <ext-teemu.3.paasikivi@nokia.com>2010-04-09 06:07:55 -0400
committerJohn W. Linville <linville@tuxdriver.com>2010-04-09 13:43:11 -0400
commit68dd5b7a45d1935fcd32b786e8d3d3f7bb4bbfe7 (patch)
treef3474311eea60bdf71612770dd7311e66749f6c5 /net
parent00236aedf1d2c49a18ae9ea00698d97705ff7289 (diff)
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>
Diffstat (limited to 'net')
-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 1e1ea3007b06..7bd8670379de 100644
--- a/net/mac80211/work.c
+++ b/net/mac80211/work.c
@@ -919,11 +919,16 @@ static void ieee80211_work_work(struct work_struct *work)
919 run_again(local, jiffies + HZ/2); 919 run_again(local, jiffies + HZ/2);
920 } 920 }
921 921
922 if (list_empty(&local->work_list) && local->scan_req) 922 mutex_lock(&local->scan_mtx);
923
924 if (list_empty(&local->work_list) && local->scan_req &&
925 !local->scanning)
923 ieee80211_queue_delayed_work(&local->hw, 926 ieee80211_queue_delayed_work(&local->hw,
924 &local->scan_work, 927 &local->scan_work,
925 round_jiffies_relative(0)); 928 round_jiffies_relative(0));
926 929
930 mutex_unlock(&local->scan_mtx);
931
927 mutex_unlock(&local->work_mtx); 932 mutex_unlock(&local->work_mtx);
928 933
929 ieee80211_recalc_idle(local); 934 ieee80211_recalc_idle(local);