net/mlx5: fs, refactor software deletion rule
When deleting a rule make sure that for every type dests_size is decreased only once and no other logic is executed. Without this dests_size might be decreased twice when dests_size == 1 so the if for that type won't be entered and if action has MLX5_FLOW_CONTEXT_ACTION_FWD_DEST set dests_size will be decreased again. 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
d639af6216
commit
d49d63075e
|
@ -550,8 +550,8 @@ static void del_sw_hw_rule(struct fs_node *node)
|
|||
mutex_unlock(&rule->dest_attr.ft->lock);
|
||||
}
|
||||
|
||||
if (rule->dest_attr.type == MLX5_FLOW_DESTINATION_TYPE_COUNTER &&
|
||||
--fte->dests_size) {
|
||||
if (rule->dest_attr.type == MLX5_FLOW_DESTINATION_TYPE_COUNTER) {
|
||||
--fte->dests_size;
|
||||
fte->modify_mask |=
|
||||
BIT(MLX5_SET_FTE_MODIFY_ENABLE_MASK_ACTION) |
|
||||
BIT(MLX5_SET_FTE_MODIFY_ENABLE_MASK_FLOW_COUNTERS);
|
||||
|
@ -559,15 +559,15 @@ static void del_sw_hw_rule(struct fs_node *node)
|
|||
goto out;
|
||||
}
|
||||
|
||||
if (rule->dest_attr.type == MLX5_FLOW_DESTINATION_TYPE_PORT &&
|
||||
--fte->dests_size) {
|
||||
if (rule->dest_attr.type == MLX5_FLOW_DESTINATION_TYPE_PORT) {
|
||||
--fte->dests_size;
|
||||
fte->modify_mask |= BIT(MLX5_SET_FTE_MODIFY_ENABLE_MASK_ACTION);
|
||||
fte->action.action &= ~MLX5_FLOW_CONTEXT_ACTION_ALLOW;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if ((fte->action.action & MLX5_FLOW_CONTEXT_ACTION_FWD_DEST) &&
|
||||
--fte->dests_size) {
|
||||
if (fte->action.action & MLX5_FLOW_CONTEXT_ACTION_FWD_DEST) {
|
||||
--fte->dests_size;
|
||||
fte->modify_mask |=
|
||||
BIT(MLX5_SET_FTE_MODIFY_ENABLE_MASK_DESTINATION_LIST);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue