net/mlx5e: Move sample attr allocation to tc_action sample parse op
authorRoi Dayan <roid@nvidia.com>
Thu, 12 Aug 2021 13:02:58 +0000 (16:02 +0300)
committerSaeed Mahameed <saeedm@nvidia.com>
Wed, 15 Dec 2021 05:29:45 +0000 (21:29 -0800)
There is no reason to wait with the kmalloc to after parsing all
other actions. There could still be a failure later and before
offloading the rule. So alloc the mem when parsing.
The memory is being released on mlx5e_flow_put() which is called
also on error flow.

Signed-off-by: Roi Dayan <roid@nvidia.com>
Reviewed-by: Oz Shlomo <ozsh@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
drivers/net/ethernet/mellanox/mlx5/core/en/tc/act/act.h
drivers/net/ethernet/mellanox/mlx5/core/en/tc/act/sample.c
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c

index 51c9b9177f28e86a2699bb623171c307da757e0e..0aa995a9f6743753c48f1978eae36e28c444e314 100644 (file)
@@ -25,7 +25,6 @@ struct mlx5e_tc_act_parse_state {
        int ifindexes[MLX5_MAX_FLOW_FWD_VPORTS];
        int if_count;
        struct mlx5_tc_ct_priv *ct_priv;
-       struct mlx5e_sample_attr sample_attr;
 };
 
 struct mlx5e_tc_act {
index 0d37fb0cad7cb37b2ff1c42d613f324d0624372d..6699bdf5cf0120c5d710f62f6e8cee5e6746092a 100644 (file)
@@ -27,7 +27,11 @@ tc_act_parse_sample(struct mlx5e_tc_act_parse_state *parse_state,
                    struct mlx5e_priv *priv,
                    struct mlx5_flow_attr *attr)
 {
-       struct mlx5e_sample_attr *sample_attr = &parse_state->sample_attr;
+       struct mlx5e_sample_attr *sample_attr;
+
+       sample_attr = kzalloc(sizeof(*attr->sample_attr), GFP_KERNEL);
+       if (!sample_attr)
+               return -ENOMEM;
 
        sample_attr->rate = act->sample.rate;
        sample_attr->group_num = act->sample.psample_group->group_num;
@@ -35,6 +39,7 @@ tc_act_parse_sample(struct mlx5e_tc_act_parse_state *parse_state,
        if (act->sample.truncate)
                sample_attr->trunc_size = act->sample.trunc_size;
 
+       attr->sample_attr = sample_attr;
        flow_flag_set(parse_state->flow, SAMPLE);
 
        return 0;
index a3f414171ca57180f9d63459d27fabc62f3e8957..c6c6d20ecd09178b60b9d28c81ade5cf605193eb 100644 (file)
@@ -3425,16 +3425,6 @@ parse_tc_fdb_actions(struct mlx5e_priv *priv,
                return -EOPNOTSUPP;
        }
 
-       /* Allocate sample attribute only when there is a sample action and
-        * no errors after parsing.
-        */
-       if (flow_flag_test(flow, SAMPLE)) {
-               attr->sample_attr = kzalloc(sizeof(*attr->sample_attr), GFP_KERNEL);
-               if (!attr->sample_attr)
-                       return -ENOMEM;
-               *attr->sample_attr = parse_state->sample_attr;
-       }
-
        return 0;
 }