If packets are completely inline the mbuf is freed immediately after data copying and no pointer is stored into elts array to be free on completion. This leads the elts_head is not updated and completion request buffer counter works incorrect. This patch decrements the base value elts_comp used to calculate counter threshold and completion requests flags are set more correctly on the base of MLX5_TX_COMP_THRESH value.
Fixes: 18a1c20044c0 ("net/mlx5: implement Tx burst template") Signed-off-by: Viacheslav Ovsiienko <viachesl...@mellanox.com> --- drivers/net/mlx5/mlx5_rxtx.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/net/mlx5/mlx5_rxtx.c b/drivers/net/mlx5/mlx5_rxtx.c index a890f41..308133b 100644 --- a/drivers/net/mlx5/mlx5_rxtx.c +++ b/drivers/net/mlx5/mlx5_rxtx.c @@ -4097,6 +4097,7 @@ enum mlx5_txcmp_code { * Packet data are completely inlined, * free the packet immediately. */ + txq->elts_comp--; rte_pktmbuf_free_seg(loc->mbuf); goto next_mbuf; pointer_empw: @@ -4283,6 +4284,7 @@ enum mlx5_txcmp_code { * Packet data are completely inlined, * free the packet immediately. */ + txq->elts_comp--; rte_pktmbuf_free_seg(loc->mbuf); } else if (!MLX5_TXOFF_CONFIG(EMPW) && txq->inlen_mode) { -- 1.8.3.1