]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net/mlx5: HWS, ignore flow level for multi-dest table
authorYevgeny Kliteynik <kliteyn@nvidia.com>
Mon, 22 Sep 2025 07:11:33 +0000 (10:11 +0300)
committerJakub Kicinski <kuba@kernel.org>
Wed, 24 Sep 2025 00:17:30 +0000 (17:17 -0700)
When HWS creates multi-dest FW table and adds rules to
forward to other tables, ignore the flow level enforcement
in FW, because HWS is responsible for table levels.

This fixes the following error:

  mlx5_core 0000:08:00.0: mlx5_cmd_out_err:818:(pid 192306):
     SET_FLOW_TABLE_ENTRY(0x936) op_mod(0x0) failed,
     status bad parameter(0x3), syndrome (0x6ae84c), err(-22)

Fixes: 504e536d9010 ("net/mlx5: HWS, added actions handling")
Signed-off-by: Yevgeny Kliteynik <kliteyn@nvidia.com>
Reviewed-by: Moshe Shemesh <moshe@nvidia.com>
Reviewed-by: Mark Bloch <mbloch@nvidia.com>
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
Link: https://patch.msgid.link/1758525094-816583-3-git-send-email-tariqt@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/mellanox/mlx5/core/steering/hws/action.c
drivers/net/ethernet/mellanox/mlx5/core/steering/hws/fs_hws.c
drivers/net/ethernet/mellanox/mlx5/core/steering/hws/mlx5hws.h

index 6b36a4a7d895fc06893e2c4ba1af920987bb399f..fe56b59e24c59cf66ff94a4f35ff597cbe419767 100644 (file)
@@ -1360,7 +1360,7 @@ free_action:
 struct mlx5hws_action *
 mlx5hws_action_create_dest_array(struct mlx5hws_context *ctx, size_t num_dest,
                                 struct mlx5hws_action_dest_attr *dests,
-                                bool ignore_flow_level, u32 flags)
+                                u32 flags)
 {
        struct mlx5hws_cmd_set_fte_dest *dest_list = NULL;
        struct mlx5hws_cmd_ft_create_attr ft_attr = {0};
@@ -1397,7 +1397,7 @@ mlx5hws_action_create_dest_array(struct mlx5hws_context *ctx, size_t num_dest,
                                MLX5_FLOW_DESTINATION_TYPE_FLOW_TABLE;
                        dest_list[i].destination_id = dests[i].dest->dest_obj.obj_id;
                        fte_attr.action_flags |= MLX5_FLOW_CONTEXT_ACTION_FWD_DEST;
-                       fte_attr.ignore_flow_level = ignore_flow_level;
+                       fte_attr.ignore_flow_level = 1;
                        if (dests[i].is_wire_ft)
                                last_dest_idx = i;
                        break;
index 131e74b2b77435bd92e1fae65d96e9dc1a3532a9..6a4c4cccd6434218d80162eabf980fc668df0da7 100644 (file)
@@ -572,12 +572,12 @@ static void mlx5_fs_put_dest_action_sampler(struct mlx5_fs_hws_context *fs_ctx,
 static struct mlx5hws_action *
 mlx5_fs_create_action_dest_array(struct mlx5hws_context *ctx,
                                 struct mlx5hws_action_dest_attr *dests,
-                                u32 num_of_dests, bool ignore_flow_level)
+                                u32 num_of_dests)
 {
        u32 flags = MLX5HWS_ACTION_FLAG_HWS_FDB | MLX5HWS_ACTION_FLAG_SHARED;
 
        return mlx5hws_action_create_dest_array(ctx, num_of_dests, dests,
-                                               ignore_flow_level, flags);
+                                               flags);
 }
 
 static struct mlx5hws_action *
@@ -1014,19 +1014,14 @@ static int mlx5_fs_fte_get_hws_actions(struct mlx5_flow_root_namespace *ns,
                }
                (*ractions)[num_actions++].action = dest_actions->dest;
        } else if (num_dest_actions > 1) {
-               bool ignore_flow_level;
-
                if (num_actions == MLX5_FLOW_CONTEXT_ACTION_MAX ||
                    num_fs_actions == MLX5_FLOW_CONTEXT_ACTION_MAX) {
                        err = -EOPNOTSUPP;
                        goto free_actions;
                }
-               ignore_flow_level =
-                       !!(fte_action->flags & FLOW_ACT_IGNORE_FLOW_LEVEL);
                tmp_action =
                        mlx5_fs_create_action_dest_array(ctx, dest_actions,
-                                                        num_dest_actions,
-                                                        ignore_flow_level);
+                                                        num_dest_actions);
                if (!tmp_action) {
                        err = -EOPNOTSUPP;
                        goto free_actions;
index 2498ceff2060fd4e08275c0910b765724102cc8e..1ad7a50d938b6c77f696691b4747317675c084b7 100644 (file)
@@ -735,7 +735,6 @@ mlx5hws_action_create_push_vlan(struct mlx5hws_context *ctx, u32 flags);
  * @num_dest: The number of dests attributes.
  * @dests: The destination array. Each contains a destination action and can
  *        have additional actions.
- * @ignore_flow_level: Whether to turn on 'ignore_flow_level' for this dest.
  * @flags: Action creation flags (enum mlx5hws_action_flags).
  *
  * Return: pointer to mlx5hws_action on success NULL otherwise.
@@ -743,7 +742,7 @@ mlx5hws_action_create_push_vlan(struct mlx5hws_context *ctx, u32 flags);
 struct mlx5hws_action *
 mlx5hws_action_create_dest_array(struct mlx5hws_context *ctx, size_t num_dest,
                                 struct mlx5hws_action_dest_attr *dests,
-                                bool ignore_flow_level, u32 flags);
+                                u32 flags);
 
 /**
  * mlx5hws_action_create_insert_header - Create insert header action.