* [PATCH] net/mlx5: fix the inline length exceeding descriptor limit
@ 2022-08-17 14:13 Viacheslav Ovsiienko
2022-08-18 11:07 ` Raslan Darawsheh
0 siblings, 1 reply; 2+ messages in thread
From: Viacheslav Ovsiienko @ 2022-08-17 14:13 UTC (permalink / raw)
To: dev; +Cc: matan, rasland, dkozlyuk, stable
The hardware descriptor (WQE) length field is 6 bits wide
and we have the native limitation for the overall descriptor
length. To improve the PCIe bandwidth the packet data can be
inline into descriptor. If PMD was configured to inline large
amount of data it happened there was no enough space remaining
in the descriptor to specify all the packet data segments and
PMD rejected problematic packets.
The patch tries to adjust the inline data length conservatively
and allows to avoid error occurring.
Fixes: 18a1c20044c0 ("net/mlx5: implement Tx burst template")
Fixes: e2259f93ef45 ("net/mlx5: fix Tx when inlining is impossible")
Cc: stable@dpdk.org
Signed-off-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
Reviewed-by: Dmitry Kozlyuk <dkozlyuk@nvidia.com>
---
drivers/net/mlx5/mlx5_tx.h | 20 ++++++++++++++++++--
1 file changed, 18 insertions(+), 2 deletions(-)
diff --git a/drivers/net/mlx5/mlx5_tx.h b/drivers/net/mlx5/mlx5_tx.h
index 8e113e3778..59ebe95032 100644
--- a/drivers/net/mlx5/mlx5_tx.h
+++ b/drivers/net/mlx5/mlx5_tx.h
@@ -2078,8 +2078,24 @@ mlx5_tx_packet_multi_inline(struct mlx5_txq_data *__rte_restrict txq,
if (unlikely(loc->wqe_free < ((ds + 3) / 4)))
return MLX5_TXCMP_CODE_EXIT;
/* Check for maximal WQE size. */
- if (unlikely((MLX5_WQE_SIZE_MAX / MLX5_WSEG_SIZE) < ds))
- return MLX5_TXCMP_CODE_ERROR;
+ if (unlikely((MLX5_WQE_SIZE_MAX / MLX5_WSEG_SIZE) < ds)) {
+ /* Check if we can adjust the inline length. */
+ if (unlikely(txq->inlen_mode)) {
+ ds = NB_SEGS(loc->mbuf) + 2 +
+ (txq->inlen_mode -
+ MLX5_ESEG_MIN_INLINE_SIZE +
+ MLX5_WSEG_SIZE +
+ MLX5_WSEG_SIZE - 1) / MLX5_WSEG_SIZE;
+ if (unlikely((MLX5_WQE_SIZE_MAX / MLX5_WSEG_SIZE) < ds))
+ return MLX5_TXCMP_CODE_ERROR;
+ }
+ /* We have lucky opportunity to adjust. */
+ inlen = RTE_MIN(inlen, MLX5_WQE_SIZE_MAX -
+ MLX5_WSEG_SIZE * 2 -
+ MLX5_WSEG_SIZE * NB_SEGS(loc->mbuf) -
+ MLX5_WSEG_SIZE +
+ MLX5_ESEG_MIN_INLINE_SIZE);
+ }
#ifdef MLX5_PMD_SOFT_COUNTERS
/* Update sent data bytes/packets counters. */
txq->stats.obytes += dlen + vlan;
--
2.18.1
^ permalink raw reply [flat|nested] 2+ messages in thread
* RE: [PATCH] net/mlx5: fix the inline length exceeding descriptor limit
2022-08-17 14:13 [PATCH] net/mlx5: fix the inline length exceeding descriptor limit Viacheslav Ovsiienko
@ 2022-08-18 11:07 ` Raslan Darawsheh
0 siblings, 0 replies; 2+ messages in thread
From: Raslan Darawsheh @ 2022-08-18 11:07 UTC (permalink / raw)
To: Slava Ovsiienko, dev; +Cc: Matan Azrad, Dmitry Kozlyuk, stable
Hi,
> -----Original Message-----
> From: Slava Ovsiienko <viacheslavo@nvidia.com>
> Sent: Wednesday, August 17, 2022 5:14 PM
> To: dev@dpdk.org
> Cc: Matan Azrad <matan@nvidia.com>; Raslan Darawsheh
> <rasland@nvidia.com>; Dmitry Kozlyuk <dkozlyuk@nvidia.com>;
> stable@dpdk.org
> Subject: [PATCH] net/mlx5: fix the inline length exceeding descriptor limit
>
> The hardware descriptor (WQE) length field is 6 bits wide
> and we have the native limitation for the overall descriptor
> length. To improve the PCIe bandwidth the packet data can be
> inline into descriptor. If PMD was configured to inline large
> amount of data it happened there was no enough space remaining
> in the descriptor to specify all the packet data segments and
> PMD rejected problematic packets.
>
> The patch tries to adjust the inline data length conservatively
> and allows to avoid error occurring.
>
> Fixes: 18a1c20044c0 ("net/mlx5: implement Tx burst template")
> Fixes: e2259f93ef45 ("net/mlx5: fix Tx when inlining is impossible")
> Cc: stable@dpdk.org
>
> Signed-off-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
> Reviewed-by: Dmitry Kozlyuk <dkozlyuk@nvidia.com>
Patch applied to next-net-mlx,
Kindest regards,
Raslan Darawsheh
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2022-08-18 11:07 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-17 14:13 [PATCH] net/mlx5: fix the inline length exceeding descriptor limit Viacheslav Ovsiienko
2022-08-18 11:07 ` Raslan Darawsheh
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).