There was an error condition when the burst of packets being transmitted
ended exactly on the last descriptor of the ring. In that instance
alone, we ended up writing an invalid tx_tail value to the hardware, of
ring_size rather than of zero. Add an explicit check for this case to
the simple Tx path code.
Fixes: 9bacf6a81b92 ("net/intel: align scalar simple Tx path with vector logic")
Signed-off-by: Bruce Richardson <[email protected]>
---
drivers/net/intel/common/tx_scalar.h | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/net/intel/common/tx_scalar.h
b/drivers/net/intel/common/tx_scalar.h
index 4475995180..9fcd2e4733 100644
--- a/drivers/net/intel/common/tx_scalar.h
+++ b/drivers/net/intel/common/tx_scalar.h
@@ -145,6 +145,8 @@ ci_xmit_burst_simple(struct ci_tx_queue *txq,
if (txq->tx_next_rs >= txq->nb_tx_desc)
txq->tx_next_rs = (uint16_t)(txq->tx_rs_thresh - 1);
}
+ if (tx_id == txq->nb_tx_desc)
+ tx_id = 0;
txq->tx_tail = tx_id;
--
2.51.0