drm/amdgpu: Explicitly add a flexible array at the end of 'struct amdgpu_bo_list'
authorChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Sun, 20 Aug 2023 09:51:13 +0000 (11:51 +0200)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 30 Aug 2023 19:26:32 +0000 (15:26 -0400)
'struct amdgpu_bo_list' is really used as if it was ended by a flex array.
So make it more explicit and add a 'struct amdgpu_bo_list_entry entries[]'
field at the end of the structure.

This way, struct_size() can be used when it is allocated.
It is less verbose.

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c
drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.h

index b6298e901cbd4f44752105d47841db3bd61ed568..571fed04eb7a12854706a2e95314b59dcdd499e8 100644 (file)
@@ -75,7 +75,6 @@ int amdgpu_bo_list_create(struct amdgpu_device *adev, struct drm_file *filp,
        struct amdgpu_bo_list_entry *array;
        struct amdgpu_bo_list *list;
        uint64_t total_size = 0;
-       size_t size;
        unsigned i;
        int r;
 
@@ -83,9 +82,7 @@ int amdgpu_bo_list_create(struct amdgpu_device *adev, struct drm_file *filp,
                                / sizeof(struct amdgpu_bo_list_entry))
                return -EINVAL;
 
-       size = sizeof(struct amdgpu_bo_list);
-       size += num_entries * sizeof(struct amdgpu_bo_list_entry);
-       list = kvmalloc(size, GFP_KERNEL);
+       list = kvmalloc(struct_size(list, entries, num_entries), GFP_KERNEL);
        if (!list)
                return -ENOMEM;
 
index 26c01cb131f21b93076d2b0f2100311e14bc817a..368e50b3016084abd0a5dfe4ea076a22549743a5 100644 (file)
@@ -55,6 +55,8 @@ struct amdgpu_bo_list {
        /* Protect access during command submission.
         */
        struct mutex bo_list_mutex;
+
+       struct amdgpu_bo_list_entry entries[];
 };
 
 int amdgpu_bo_list_get(struct amdgpu_fpriv *fpriv, int id,