On Wed, 2008-09-24 at 16:36 +0200, Helmut Schaa wrote: > Could somebody please have a look at the TODO comments (I have no idea how > to wait until all null-func frames are ACKed)? Thanks. It's not really possible. > + if (local->bg_scanning) { > + /* > + * background scan is in progress, notify all associated > + * access points about us leaving the channel and > + * update the filter flags > + */ > + local->sw_scanning = 1; use true/false please > + rcu_read_lock(); > + list_for_each_entry_rcu(sdata, &local->interfaces, list) { > + if (sdata->vif.type == NL80211_IFTYPE_STATION && > + (sdata->u.sta.flags & IEEE80211_STA_ASSOCIATED)) { > + ieee80211_send_nullfunc(local, sdata, 1); > + /* TODO: wait until all nullfunc frames are ACKed */ > + msleep(1); I don't think you can msleep here? > + break; > + > + case SCAN_OPERATION: > + rcu_read_lock(); > + list_for_each_entry_rcu(sdata, &local->interfaces, list) { > + /* Tell AP we're back */ > + if (sdata->vif.type == NL80211_IFTYPE_STATION && > + sdata->u.sta.flags & IEEE80211_STA_ASSOCIATED) { > + ieee80211_send_nullfunc(local, sdata, 0); > + /* TODO: wait until all nullfunc frames are ACKed */ > + msleep(1); > + netif_tx_wake_all_queues(sdata->dev); This is worsening a problem we already have -- you can enable queues that the driver asked to be disabled. Until we fix that, I don't think we should tempt our luck even more. > - if (local->sw_scanning || local->hw_scanning) > + if (local->sw_scanning || local->hw_scanning || local->bg_scanning) I don't really like that. I think these three bools should become an enum now. And why is sw_scanning false if bg_scanning is true anyway? johannes
Attachment:
signature.asc
Description: This is a digitally signed message part