]> git.baikalelectronics.ru Git - kernel.git/commitdiff
net/mlx5e: Alloc flow spec using kvzalloc instead of kzalloc
authorRoi Dayan <roid@nvidia.com>
Tue, 9 Mar 2021 16:16:52 +0000 (18:16 +0200)
committerSaeed Mahameed <saeedm@nvidia.com>
Thu, 11 Mar 2021 22:35:15 +0000 (14:35 -0800)
flow spec is not small and we do allocate it using kvzalloc
in most places of the driver. fix rest of the places
to use kvzalloc to avoid failure in allocation when
memory is too fragmented.

Signed-off-by: Roi Dayan <roid@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
drivers/net/ethernet/mellanox/mlx5/core/en/tc_ct.c
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec_fs.c
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c

index f81da2dc6af12d1a73661eaac8d7c52bd66ab191..3a6095c912f181ebe06de9455e2492e5e9153abc 100644 (file)
@@ -695,7 +695,7 @@ mlx5_tc_ct_entry_add_rule(struct mlx5_tc_ct_priv *ct_priv,
 
        zone_rule->nat = nat;
 
-       spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+       spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
        if (!spec)
                return -ENOMEM;
 
@@ -737,7 +737,7 @@ mlx5_tc_ct_entry_add_rule(struct mlx5_tc_ct_priv *ct_priv,
 
        zone_rule->attr = attr;
 
-       kfree(spec);
+       kvfree(spec);
        ct_dbg("Offloaded ct entry rule in zone %d", entry->tuple.zone);
 
        return 0;
@@ -749,7 +749,7 @@ err_rule:
 err_mod_hdr:
        kfree(attr);
 err_attr:
-       kfree(spec);
+       kvfree(spec);
        return err;
 }
 
@@ -1684,10 +1684,10 @@ __mlx5_tc_ct_flow_offload(struct mlx5_tc_ct_priv *ct_priv,
        struct mlx5_ct_ft *ft;
        u32 fte_id = 1;
 
-       post_ct_spec = kzalloc(sizeof(*post_ct_spec), GFP_KERNEL);
+       post_ct_spec = kvzalloc(sizeof(*post_ct_spec), GFP_KERNEL);
        ct_flow = kzalloc(sizeof(*ct_flow), GFP_KERNEL);
        if (!post_ct_spec || !ct_flow) {
-               kfree(post_ct_spec);
+               kvfree(post_ct_spec);
                kfree(ct_flow);
                return ERR_PTR(-ENOMEM);
        }
@@ -1822,7 +1822,7 @@ __mlx5_tc_ct_flow_offload(struct mlx5_tc_ct_priv *ct_priv,
 
        attr->ct_attr.ct_flow = ct_flow;
        dealloc_mod_hdr_actions(&pre_mod_acts);
-       kfree(post_ct_spec);
+       kvfree(post_ct_spec);
 
        return rule;
 
@@ -1843,7 +1843,7 @@ err_alloc_pre:
 err_idr:
        mlx5_tc_ct_del_ft_cb(ct_priv, ft);
 err_ft:
-       kfree(post_ct_spec);
+       kvfree(post_ct_spec);
        kfree(ct_flow);
        netdev_warn(priv->netdev, "Failed to offload ct flow, err %d\n", err);
        return ERR_PTR(err);
index 381a9c8c9da9c24dc3825c46b8d7cdef47497baf..34119ce92031c5d3e7d52bd6c373f0e6228c7073 100644 (file)
@@ -60,7 +60,7 @@ static int rx_err_add_rule(struct mlx5e_priv *priv,
        struct mlx5_flow_spec *spec;
        int err = 0;
 
-       spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+       spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
        if (!spec)
                return -ENOMEM;
 
@@ -101,7 +101,7 @@ out:
        if (err)
                mlx5_modify_header_dealloc(mdev, modify_hdr);
 out_spec:
-       kfree(spec);
+       kvfree(spec);
        return err;
 }
 
index 703753ac2e02060bb4e55b794c9d990bb3bce908..a215ccee3e616078dd0e2972fba1807abe8a54aa 100644 (file)
@@ -1446,7 +1446,7 @@ esw_add_restore_rule(struct mlx5_eswitch *esw, u32 tag)
        if (!mlx5_eswitch_reg_c1_loopback_supported(esw))
                return ERR_PTR(-EOPNOTSUPP);
 
-       spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+       spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
        if (!spec)
                return ERR_PTR(-ENOMEM);
 
@@ -1469,7 +1469,7 @@ esw_add_restore_rule(struct mlx5_eswitch *esw, u32 tag)
        dest.ft = esw->offloads.ft_offloads;
 
        flow_rule = mlx5_add_flow_rules(ft, spec, &flow_act, &dest, 1);
-       kfree(spec);
+       kvfree(spec);
 
        if (IS_ERR(flow_rule))
                esw_warn(esw->dev,