Skip to content

Commit ce0fd82

Browse files
LorenzoBianconinbd168
authored andcommitted
mt76: usb: reduce locking in mt76u_tx_tasklet
Similar to pci counterpart, reduce locking in mt76u_tx_tasklet since q->head is managed just in mt76u_tx_tasklet and q->queued is updated holding q->lock Signed-off-by: Lorenzo Bianconi <[email protected]> Signed-off-by: Felix Fietkau <[email protected]>
1 parent 37426fb commit ce0fd82

File tree

1 file changed

+12
-8
lines changed
  • drivers/net/wireless/mediatek/mt76

1 file changed

+12
-8
lines changed

drivers/net/wireless/mediatek/mt76/usb.c

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -624,28 +624,33 @@ static void mt76u_tx_tasklet(unsigned long data)
624624
int i;
625625

626626
for (i = 0; i < IEEE80211_NUM_ACS; i++) {
627+
u32 n_dequeued = 0, n_sw_dequeued = 0;
628+
627629
sq = &dev->q_tx[i];
628630
q = sq->q;
629631

630-
spin_lock_bh(&q->lock);
631-
while (true) {
632-
if (!q->entry[q->head].done || !q->queued)
632+
while (q->queued > n_dequeued) {
633+
if (!q->entry[q->head].done)
633634
break;
634635

635636
if (q->entry[q->head].schedule) {
636637
q->entry[q->head].schedule = false;
637-
sq->swq_queued--;
638+
n_sw_dequeued++;
638639
}
639640

640641
entry = q->entry[q->head];
642+
q->entry[q->head].done = false;
641643
q->head = (q->head + 1) % q->ndesc;
642-
q->queued--;
644+
n_dequeued++;
643645

644-
spin_unlock_bh(&q->lock);
645646
dev->drv->tx_complete_skb(dev, i, &entry);
646-
spin_lock_bh(&q->lock);
647647
}
648648

649+
spin_lock_bh(&q->lock);
650+
651+
sq->swq_queued -= n_sw_dequeued;
652+
q->queued -= n_dequeued;
653+
649654
wake = q->stopped && q->queued < q->ndesc - 8;
650655
if (wake)
651656
q->stopped = false;
@@ -741,7 +746,6 @@ mt76u_tx_queue_skb(struct mt76_dev *dev, enum mt76_txq_id qid,
741746
if (err < 0)
742747
return err;
743748

744-
q->entry[idx].done = false;
745749
urb = q->entry[idx].urb;
746750
err = mt76u_tx_setup_buffers(dev, skb, urb);
747751
if (err < 0)

0 commit comments

Comments
 (0)