Skip to contentSkip to conversation

net/mlx5: fix multi segment packet wraparound

PATCH Superseded Dariusz Sosnowski 2 participants 3 messages Nov 19, 2021 – Nov 23, 2021 Network drivers

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 net/mlx5: fix multi segment packet wraparound

This patch fixes the assertion failure triggered when the user configured minimum inline length requirements and the application transmitted multi segment packets. Failure was triggered when space left in TX queue was not enough to cover this requirement.

This patch limits the length of data to be copied to the available space in TX queue.

Fixes cacb44a09962 ("net/mlx5: add no-inline Tx flag")
---
 drivers/net/mlx5/mlx5_tx.h | 5 +++++
 1 file changed, 5 insertions(+)
drivers/net/mlx5/mlx5_tx.h +5 -0
index bc629983fa..f3727351ca 100644
@@ -1222,6 +1222,11 @@ mlx5_tx_eseg_mdat(struct mlx5_txq_data *__rte_restrict txq,
 		 */
 		copy = tso ? inlen : txq->inlen_mode;
 		copy = tlen >= copy ? 0 : (copy - tlen);
+		/*
+		 * Limit amount of data to be copied to the length of available
+		 * WQE ring buffer space or packet data left to be copied.
+		 */
+		copy = RTE_MIN(part, copy);
 		copy = mlx5_tx_mseg_memcpy(pdst, loc, part, copy, olx);
 		tlen += copy;
 		if (likely(inlen <= tlen) || copy < part) {
Signature · 1 line
2.25.1
#1 lore raw

PATCH v2 1/1 net/mlx5: fix multi segment packet wraparound

This patch fixes the assertion failure triggered when the user configured minimum inline length requirements and the application transmitted multi segment packets. Failure was triggered when space left in TX queue was not enough to cover this requirement.

This patch limits the length of data to be copied to the available space in TX queue.

Fixes cacb44a09962 ("net/mlx5: add no-inline Tx flag")
---
 drivers/net/mlx5/mlx5_tx.h | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)
drivers/net/mlx5/mlx5_tx.h +4 -3
index bc629983fa..099e72935a 100644
@@ -1071,7 +1071,6 @@ mlx5_tx_mseg_memcpy(uint8_t *pdst,
 	uint8_t *psrc;
 
 	MLX5_ASSERT(len);
-	MLX5_ASSERT(must <= len);
 	do {
 		/* Allow zero length packets, must check first. */
 		dlen = rte_pktmbuf_data_len(loc->mbuf);
@@ -1098,9 +1097,11 @@ mlx5_tx_mseg_memcpy(uint8_t *pdst,
 				if (diff <= rte_pktmbuf_data_len(loc->mbuf)) {
 					/*
 					 * Copy only the minimal required
-					 * part of the data buffer.
+					 * part of the data buffer. Limit amount
+					 * of data to be copied to the length of
+					 * available space.
 					 */
-					len = diff;
+					len = RTE_MIN(len, diff);
 				}
 			}
 			continue;
Signature · 1 line
2.25.1
#2 lore raw

Hi,

Quoted 17 lines

-----Original Message-----
From: Dariusz Sosnowski <[email protected]>
Sent: Tuesday, November 23, 2021 3:58 PM
To: Matan Azrad <[email protected]>; Slava Ovsiienko <[email protected]>
Cc: [email protected]; Raslan Darawsheh <[email protected]>; [email protected]
Subject: [PATCH v2] net/mlx5: fix multi segment packet wraparound

This patch fixes the assertion failure triggered when the user configured minimum inline length requirements and the application transmitted multi segment packets. Failure was triggered when space left in TX queue was not enough to cover this requirement.

This patch limits the length of data to be copied to the available space in TX queue.

Quoted 6 lines
Fixes cacb44a09962 ("net/mlx5: add no-inline Tx flag")

Patch applied to next-net-mlx,

Kindest regards,
Raslan Darawsheh