net/mlx5: fs, refactor software deletion rule
authorMark Bloch <mbloch@nvidia.com>
Tue, 15 Mar 2022 10:44:14 +0000 (10:44 +0000)
committerSaeed Mahameed <saeedm@nvidia.com>
Tue, 3 May 2022 04:21:14 +0000 (21:21 -0700)
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>
drivers/net/ethernet/mellanox/mlx5/core/fs_core.c

index 297e6a468a3e3f3c751a9f3f4f93b3172211d24f..ae83962fc5fc414891612b4afe9fec186093aa02 100644 (file)
@@ -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);
        }