> if (local->ops->wake_tx_queue) > return; > > evaluates to true. The rest rest of the function is therefore always > skipped for ath9k. Ahh, yes, ok. > Removing this is enough to fix the problem. And now you will propably > say "hey, this is not my code". And this is the reason why I have now > CC'ed the author of 80a83cfc434b ("mac80211: skip netdev queue > control with software queuing"). This change in > ieee80211_propagate_queue_wake is basically breaking > the (delayed) startup of the ibss netdev queue [1] when the device > was offchan during the ieee80211_do_open of the ibss interface. > > Not sure whether removing it in ieee80211_propagate_queue_wake will > have other odd side effects with software queuing. Maybe Michal > Kazior can tell us if it is safe to remove it. No, it's the other way around. Michal's patches correctly added a test for this to __ieee80211_stop_queue(), the only missing thing is that this test should also be in ieee80211_do_open() like this: diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index 40813dd3301c..5bb0c5012819 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c @@ -718,7 +718,8 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up) ieee80211_recalc_ps(local); if (sdata->vif.type == NL80211_IFTYPE_MONITOR || - sdata->vif.type == NL80211_IFTYPE_AP_VLAN) { + sdata->vif.type == NL80211_IFTYPE_AP_VLAN || + local->ops->wake_tx_queue) { /* XXX: for AP_VLAN, actually track AP queues */ netif_tx_start_all_queues(dev); } else if (dev) { johannes