Commit 3854de7b authored by Lorenzo Bianconi's avatar Lorenzo Bianconi Committed by Jakub Kicinski
Browse files

net: airoha: stop net_device TX queue before updating CPU index



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: 1d304174 ("net: airoha: Implement BQL support")
Signed-off-by: default avatarLorenzo Bianconi <lorenzo@kernel.org>
Link: https://patch.msgid.link/20260421-airoha-xmit-stop-condition-v1-1-e670d6a48467@kernel.org


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 2d9f5a11
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -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;