On Wed, Feb 27, 2019 at 10:40:41PM +0100, Lorenzo Bianconi wrote: > @@ -289,9 +290,14 @@ mt76_tx(struct mt76_dev *dev, struct ieee80211_sta *sta, > dev->queue_ops->tx_queue_skb(dev, q, skb, wcid, sta); > dev->queue_ops->kick(dev, q); > > - if (q->queued > q->ndesc - 8) > - ieee80211_stop_queue(dev->hw, skb_get_queue_mapping(skb)); > + stop = q->queued > q->ndesc - 8 && !q->stopped; > + if (stop) > + q->stopped = true; > + > spin_unlock_bh(&q->lock); > + > + if (stop) > + ieee80211_stop_queue(dev->hw, skb_get_queue_mapping(skb)); I don't think taking this outside of spin_lock section is beneficial. Actually is better to do this faster than slower to prevent enqueue frames by mac80211 and then dropped them due to lack of space in mt76 queue. Stanislaw