summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.h
diff options
context:
space:
mode:
authorChristian König <christian.koenig@amd.com>2018-07-30 16:16:01 +0200
committerAlex Deucher <alexander.deucher@amd.com>2018-07-31 16:58:19 -0500
commit920990cb080a44203bf6c8eb706e79ad23241ad3 (patch)
treec561ae3c784ad5930fd2db05389b2516b89693e4 /drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.h
parent39f7f69a6054bb9777b47b6afdb5ce2fae30dbee (diff)
drm/amdgpu: allocate the bo_list array after the list
This avoids multiple allocations for the head and the array. Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Chunming Zhou <david1.zhou@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.h')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.h17
1 files changed, 12 insertions, 5 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.h
index 3d77abfcd4a6..61b089768e1c 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.h
@@ -48,7 +48,6 @@ struct amdgpu_bo_list {
struct amdgpu_bo *oa_obj;
unsigned first_userptr;
unsigned num_entries;
- struct amdgpu_bo_list_entry *array;
};
int amdgpu_bo_list_get(struct amdgpu_fpriv *fpriv, int id,
@@ -65,14 +64,22 @@ int amdgpu_bo_list_create(struct amdgpu_device *adev,
unsigned num_entries,
struct amdgpu_bo_list **list);
+static inline struct amdgpu_bo_list_entry *
+amdgpu_bo_list_array_entry(struct amdgpu_bo_list *list, unsigned index)
+{
+ struct amdgpu_bo_list_entry *array = (void *)&list[1];
+
+ return &array[index];
+}
+
#define amdgpu_bo_list_for_each_entry(e, list) \
- for (e = &(list)->array[0]; \
- e != &(list)->array[(list)->num_entries]; \
+ for (e = amdgpu_bo_list_array_entry(list, 0); \
+ e != amdgpu_bo_list_array_entry(list, (list)->num_entries); \
++e)
#define amdgpu_bo_list_for_each_userptr_entry(e, list) \
- for (e = &(list)->array[(list)->first_userptr]; \
- e != &(list)->array[(list)->num_entries]; \
+ for (e = amdgpu_bo_list_array_entry(list, (list)->first_userptr); \
+ e != amdgpu_bo_list_array_entry(list, (list)->num_entries); \
++e)
#endif