mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-14 02:59:19 -04:00
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: 504e536d90 ("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>
This commit is contained in:
committed by
Jakub Kicinski
parent
6043819e70
commit
efb877cf27
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user