]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net/mlx5: Switch vport HCA cap helpers to kvzalloc
authorMoshe Shemesh <moshe@nvidia.com>
Mon, 18 May 2026 07:13:52 +0000 (10:13 +0300)
committerPaolo Abeni <pabeni@redhat.com>
Thu, 21 May 2026 10:12:00 +0000 (12:12 +0200)
mlx5_vport_set_other_func_cap() and mlx5_vport_get_vhca_id() allocate
command buffers that embed the HCA capability union, exceeding 4KiB.
Use kvzalloc/kvfree so the allocation can fall back to vmalloc when
contiguous memory is scarce.

Signed-off-by: Moshe Shemesh <moshe@nvidia.com>
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
Link: https://patch.msgid.link/20260518071356.345723-5-tariqt@nvidia.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/mellanox/mlx5/core/vport.c

index 4effe37fd4552e0d2e5a38d0b6831f80b5cc4786..f8e6b1ab7c5c9581fb5c4b4bc5dcaa70b62fea09 100644 (file)
@@ -1336,7 +1336,7 @@ int mlx5_vport_get_vhca_id(struct mlx5_core_dev *dev, u16 vport, u16 *vhca_id)
        if (mlx5_esw_vport_vhca_id(dev->priv.eswitch, vport, vhca_id))
                return 0;
 
-       query_ctx = kzalloc(query_out_sz, GFP_KERNEL);
+       query_ctx = kvzalloc(query_out_sz, GFP_KERNEL);
        if (!query_ctx)
                return -ENOMEM;
 
@@ -1348,7 +1348,7 @@ int mlx5_vport_get_vhca_id(struct mlx5_core_dev *dev, u16 vport, u16 *vhca_id)
        *vhca_id = MLX5_GET(cmd_hca_cap, hca_caps, vhca_id);
 
 out_free:
-       kfree(query_ctx);
+       kvfree(query_ctx);
        return err;
 }
 EXPORT_SYMBOL_GPL(mlx5_vport_get_vhca_id);
@@ -1363,7 +1363,7 @@ int mlx5_vport_set_other_func_cap(struct mlx5_core_dev *dev, const void *hca_cap
        void *set_ctx;
        int ret;
 
-       set_ctx = kzalloc(set_sz, GFP_KERNEL);
+       set_ctx = kvzalloc(set_sz, GFP_KERNEL);
        if (!set_ctx)
                return -ENOMEM;
 
@@ -1392,6 +1392,6 @@ int mlx5_vport_set_other_func_cap(struct mlx5_core_dev *dev, const void *hca_cap
        MLX5_SET(set_hca_cap_in, set_ctx, function_id, function_id);
        ret = mlx5_cmd_exec_in(dev, set_hca_cap, set_ctx);
 
-       kfree(set_ctx);
+       kvfree(set_ctx);
        return ret;
 }