mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 19:13:47 +02:00
bnxt_en: Prevent TX timeout with a very small TX ring
If xmit_more condition is true, the driver may set the
TX_BD_FLAGS_NO_CMPL flag. If after this packet, the TX ring can no
longer hold a packet with maximum fragments, we will stop the TX
queue. When this happens, we must clear the TX_BD_FLAGS_NO_CMPL flag
on the last packet or there will be no completion and cause TX
timeout.
Fixes: c1056a59ae ("bnxt_en: Optimize xmit_more TX path")
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
Reviewed-by: Andy Gospodarek <andrew.gospodarek@broadcom.com>
Reviewed-by: Hongguang Gao <hongguang.gao@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Link: https://lore.kernel.org/r/20231212005122.2401-5-michael.chan@broadcom.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
18fe0a383c
commit
f12f551b5b
|
|
@ -666,8 +666,11 @@ static netdev_tx_t bnxt_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
tx_done:
|
||||
|
||||
if (unlikely(bnxt_tx_avail(bp, txr) <= MAX_SKB_FRAGS + 1)) {
|
||||
if (netdev_xmit_more() && !tx_buf->is_push)
|
||||
if (netdev_xmit_more() && !tx_buf->is_push) {
|
||||
txbd0->tx_bd_len_flags_type &=
|
||||
cpu_to_le32(~TX_BD_FLAGS_NO_CMPL);
|
||||
bnxt_txr_db_kick(bp, txr, prod);
|
||||
}
|
||||
|
||||
netif_txq_try_stop(txq, bnxt_tx_avail(bp, txr),
|
||||
bp->tx_wake_thresh);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user