Commit efb877cf authored by Yevgeny Kliteynik's avatar Yevgeny Kliteynik Committed by Jakub Kicinski
Browse files

net/mlx5: HWS, ignore flow level for multi-dest table



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: 504e536d ("net/mlx5: HWS, added actions handling")
Signed-off-by: default avatarYevgeny Kliteynik <kliteyn@nvidia.com>
Reviewed-by: default avatarMoshe Shemesh <moshe@nvidia.com>
Reviewed-by: default avatarMark Bloch <mbloch@nvidia.com>
Signed-off-by: default avatarTariq Toukan <tariqt@nvidia.com>
Link: https://patch.msgid.link/1758525094-816583-3-git-send-email-tariqt@nvidia.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 6043819e
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1360,7 +1360,7 @@ mlx5hws_action_create_modify_header(struct mlx5hws_context *ctx,
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;
+3 −8
Original line number Diff line number Diff line
@@ -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;
+1 −2
Original line number Diff line number Diff line
@@ -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.