net/mlx5: fix completion request for inline packets
Checks
Commit Message
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 <viacheslavo@mellanox.com>
---
drivers/net/mlx5/mlx5_rxtx.c | 2 ++
1 file changed, 2 insertions(+)
Comments
From: Viacheslav Ovsiienko
> 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 <viacheslavo@mellanox.com>
Acked-by: Matan Azrad <matan@mellanox.com>
@@ -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) {