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

Reply via email to