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 @@ normal_tx:
|
||||
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