]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
vdpa/mlx5: Use kvzalloc_flex() for MTT command memory
authorRosen Penev <rosenp@gmail.com>
Fri, 8 May 2026 05:18:37 +0000 (22:18 -0700)
committerMichael S. Tsirkin <mst@redhat.com>
Wed, 10 Jun 2026 06:17:00 +0000 (02:17 -0400)
The create mkey command memory embeds the MTT array as a flexible array
member. Use kvzalloc_flex() to allocate it directly instead of open-coding
the struct_size() calculation with kvcalloc().

The MTT allocation still needs to be aligned to MLX5_VDPA_MTT_ALIGN bytes.
Since each MTT entry is __be64, align the entry count directly and avoid
carrying a separate byte length variable.

Assisted-by: Codex:GPT-5.5
Signed-off-by: Rosen Penev <rosenp@gmail.com>
Reviewed-by: Dragos Tatulea <dtatulea@nvidia.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Message-ID: <20260508051837.1744409-1-rosenp@gmail.com>

drivers/vdpa/mlx5/core/mr.c

index 42c2705077a6db4c0bc46b55a880e9d91b67fbda..6d02ccf9eb9104969fa38972702fcd598222f761 100644 (file)
@@ -221,11 +221,10 @@ static int create_direct_keys(struct mlx5_vdpa_dev *mvdev, struct mlx5_vdpa_mr *
 
        list_for_each_entry(dmr, &mr->head, list) {
                struct mlx5_create_mkey_mem *cmd_mem;
-               int mttlen, mttcount;
+               int mttcount;
 
-               mttlen = roundup(MLX5_ST_SZ_BYTES(mtt) * dmr->nsg, MLX5_VDPA_MTT_ALIGN);
-               mttcount = mttlen / sizeof(cmd_mem->mtt[0]);
-               cmd_mem = kvcalloc(1, struct_size(cmd_mem, mtt, mttcount), GFP_KERNEL);
+               mttcount = ALIGN(dmr->nsg, MLX5_VDPA_MTT_ALIGN / sizeof(cmd_mem->mtt[0]));
+               cmd_mem = kvzalloc_flex(*cmd_mem, mtt, mttcount);
                if (!cmd_mem) {
                        err = -ENOMEM;
                        goto done;