net/mlx5e: Allocate virtually contiguous memory for reps structures
authorTariq Toukan <tariqt@nvidia.com>
Tue, 27 Apr 2021 13:41:42 +0000 (16:41 +0300)
committerSaeed Mahameed <saeedm@nvidia.com>
Wed, 18 May 2022 06:41:46 +0000 (23:41 -0700)
Physical continuity is not necessary, and requested allocation size might
be larger than PAGE_SIZE.
Hence, use v-alloc/free API.

Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
Reviewed-by: Moshe Shemesh <moshe@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c

index 47f7b4c..ce3b9e6 100644 (file)
@@ -412,8 +412,8 @@ int mlx5e_add_sqs_fwd_rules(struct mlx5e_priv *priv)
                    MLX5E_GET_PFLAG(&priv->channels.params, MLX5E_PFLAG_TX_PORT_TS));
        nch = priv->channels.num + ptp_sq;
 
-       sqs = kcalloc(nch * mlx5e_get_dcb_num_tc(&priv->channels.params), sizeof(*sqs),
-                     GFP_KERNEL);
+       sqs = kvcalloc(nch * mlx5e_get_dcb_num_tc(&priv->channels.params), sizeof(*sqs),
+                      GFP_KERNEL);
        if (!sqs)
                goto out;
 
@@ -430,7 +430,7 @@ int mlx5e_add_sqs_fwd_rules(struct mlx5e_priv *priv)
        }
 
        err = mlx5e_sqs2vport_start(esw, rep, sqs, num_sqs);
-       kfree(sqs);
+       kvfree(sqs);
 
 out:
        if (err)
@@ -1269,7 +1269,7 @@ mlx5e_vport_rep_load(struct mlx5_core_dev *dev, struct mlx5_eswitch_rep *rep)
        struct mlx5e_rep_priv *rpriv;
        int err;
 
-       rpriv = kzalloc(sizeof(*rpriv), GFP_KERNEL);
+       rpriv = kvzalloc(sizeof(*rpriv), GFP_KERNEL);
        if (!rpriv)
                return -ENOMEM;
 
@@ -1284,7 +1284,7 @@ mlx5e_vport_rep_load(struct mlx5_core_dev *dev, struct mlx5_eswitch_rep *rep)
                err = mlx5e_vport_vf_rep_load(dev, rep);
 
        if (err)
-               kfree(rpriv);
+               kvfree(rpriv);
 
        return err;
 }
@@ -1312,7 +1312,7 @@ mlx5e_vport_rep_unload(struct mlx5_eswitch_rep *rep)
        priv->profile->cleanup(priv);
        mlx5e_destroy_netdev(priv);
 free_ppriv:
-       kfree(ppriv); /* mlx5e_rep_priv */
+       kvfree(ppriv); /* mlx5e_rep_priv */
 }
 
 static void *mlx5e_vport_rep_get_proto_dev(struct mlx5_eswitch_rep *rep)