net/mlx5: fix port initialization with small LRO
PATCH 1/1 net/mlx5: fix port initialization with small LRO
If application provided maximal LRO size was less than expected PMD minimum, the PMD either crashed with assert, if asserts were enabled, or proceeded with port initialization to set port private maximal LRO size below supported minimum.
The patch terminates port start if LRO size
does not match PMD requirements and TCP LRO offload was requested at least for one Rx queue.
--- drivers/net/mlx5/mlx5_rxq.c | 1 - drivers/net/mlx5/mlx5_trigger.c | 16 ++++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-)
drivers/net/mlx5/mlx5_rxq.c +0 -1
@@ -1533,7 +1533,6 @@ mlx5_max_lro_msg_size_adjust(struct rte_eth_dev *dev, uint16_t idx, MLX5_MAX_TCP_HDR_OFFSET) max_lro_size -= MLX5_MAX_TCP_HDR_OFFSET; max_lro_size =RTE_MIN (max_lro_size,MLX5_MAX_LRO_SIZE ); -MLX5_ASSERT (max_lro_size >=MLX5_LRO_SEG_CHUNK_SIZE ); max_lro_size /=MLX5_LRO_SEG_CHUNK_SIZE ;if (priv->max_lro_msg_size) priv->max_lro_msg_size =
drivers/net/mlx5/mlx5_trigger.c +16 -0
@@ -1167,6 +1167,22 @@ mlx5_dev_start(struct rte_eth_dev *dev)else rte_net_mlx5_dynf_inline_mask =0 ;if (dev->data->nb_rx_queues >0 ) { +uint32_t max_lro_msg_size = priv->max_lro_msg_size; + +if (max_lro_msg_size <MLX5_LRO_SEG_CHUNK_SIZE ) { +uint32_t i; +struct mlx5_rxq_priv *rxq; + +for (i =0 ; i != priv->rxqs_n; ++i) { + rxq =mlx5_rxq_get (dev, i); +if (rxq && rxq->ctrl && rxq->ctrl->rxq.lro) { +DRV_LOG (ERR ,"port %u invalid max LRO size" , + dev->data->port_id); + rte_errno =EINVAL ; +return -rte_errno; + } + } + } ret =mlx5_dev_configure_rss_reta (dev);if (ret) { DRV_LOG(ERR, "port %u reta config failed: %s",
Signature · 1 line
2.34.1
Hi,
Quoted 18 lines
-----Original Message-----
From: Gregory Etelson <[email protected]>
Sent: Wednesday, November 9, 2022 6:51 PM
To: [email protected]
Cc: Gregory Etelson <[email protected]>; Matan Azrad <[email protected]>; Raslan Darawsheh <[email protected]>; [email protected]; Slava Ovsiienko <[email protected]>
Subject: [PATCH] net/mlx5: fix port initialization with small LROIf application provided maximal LRO size was less than expected PMD minimum, the PMD either crashed with assert, if asserts were enabled, or proceeded with port initialization to set port private maximal LRO size below supported minimum.
The patch terminates port start if LRO size
does not match PMD requirements and TCP LRO offload was requested at least for one Rx queue.
Quoted 6 lines
Fixes 50c00baff763 ("net/mlx5: limit LRO size to maximum Rx packet")Signed-off-by Gregory Etelson <[email protected]>Acked-by Matan Azrad <[email protected]>
Patch applied to next-net-mlx,
Kindest regards,
Raslan Darawsheh