On Tue, 2010-04-06 at 11:54 +0300, Teemu Paasikivi wrote: > 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. Actually, let's go with this patch. It should solve both Luis's and your problem, and I just reviewed the locking -- currently scan_mtx and work_mtx are completely independent. Reviewed-by: Johannes Berg <johannes@xxxxxxxxxxxxxxxx> > Signed-off-by: Teemu Paasikivi <ext-teemu.3.paasikivi@xxxxxxxxx> > --- > net/mac80211/work.c | 7 ++++++- > 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); -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html