When a failure occurs during the VLAN actions creating, the value of "rte_errno" is already set by the mlx5dr_action_create*. The value can be returned directly to reflect the actual reason.
In the meanwhile, the "rte_flow_error" structure should also be set with explict message. Fixes: 773ca0e91ba1 ("net/mlx5: support VLAN push/pop/modify with HWS") Cc: getel...@nvidia.com Signed-off-by: Bing Zhao <bi...@nvidia.com> Acked-by: Ori Kam <or...@nvidia.com> --- drivers/net/mlx5/mlx5_flow_hw.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c index 20941b4fc7..36a7f0989c 100644 --- a/drivers/net/mlx5/mlx5_flow_hw.c +++ b/drivers/net/mlx5/mlx5_flow_hw.c @@ -7125,27 +7125,28 @@ flow_hw_create_vlan(struct rte_eth_dev *dev) MLX5DR_ACTION_FLAG_HWS_FDB }; + /* rte_errno is set in the mlx5dr_action* functions. */ for (i = MLX5DR_TABLE_TYPE_NIC_RX; i <= MLX5DR_TABLE_TYPE_NIC_TX; i++) { priv->hw_pop_vlan[i] = mlx5dr_action_create_pop_vlan(priv->dr_ctx, flags[i]); if (!priv->hw_pop_vlan[i]) - return -ENOENT; + return -rte_errno; priv->hw_push_vlan[i] = mlx5dr_action_create_push_vlan(priv->dr_ctx, flags[i]); if (!priv->hw_pop_vlan[i]) - return -ENOENT; + return -rte_errno; } if (priv->sh->config.dv_esw_en && priv->master) { priv->hw_pop_vlan[MLX5DR_TABLE_TYPE_FDB] = mlx5dr_action_create_pop_vlan (priv->dr_ctx, MLX5DR_ACTION_FLAG_HWS_FDB); if (!priv->hw_pop_vlan[MLX5DR_TABLE_TYPE_FDB]) - return -ENOENT; + return -rte_errno; priv->hw_push_vlan[MLX5DR_TABLE_TYPE_FDB] = mlx5dr_action_create_push_vlan (priv->dr_ctx, MLX5DR_ACTION_FLAG_HWS_FDB); if (!priv->hw_pop_vlan[MLX5DR_TABLE_TYPE_FDB]) - return -ENOENT; + return -rte_errno; } return 0; } @@ -7920,8 +7921,11 @@ flow_hw_configure(struct rte_eth_dev *dev, } } ret = flow_hw_create_vlan(dev); - if (ret) + if (ret) { + rte_flow_error_set(error, -ret, RTE_FLOW_ERROR_TYPE_UNSPECIFIED, + NULL, "Failed to VLAN actions."); goto err; + } if (_queue_attr) mlx5_free(_queue_attr); if (port_attr->flags & RTE_FLOW_PORT_FLAG_STRICT_QUEUE) -- 2.34.1