]> git.itanic.dy.fi Git - linux-stable/commitdiff
net/mlx5: DR, Fix handling of different actions on the same STE in STEv1
authorYevgeny Kliteynik <kliteyn@nvidia.com>
Wed, 23 Feb 2022 16:12:20 +0000 (18:12 +0200)
committerSaeed Mahameed <saeedm@nvidia.com>
Wed, 9 Mar 2022 21:33:04 +0000 (13:33 -0800)
Fix handling of various conditions in set_actions_rx/tx that check
whether different actions can be on the same STE.

Signed-off-by: Yevgeny Kliteynik <kliteyn@nvidia.com>
Reviewed-by: Alex Vesker <valex@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
drivers/net/ethernet/mellanox/mlx5/core/steering/dr_ste_v1.c

index 0326ab67c9784d0205f641ee50a332e0352d3880..d273d3b4fb1aa20c1de44fab34a11e7a911de97f 100644 (file)
@@ -533,7 +533,6 @@ static void dr_ste_v1_set_actions_tx(struct mlx5dr_domain *dmn,
                dr_ste_v1_set_pop_vlan(last_ste, action, attr->vlans.count);
                action_sz -= DR_STE_ACTION_SINGLE_SZ;
                action += DR_STE_ACTION_SINGLE_SZ;
-               allow_modify_hdr = false;
        }
 
        if (action_type_set[DR_ACTION_TYP_CTR])
@@ -677,13 +676,12 @@ static void dr_ste_v1_set_actions_rx(struct mlx5dr_domain *dmn,
                        dr_ste_v1_arr_init_next_match(&last_ste, added_stes, attr->gvmi);
                        action = MLX5_ADDR_OF(ste_mask_and_match_v1, last_ste, action);
                        action_sz = DR_STE_ACTION_TRIPLE_SZ;
-                       allow_modify_hdr = false;
-                       allow_ctr = false;
                }
 
                dr_ste_v1_set_pop_vlan(last_ste, action, attr->vlans.count);
                action_sz -= DR_STE_ACTION_SINGLE_SZ;
                action += DR_STE_ACTION_SINGLE_SZ;
+               allow_ctr = false;
        }
 
        if (action_type_set[DR_ACTION_TYP_MODIFY_HDR]) {
@@ -731,9 +729,9 @@ static void dr_ste_v1_set_actions_rx(struct mlx5dr_domain *dmn,
                        action = MLX5_ADDR_OF(ste_mask_and_match_v1, last_ste, action);
                        action_sz = DR_STE_ACTION_TRIPLE_SZ;
                        allow_modify_hdr = true;
-                       allow_ctr = false;
                }
                dr_ste_v1_set_counter_id(last_ste, attr->ctr_id);
+               allow_ctr = false;
        }
 
        if (action_type_set[DR_ACTION_TYP_L2_TO_TNL_L2]) {