]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: airoha: stop net_device TX queue before updating CPU index
authorLorenzo Bianconi <lorenzo@kernel.org>
Tue, 21 Apr 2026 06:43:07 +0000 (08:43 +0200)
committerJakub Kicinski <kuba@kernel.org>
Tue, 28 Apr 2026 00:34:03 +0000 (17:34 -0700)
Currently, airoha_eth driver updates the CPU index register prior of
verifying whether the number of free descriptors has fallen below the
threshold.
Move net_device TX queue length check before updating the TX CPU index
in order to update TX CPU index even if there are more packets to be
transmitted but the net_device TX queue is going to be stopped
accounting the inflight packets.

Fixes: 1d304174106c ("net: airoha: Implement BQL support")
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Link: https://patch.msgid.link/20260421-airoha-xmit-stop-condition-v1-1-e670d6a48467@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/airoha/airoha_eth.c

index daae15aa078c8808f7dc51adf0d00c30a33ba9b5..27c85cd957501dd8cc5175e5c20f88eedaa56c7b 100644 (file)
@@ -2094,17 +2094,16 @@ static netdev_tx_t airoha_dev_xmit(struct sk_buff *skb,
 
        skb_tx_timestamp(skb);
        netdev_tx_sent_queue(txq, skb->len);
+       if (q->ndesc - q->queued < q->free_thr) {
+               netif_tx_stop_queue(txq);
+               q->txq_stopped = true;
+       }
 
        if (netif_xmit_stopped(txq) || !netdev_xmit_more())
                airoha_qdma_rmw(qdma, REG_TX_CPU_IDX(qid),
                                TX_RING_CPU_IDX_MASK,
                                FIELD_PREP(TX_RING_CPU_IDX_MASK, index));
 
-       if (q->ndesc - q->queued < q->free_thr) {
-               netif_tx_stop_queue(txq);
-               q->txq_stopped = true;
-       }
-
        spin_unlock_bh(&q->lock);
 
        return NETDEV_TX_OK;