net/mlx5: fix completion request for inline packets

Message ID 1564926975-31571-1-git-send-email-viacheslavo@mellanox.com (mailing list archive)
State Changes Requested, archived
Delegated to: Raslan Darawsheh
Headers
Series net/mlx5: fix completion request for inline packets |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Slava Ovsiienko Aug. 4, 2019, 1:56 p.m. UTC
  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

Matan Azrad Aug. 5, 2019, 6:40 a.m. UTC | #1
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>
  

Patch

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) {