From 1b0037b1cb287cd4cc215b2d0fc974e5188a6959 Mon Sep 17 00:00:00 2001 From: Michael Baum Date: Sun, 10 Apr 2022 12:25:26 +0300 Subject: [PATCH] net/mlx5: fix setting flags to external Rx queue The flow_drv_rxq_flags_set sets the Rx queue flags (Mark/Flag and Tunnel Ptypes) according to the device flow. It tries to get the RxQ control structure to update its ptype. However, external RxQs don't have control structure to update and it may cause a crash. This patch add check whether this Queue is external. Fixes: 311b17e669ab ("net/mlx5: support queue/RSS actions for external Rx queue") Cc: stable@dpdk.org Signed-off-by: Michael Baum Acked-by: Matan Azrad --- drivers/net/mlx5/mlx5_flow.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c index 28afdfe011..f5bdf661b0 100644 --- a/drivers/net/mlx5/mlx5_flow.c +++ b/drivers/net/mlx5/mlx5_flow.c @@ -1379,8 +1379,11 @@ flow_drv_rxq_flags_set(struct rte_eth_dev *dev, return; for (i = 0; i != ind_tbl->queues_n; ++i) { int idx = ind_tbl->queues[i]; - struct mlx5_rxq_ctrl *rxq_ctrl = mlx5_rxq_ctrl_get(dev, idx); + struct mlx5_rxq_ctrl *rxq_ctrl; + if (mlx5_is_external_rxq(dev, idx)) + continue; + rxq_ctrl = mlx5_rxq_ctrl_get(dev, idx); MLX5_ASSERT(rxq_ctrl != NULL); if (rxq_ctrl == NULL) continue; @@ -1483,8 +1486,11 @@ flow_drv_rxq_flags_trim(struct rte_eth_dev *dev, MLX5_ASSERT(dev->data->dev_started); for (i = 0; i != ind_tbl->queues_n; ++i) { int idx = ind_tbl->queues[i]; - struct mlx5_rxq_ctrl *rxq_ctrl = mlx5_rxq_ctrl_get(dev, idx); + struct mlx5_rxq_ctrl *rxq_ctrl; + if (mlx5_is_external_rxq(dev, idx)) + continue; + rxq_ctrl = mlx5_rxq_ctrl_get(dev, idx); MLX5_ASSERT(rxq_ctrl != NULL); if (rxq_ctrl == NULL) continue; -- 2.39.5