Skip to content

Commit

Permalink
net/mlx5: DR, Apply new accelerated modify action and decapl3
Browse files Browse the repository at this point in the history
If there is support for pattern/args, use the new accelerated modify
header action for modify header and decap L3 actions.
Otherwise fall back to the old modify-header implementation.

Signed-off-by: Yevgeny Kliteynik <kliteyn@nvidia.com>
Reviewed-by: Alex Vesker <valex@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
  • Loading branch information
Yevgeny Kliteynik authored and Saeed Mahameed committed Apr 14, 2023
1 parent 0caebad commit 62e40c8
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 6 deletions.
51 changes: 46 additions & 5 deletions drivers/net/ethernet/mellanox/mlx5/core/steering/dr_ste_v1.c
Original file line number Diff line number Diff line change
Expand Up @@ -495,21 +495,59 @@ static void dr_ste_v1_set_rx_decap(u8 *hw_ste_p, u8 *s_action)
dr_ste_v1_set_reparse(hw_ste_p);
}

static void dr_ste_v1_set_rewrite_actions(u8 *hw_ste_p,
u8 *s_action,
u16 num_of_actions,
u32 re_write_index)
static void dr_ste_v1_set_accelerated_rewrite_actions(u8 *hw_ste_p,
u8 *d_action,
u16 num_of_actions,
u32 rewrite_pattern,
u32 rewrite_args)
{
MLX5_SET(ste_double_action_accelerated_modify_action_list_v1, d_action,
action_id, DR_STE_V1_ACTION_ID_ACCELERATED_LIST);
MLX5_SET(ste_double_action_accelerated_modify_action_list_v1, d_action,
modify_actions_pattern_pointer, rewrite_pattern);
MLX5_SET(ste_double_action_accelerated_modify_action_list_v1, d_action,
number_of_modify_actions, num_of_actions);
MLX5_SET(ste_double_action_accelerated_modify_action_list_v1, d_action,
modify_actions_argument_pointer, rewrite_args);

dr_ste_v1_set_reparse(hw_ste_p);
}

static void dr_ste_v1_set_basic_rewrite_actions(u8 *hw_ste_p,
u8 *s_action,
u16 num_of_actions,
u32 rewrite_index)
{
MLX5_SET(ste_single_action_modify_list_v1, s_action, action_id,
DR_STE_V1_ACTION_ID_MODIFY_LIST);
MLX5_SET(ste_single_action_modify_list_v1, s_action, num_of_modify_actions,
num_of_actions);
MLX5_SET(ste_single_action_modify_list_v1, s_action, modify_actions_ptr,
re_write_index);
rewrite_index);

dr_ste_v1_set_reparse(hw_ste_p);
}

static void dr_ste_v1_set_rewrite_actions(u8 *hw_ste_p,
u8 *action,
u16 num_of_actions,
u32 rewrite_pattern,
u32 rewrite_args)
{
if (rewrite_pattern != MLX5DR_INVALID_PATTERN_INDEX)
return dr_ste_v1_set_accelerated_rewrite_actions(hw_ste_p,
action,
num_of_actions,
rewrite_pattern,
rewrite_args);

/* fall back to the code that doesn't support accelerated modify header */
return dr_ste_v1_set_basic_rewrite_actions(hw_ste_p,
action,
num_of_actions,
rewrite_args);
}

static void dr_ste_v1_set_aso_flow_meter(u8 *d_action,
u32 object_id,
u32 offset,
Expand Down Expand Up @@ -614,6 +652,7 @@ void dr_ste_v1_set_actions_tx(struct mlx5dr_domain *dmn,
}
dr_ste_v1_set_rewrite_actions(last_ste, action,
attr->modify_actions,
attr->modify_pat_idx,
attr->modify_index);
action_sz -= DR_STE_ACTION_DOUBLE_SZ;
action += DR_STE_ACTION_DOUBLE_SZ;
Expand Down Expand Up @@ -744,6 +783,7 @@ void dr_ste_v1_set_actions_rx(struct mlx5dr_domain *dmn,
if (action_type_set[DR_ACTION_TYP_TNL_L3_TO_L2]) {
dr_ste_v1_set_rewrite_actions(last_ste, action,
attr->decap_actions,
attr->decap_pat_idx,
attr->decap_index);
action_sz -= DR_STE_ACTION_DOUBLE_SZ;
action += DR_STE_ACTION_DOUBLE_SZ;
Expand Down Expand Up @@ -799,6 +839,7 @@ void dr_ste_v1_set_actions_rx(struct mlx5dr_domain *dmn,
}
dr_ste_v1_set_rewrite_actions(last_ste, action,
attr->modify_actions,
attr->modify_pat_idx,
attr->modify_index);
action_sz -= DR_STE_ACTION_DOUBLE_SZ;
action += DR_STE_ACTION_DOUBLE_SZ;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ struct mlx5_ifc_ste_double_action_insert_with_ptr_v1_bits {
u8 pointer[0x20];
};

struct mlx5_ifc_ste_double_action_modify_action_list_v1_bits {
struct mlx5_ifc_ste_double_action_accelerated_modify_action_list_v1_bits {
u8 action_id[0x8];
u8 modify_actions_pattern_pointer[0x18];

Expand Down

0 comments on commit 62e40c8

Please sign in to comment.