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

drm/radeon: export reservation_object from dmabuf to ttm

Adds an extra argument to radeon_bo_create, which is only used in radeon_prime.c.

Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Maarten Lankhorst and committed by
Alex Deucher
831b6966 392a250b

+35 -25
+2 -2
drivers/gpu/drm/radeon/cik.c
··· 4687 4687 r = radeon_bo_create(rdev, 4688 4688 rdev->mec.num_mec *rdev->mec.num_pipe * MEC_HPD_SIZE * 2, 4689 4689 PAGE_SIZE, true, 4690 - RADEON_GEM_DOMAIN_GTT, 0, NULL, 4690 + RADEON_GEM_DOMAIN_GTT, 0, NULL, NULL, 4691 4691 &rdev->mec.hpd_eop_obj); 4692 4692 if (r) { 4693 4693 dev_warn(rdev->dev, "(%d) create HDP EOP bo failed\n", r); ··· 4858 4858 sizeof(struct bonaire_mqd), 4859 4859 PAGE_SIZE, true, 4860 4860 RADEON_GEM_DOMAIN_GTT, 0, NULL, 4861 - &rdev->ring[idx].mqd_obj); 4861 + NULL, &rdev->ring[idx].mqd_obj); 4862 4862 if (r) { 4863 4863 dev_warn(rdev->dev, "(%d) create MQD bo failed\n", r); 4864 4864 return r;
+3 -3
drivers/gpu/drm/radeon/evergreen.c
··· 4022 4022 if (rdev->rlc.save_restore_obj == NULL) { 4023 4023 r = radeon_bo_create(rdev, dws * 4, PAGE_SIZE, true, 4024 4024 RADEON_GEM_DOMAIN_VRAM, 0, NULL, 4025 - &rdev->rlc.save_restore_obj); 4025 + NULL, &rdev->rlc.save_restore_obj); 4026 4026 if (r) { 4027 4027 dev_warn(rdev->dev, "(%d) create RLC sr bo failed\n", r); 4028 4028 return r; ··· 4101 4101 if (rdev->rlc.clear_state_obj == NULL) { 4102 4102 r = radeon_bo_create(rdev, dws * 4, PAGE_SIZE, true, 4103 4103 RADEON_GEM_DOMAIN_VRAM, 0, NULL, 4104 - &rdev->rlc.clear_state_obj); 4104 + NULL, &rdev->rlc.clear_state_obj); 4105 4105 if (r) { 4106 4106 dev_warn(rdev->dev, "(%d) create RLC c bo failed\n", r); 4107 4107 sumo_rlc_fini(rdev); ··· 4178 4178 r = radeon_bo_create(rdev, rdev->rlc.cp_table_size, 4179 4179 PAGE_SIZE, true, 4180 4180 RADEON_GEM_DOMAIN_VRAM, 0, NULL, 4181 - &rdev->rlc.cp_table_obj); 4181 + NULL, &rdev->rlc.cp_table_obj); 4182 4182 if (r) { 4183 4183 dev_warn(rdev->dev, "(%d) create RLC cp table bo failed\n", r); 4184 4184 sumo_rlc_fini(rdev);
+2 -2
drivers/gpu/drm/radeon/r600.c
··· 1430 1430 if (rdev->vram_scratch.robj == NULL) { 1431 1431 r = radeon_bo_create(rdev, RADEON_GPU_PAGE_SIZE, 1432 1432 PAGE_SIZE, true, RADEON_GEM_DOMAIN_VRAM, 1433 - 0, NULL, &rdev->vram_scratch.robj); 1433 + 0, NULL, NULL, &rdev->vram_scratch.robj); 1434 1434 if (r) { 1435 1435 return r; 1436 1436 } ··· 3368 3368 r = radeon_bo_create(rdev, rdev->ih.ring_size, 3369 3369 PAGE_SIZE, true, 3370 3370 RADEON_GEM_DOMAIN_GTT, 0, 3371 - NULL, &rdev->ih.ring_obj); 3371 + NULL, NULL, &rdev->ih.ring_obj); 3372 3372 if (r) { 3373 3373 DRM_ERROR("radeon: failed to create ih ring buffer (%d).\n", r); 3374 3374 return r;
+2 -2
drivers/gpu/drm/radeon/radeon_benchmark.c
··· 93 93 int time; 94 94 95 95 n = RADEON_BENCHMARK_ITERATIONS; 96 - r = radeon_bo_create(rdev, size, PAGE_SIZE, true, sdomain, 0, NULL, &sobj); 96 + r = radeon_bo_create(rdev, size, PAGE_SIZE, true, sdomain, 0, NULL, NULL, &sobj); 97 97 if (r) { 98 98 goto out_cleanup; 99 99 } ··· 105 105 if (r) { 106 106 goto out_cleanup; 107 107 } 108 - r = radeon_bo_create(rdev, size, PAGE_SIZE, true, ddomain, 0, NULL, &dobj); 108 + r = radeon_bo_create(rdev, size, PAGE_SIZE, true, ddomain, 0, NULL, NULL, &dobj); 109 109 if (r) { 110 110 goto out_cleanup; 111 111 }
+1 -1
drivers/gpu/drm/radeon/radeon_device.c
··· 430 430 431 431 if (rdev->wb.wb_obj == NULL) { 432 432 r = radeon_bo_create(rdev, RADEON_GPU_PAGE_SIZE, PAGE_SIZE, true, 433 - RADEON_GEM_DOMAIN_GTT, 0, NULL, 433 + RADEON_GEM_DOMAIN_GTT, 0, NULL, NULL, 434 434 &rdev->wb.wb_obj); 435 435 if (r) { 436 436 dev_warn(rdev->dev, "(%d) create WB bo failed\n", r);
+1 -1
drivers/gpu/drm/radeon/radeon_gart.c
··· 128 128 if (rdev->gart.robj == NULL) { 129 129 r = radeon_bo_create(rdev, rdev->gart.table_size, 130 130 PAGE_SIZE, true, RADEON_GEM_DOMAIN_VRAM, 131 - 0, NULL, &rdev->gart.robj); 131 + 0, NULL, NULL, &rdev->gart.robj); 132 132 if (r) { 133 133 return r; 134 134 }
+1 -1
drivers/gpu/drm/radeon/radeon_gem.c
··· 67 67 68 68 retry: 69 69 r = radeon_bo_create(rdev, size, alignment, kernel, initial_domain, 70 - flags, NULL, &robj); 70 + flags, NULL, NULL, &robj); 71 71 if (r) { 72 72 if (r != -ERESTARTSYS) { 73 73 if (initial_domain == RADEON_GEM_DOMAIN_VRAM) {
+5 -3
drivers/gpu/drm/radeon/radeon_object.c
··· 167 167 } 168 168 169 169 int radeon_bo_create(struct radeon_device *rdev, 170 - unsigned long size, int byte_align, bool kernel, u32 domain, 171 - u32 flags, struct sg_table *sg, struct radeon_bo **bo_ptr) 170 + unsigned long size, int byte_align, bool kernel, 171 + u32 domain, u32 flags, struct sg_table *sg, 172 + struct reservation_object *resv, 173 + struct radeon_bo **bo_ptr) 172 174 { 173 175 struct radeon_bo *bo; 174 176 enum ttm_bo_type type; ··· 218 216 down_read(&rdev->pm.mclk_lock); 219 217 r = ttm_bo_init(&rdev->mman.bdev, &bo->tbo, size, type, 220 218 &bo->placement, page_align, !kernel, NULL, 221 - acc_size, sg, NULL, &radeon_ttm_bo_destroy); 219 + acc_size, sg, resv, &radeon_ttm_bo_destroy); 222 220 up_read(&rdev->pm.mclk_lock); 223 221 if (unlikely(r != 0)) { 224 222 return r;
+1
drivers/gpu/drm/radeon/radeon_object.h
··· 126 126 unsigned long size, int byte_align, 127 127 bool kernel, u32 domain, u32 flags, 128 128 struct sg_table *sg, 129 + struct reservation_object *resv, 129 130 struct radeon_bo **bo_ptr); 130 131 extern int radeon_bo_kmap(struct radeon_bo *bo, void **ptr); 131 132 extern void radeon_bo_kunmap(struct radeon_bo *bo);
+4 -1
drivers/gpu/drm/radeon/radeon_prime.c
··· 61 61 struct dma_buf_attachment *attach, 62 62 struct sg_table *sg) 63 63 { 64 + struct reservation_object *resv = attach->dmabuf->resv; 64 65 struct radeon_device *rdev = dev->dev_private; 65 66 struct radeon_bo *bo; 66 67 int ret; 67 68 69 + ww_mutex_lock(&resv->lock, NULL); 68 70 ret = radeon_bo_create(rdev, attach->dmabuf->size, PAGE_SIZE, false, 69 - RADEON_GEM_DOMAIN_GTT, 0, sg, &bo); 71 + RADEON_GEM_DOMAIN_GTT, 0, sg, resv, &bo); 72 + ww_mutex_unlock(&resv->lock); 70 73 if (ret) 71 74 return ERR_PTR(ret); 72 75
+1 -1
drivers/gpu/drm/radeon/radeon_ring.c
··· 383 383 /* Allocate ring buffer */ 384 384 if (ring->ring_obj == NULL) { 385 385 r = radeon_bo_create(rdev, ring->ring_size, PAGE_SIZE, true, 386 - RADEON_GEM_DOMAIN_GTT, 0, 386 + RADEON_GEM_DOMAIN_GTT, 0, NULL, 387 387 NULL, &ring->ring_obj); 388 388 if (r) { 389 389 dev_err(rdev->dev, "(%d) ring create failed\n", r);
+1 -1
drivers/gpu/drm/radeon/radeon_sa.c
··· 65 65 } 66 66 67 67 r = radeon_bo_create(rdev, size, align, true, 68 - domain, flags, NULL, &sa_manager->bo); 68 + domain, flags, NULL, NULL, &sa_manager->bo); 69 69 if (r) { 70 70 dev_err(rdev->dev, "(%d) failed to allocate bo for manager\n", r); 71 71 return r;
+3 -2
drivers/gpu/drm/radeon/radeon_test.c
··· 67 67 } 68 68 69 69 r = radeon_bo_create(rdev, size, PAGE_SIZE, true, RADEON_GEM_DOMAIN_VRAM, 70 - 0, NULL, &vram_obj); 70 + 0, NULL, NULL, &vram_obj); 71 71 if (r) { 72 72 DRM_ERROR("Failed to create VRAM object\n"); 73 73 goto out_cleanup; ··· 87 87 struct radeon_fence *fence = NULL; 88 88 89 89 r = radeon_bo_create(rdev, size, PAGE_SIZE, true, 90 - RADEON_GEM_DOMAIN_GTT, 0, NULL, gtt_obj + i); 90 + RADEON_GEM_DOMAIN_GTT, 0, NULL, NULL, 91 + gtt_obj + i); 91 92 if (r) { 92 93 DRM_ERROR("Failed to create GTT object %d\n", i); 93 94 goto out_lclean;
+1 -1
drivers/gpu/drm/radeon/radeon_ttm.c
··· 865 865 radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size); 866 866 867 867 r = radeon_bo_create(rdev, 256 * 1024, PAGE_SIZE, true, 868 - RADEON_GEM_DOMAIN_VRAM, 0, 868 + RADEON_GEM_DOMAIN_VRAM, 0, NULL, 869 869 NULL, &rdev->stollen_vga_memory); 870 870 if (r) { 871 871 return r;
+2 -1
drivers/gpu/drm/radeon/radeon_uvd.c
··· 141 141 RADEON_UVD_STACK_SIZE + RADEON_UVD_HEAP_SIZE + 142 142 RADEON_GPU_PAGE_SIZE; 143 143 r = radeon_bo_create(rdev, bo_size, PAGE_SIZE, true, 144 - RADEON_GEM_DOMAIN_VRAM, 0, NULL, &rdev->uvd.vcpu_bo); 144 + RADEON_GEM_DOMAIN_VRAM, 0, NULL, 145 + NULL, &rdev->uvd.vcpu_bo); 145 146 if (r) { 146 147 dev_err(rdev->dev, "(%d) failed to allocate UVD bo\n", r); 147 148 return r;
+2 -1
drivers/gpu/drm/radeon/radeon_vce.c
··· 126 126 size = RADEON_GPU_PAGE_ALIGN(rdev->vce_fw->size) + 127 127 RADEON_VCE_STACK_SIZE + RADEON_VCE_HEAP_SIZE; 128 128 r = radeon_bo_create(rdev, size, PAGE_SIZE, true, 129 - RADEON_GEM_DOMAIN_VRAM, 0, NULL, &rdev->vce.vcpu_bo); 129 + RADEON_GEM_DOMAIN_VRAM, 0, NULL, NULL, 130 + &rdev->vce.vcpu_bo); 130 131 if (r) { 131 132 dev_err(rdev->dev, "(%d) failed to allocate VCE bo\n", r); 132 133 return r;
+3 -2
drivers/gpu/drm/radeon/radeon_vm.c
··· 548 548 549 549 r = radeon_bo_create(rdev, RADEON_VM_PTE_COUNT * 8, 550 550 RADEON_GPU_PAGE_SIZE, true, 551 - RADEON_GEM_DOMAIN_VRAM, 0, NULL, &pt); 551 + RADEON_GEM_DOMAIN_VRAM, 0, 552 + NULL, NULL, &pt); 552 553 if (r) 553 554 return r; 554 555 ··· 1128 1127 1129 1128 r = radeon_bo_create(rdev, pd_size, align, true, 1130 1129 RADEON_GEM_DOMAIN_VRAM, 0, NULL, 1131 - &vm->page_directory); 1130 + NULL, &vm->page_directory); 1132 1131 if (r) 1133 1132 return r; 1134 1133