Johannes Berg <johannes@xxxxxxxxxxxxxxxx> writes: > On Thu, 2009-04-16 at 09:14 +0300, Kalle Valo wrote: > >> Basically the problem is that if you scan in an area where there are no >> or very few APs and scan takes more than two seconds (like abg band >> scans usually take), sta->last_rx won't get updated because mac80211 is >> not receiving any frames. This is why the beacon loss check will trigger >> in ieee80211_associated(). >> >> The problem won't happen if there are lot of APs in the neighbourhood >> distributed throughout the channels because then sta->last_rx is updated >> often enough and the beacon loss check won't trigger. > > That doesn't make sense, why would our AP sta->last_rx be updated for > other APs? I think you mean sdata->u.mgd.last_beacon, which is, probably > wrongly, updated for all beacons. Yes, I meant sta->last_beacon. But the principle is the same anyway. >> I have been thinking two ways to fix this, either disabling the timer >> for the duration of the scan or add a check for scan scan in >> ieee80211_associated(). I started implementing the former but haven't >> finished it yet. It would be great if someone else can fix it. > > But that doesn't make sense to me now. ieee80211_associated() is only > run from the station work (ieee80211_sta_work) which doesn't do anything > when we're scanning (and gets restarted on scan end). So even if last_rx > or last_beacon isn't updated we should only run the evaluation of that > after the scan finishes. ifmgd->timer is run every two seconds, even then scanning and it calls like this: ieee80211_sta_timer() -> ieee80211_sta_work() -> ieee80211_associated() And to my knowledge the timer is run even when scanning. Or am I missing something? Like you have sometime ago said, this MLME code we would need a rewrite. It's getting messier all the time. -- Kalle Valo -- 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