net/mlx5: fs, do proper bookkeeping for forward destinations
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>
This commit is contained in:
parent
6510bc0d7c
commit
a30c8b9025
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue