mt76: introduce q->stopped parameter
Subsystems (2)
A message that is not in the archive (sent off-list or not yet received): [email protected]
Lorenzo Bianconi
maintainerPATCH v2 1/1 mt76: introduce q->stopped parameter
Introduce mt76_queue stopped parameter in order to run ieee80211_wake_queue only when mac80211 queues have been previously stopped and avoid to disable interrupts when it is not necessary
Signed-off-by Lorenzo Bianconi <[email protected]>
---
Changes since v1:
- move back ieee80211_stop_queue() inside q->lock critical section
--- drivers/net/wireless/mediatek/mt76/dma.c | 5 ++++- drivers/net/wireless/mediatek/mt76/mt76.h | 1 + drivers/net/wireless/mediatek/mt76/tx.c | 5 ++++- drivers/net/wireless/mediatek/mt76/usb.c | 6 +++++- 4 files changed, 14 insertions(+), 3 deletions(-)
drivers/net/wireless/mediatek/mt76/dma.c +4 -1
@@ -180,7 +180,10 @@ mt76_dma_tx_cleanup(struct mt76_dev *dev, enum mt76_txq_id qid, bool flush)else mt76_dma_sync_idx (dev, q); - wake = wake && qid <IEEE80211_NUM_ACS && q->queued < q->ndesc -8 ; + wake = wake && q->stopped && + qid <IEEE80211_NUM_ACS && q->queued < q->ndesc -8 ; +if (wake) + q->stopped = false;if (!q->queued)wake_up (&dev->tx_wait);
drivers/net/wireless/mediatek/mt76/mt76.h +1 -0
@@ -126,6 +126,7 @@ struct mt76_queue {int ndesc;int queued;int buf_size; +bool stopped;u8 buf_offset;u8 hw_idx;
drivers/net/wireless/mediatek/mt76/tx.c +4 -1
@@ -289,8 +289,11 @@ 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 ) +if (q->queued > q->ndesc -8 && !q->stopped) {ieee80211_stop_queue (dev->hw,skb_get_queue_mapping (skb)); + q->stopped = true; + } +spin_unlock_bh (&q->lock); }EXPORT_SYMBOL_GPL (mt76_tx);
drivers/net/wireless/mediatek/mt76/usb.c +5 -1
@@ -655,7 +655,11 @@ static void mt76u_tx_tasklet(unsigned long data)spin_lock_bh (&q->lock); }mt76_txq_schedule (dev, q); - wake = i <IEEE80211_NUM_ACS && q->queued < q->ndesc -8 ; + + wake = q->stopped && q->queued < q->ndesc -8 ; +if (wake) + q->stopped = false; +if (!q->queued)wake_up (&dev->tx_wait);
Signature · 1 line
2.20.1
Quoted 6 lines · Lorenzo Bianconi
Introduce
mt76_queuestopped parameter in order to runieee80211_wake_queueonly when mac80211 queues have been previously stopped and avoid to disable interrupts when it is not necessarySigned-off-by Lorenzo Bianconi <[email protected]>
Applied, thanks.
- Felix