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

Reply via email to