Skip to content

Commit

Permalink
net/mlx5: fs, do proper bookkeeping for forward destinations
Browse files Browse the repository at this point in the history
Keep track after destinations that are forward destinations.
When a forward destinations is removed from an FTE check if
the actions bits need to be updated.

Signed-off-by: Mark Bloch <mbloch@nvidia.com>
Reviewed-by: Maor Gottlieb <maorg@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
  • Loading branch information
Mark Bloch authored and Saeed Mahameed committed May 3, 2022
1 parent 6510bc0 commit a30c8b9
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 1 deletion.
20 changes: 19 additions & 1 deletion drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -424,6 +424,16 @@ static bool is_fwd_next_action(u32 action)
MLX5_FLOW_CONTEXT_ACTION_FWD_NEXT_NS);
}

static bool is_fwd_dest_type(enum mlx5_flow_destination_type type)
{
return type == MLX5_FLOW_DESTINATION_TYPE_FLOW_TABLE_NUM ||
type == MLX5_FLOW_DESTINATION_TYPE_FLOW_TABLE ||
type == MLX5_FLOW_DESTINATION_TYPE_UPLINK ||
type == MLX5_FLOW_DESTINATION_TYPE_VPORT ||
type == MLX5_FLOW_DESTINATION_TYPE_FLOW_SAMPLER ||
type == MLX5_FLOW_DESTINATION_TYPE_TIR;
}

static bool check_valid_spec(const struct mlx5_flow_spec *spec)
{
int i;
Expand Down Expand Up @@ -566,8 +576,13 @@ static void del_sw_hw_rule(struct fs_node *node)
goto out;
}

if (fte->action.action & MLX5_FLOW_CONTEXT_ACTION_FWD_DEST) {
if (is_fwd_dest_type(rule->dest_attr.type)) {
--fte->dests_size;
--fte->fwd_dests;

if (!fte->fwd_dests)
fte->action.action &=
~MLX5_FLOW_CONTEXT_ACTION_FWD_DEST;
fte->modify_mask |=
BIT(MLX5_SET_FTE_MODIFY_ENABLE_MASK_DESTINATION_LIST);
goto out;
Expand Down Expand Up @@ -1367,6 +1382,9 @@ create_flow_handle(struct fs_fte *fte,
if (dest) {
fte->dests_size++;

if (is_fwd_dest_type(dest[i].type))
fte->fwd_dests++;

type = dest[i].type ==
MLX5_FLOW_DESTINATION_TYPE_COUNTER;
*modify_mask |= type ? count : dst;
Expand Down
1 change: 1 addition & 0 deletions drivers/net/ethernet/mellanox/mlx5/core/fs_core.h
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,7 @@ struct fs_fte {
struct mlx5_fs_dr_rule fs_dr_rule;
u32 val[MLX5_ST_SZ_DW_MATCH_PARAM];
u32 dests_size;
u32 fwd_dests;
u32 index;
struct mlx5_flow_context flow_context;
struct mlx5_flow_act action;
Expand Down

0 comments on commit a30c8b9

Please sign in to comment.