Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amdgpu: allow variable BO struct creation

Allow allocating BO structures with different structure size
than struct amdgpu_bo.

v2: Check bo_ptr_size in all amdgpu_bo_create() caller.

Signed-off-by: Nirmoy Das <nirmoy.das@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Nirmoy Das and committed by
Alex Deucher
9fd5543e 87cc7f9e

+19 -2
+2
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
··· 246 246 bp.flags = AMDGPU_GEM_CREATE_CPU_GTT_USWC; 247 247 bp.type = ttm_bo_type_kernel; 248 248 bp.resv = NULL; 249 + bp.bo_ptr_size = sizeof(struct amdgpu_bo); 249 250 250 251 if (cp_mqd_gfx9) 251 252 bp.flags |= AMDGPU_GEM_CREATE_CP_MQD_GFX9; ··· 328 327 bp.flags = AMDGPU_GEM_CREATE_NO_CPU_ACCESS; 329 328 bp.type = ttm_bo_type_device; 330 329 bp.resv = NULL; 330 + bp.bo_ptr_size = sizeof(struct amdgpu_bo); 331 331 332 332 r = amdgpu_bo_create(adev, &bp, &bo); 333 333 if (r) {
+2
drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c
··· 85 85 bp.flags = 0; 86 86 bp.type = ttm_bo_type_kernel; 87 87 bp.resv = NULL; 88 + bp.bo_ptr_size = sizeof(struct amdgpu_bo); 89 + 88 90 n = AMDGPU_BENCHMARK_ITERATIONS; 89 91 r = amdgpu_bo_create(adev, &bp, &sobj); 90 92 if (r) {
+2
drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
··· 126 126 AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS; 127 127 bp.type = ttm_bo_type_kernel; 128 128 bp.resv = NULL; 129 + bp.bo_ptr_size = sizeof(struct amdgpu_bo); 130 + 129 131 r = amdgpu_bo_create(adev, &bp, &adev->gart.bo); 130 132 if (r) { 131 133 return r;
+2
drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
··· 71 71 bp.preferred_domain = initial_domain; 72 72 bp.flags = flags; 73 73 bp.domain = initial_domain; 74 + bp.bo_ptr_size = sizeof(struct amdgpu_bo); 75 + 74 76 r = amdgpu_bo_create(adev, &bp, &bo); 75 77 if (r) 76 78 return r;
+2
drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c
··· 55 55 AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS; 56 56 bp.type = ttm_bo_type_kernel; 57 57 bp.resv = NULL; 58 + bp.bo_ptr_size = sizeof(struct amdgpu_bo); 59 + 58 60 r = amdgpu_bo_create(adev, &bp, &adev->gmc.pdb0_bo); 59 61 if (r) 60 62 return r;
+6 -2
drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
··· 248 248 bp.flags |= AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS; 249 249 bp.type = ttm_bo_type_kernel; 250 250 bp.resv = NULL; 251 + bp.bo_ptr_size = sizeof(struct amdgpu_bo); 251 252 252 253 if (!*bo_ptr) { 253 254 r = amdgpu_bo_create(adev, &bp, bo_ptr); ··· 544 543 if (!amdgpu_bo_validate_size(adev, size, bp->domain)) 545 544 return -ENOMEM; 546 545 547 - *bo_ptr = NULL; 546 + BUG_ON(bp->bo_ptr_size < sizeof(struct amdgpu_bo)); 548 547 549 - bo = kzalloc(sizeof(struct amdgpu_bo), GFP_KERNEL); 548 + *bo_ptr = NULL; 549 + bo = kzalloc(bp->bo_ptr_size, GFP_KERNEL); 550 550 if (bo == NULL) 551 551 return -ENOMEM; 552 552 drm_gem_private_object_init(adev_to_drm(adev), &bo->tbo.base, size); ··· 637 635 AMDGPU_GEM_CREATE_SHADOW; 638 636 bp.type = ttm_bo_type_kernel; 639 637 bp.resv = bo->tbo.base.resv; 638 + bp.bo_ptr_size = sizeof(struct amdgpu_bo); 640 639 641 640 r = amdgpu_bo_do_create(adev, &bp, &bo->shadow); 642 641 if (!r) { ··· 672 669 int r; 673 670 674 671 bp->flags = bp->flags & ~AMDGPU_GEM_CREATE_SHADOW; 672 + 675 673 r = amdgpu_bo_do_create(adev, bp, bo_ptr); 676 674 if (r) 677 675 return r;
+1
drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
··· 40 40 struct amdgpu_bo_param { 41 41 unsigned long size; 42 42 int byte_align; 43 + u32 bo_ptr_size; 43 44 u32 domain; 44 45 u32 preferred_domain; 45 46 u64 flags;
+1
drivers/gpu/drm/amd/amdgpu/amdgpu_test.c
··· 62 62 bp.flags = 0; 63 63 bp.type = ttm_bo_type_kernel; 64 64 bp.resv = NULL; 65 + bp.bo_ptr_size = sizeof(struct amdgpu_bo); 65 66 66 67 r = amdgpu_bo_create(adev, &bp, &vram_obj); 67 68 if (r) {
+1
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
··· 869 869 bp->domain = amdgpu_bo_get_preferred_pin_domain(adev, bp->domain); 870 870 bp->flags = AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS | 871 871 AMDGPU_GEM_CREATE_CPU_GTT_USWC; 872 + bp->bo_ptr_size = sizeof(struct amdgpu_bo); 872 873 if (vm->use_cpu_for_update) 873 874 bp->flags |= AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED; 874 875 else if (!vm->root.base.bo || vm->root.base.bo->shadow)