On Tue, 2010-04-06 at 13:16 +0300, Teemu Paasikivi wrote: > On Tue, 2010-04-06 at 11:06 +0200, ext Johannes Berg wrote: > > 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. > > > > Does that mean we ask the driver to scan twice? And your particular > > driver returns busy? > > > > Yes. There seems to be a possibility, that when ieee80211_work_work is > being executed, __ieee80211_start_scan gets called and it starts a hw > scan, and also sets local->hw_scan_req etc. (because it looks like > there's some holes in use of scan_mtx). Result is that work_work queues > ieee80211_scan_work and when it is executed, as there's already > hw_scan_req set, it will try to start hw scan again. And as the driver > used returns busy, scan_work will call ieee80211_scan_completed function > which leaves the driver (hw more precisely) scanning and the stack > thinking that it is not anymore scanning. > > Obviously this kind of situation doesn't happen very often in normal > use, but it can be caused quite easily by associating to access points > in a loop while running scan in another loop. Makes some sense. Ignore my other email(s), I looked at this in more detail now. It would appear that we need to fix some of the locking here, potentially simply using a single mutex for both work and scan? johannes -- 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