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 <[email protected]>
---
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