Message ID | 541ACC0C.5090501@canonical.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Am 18.09.2014 um 14:11 schrieb Maarten Lankhorst: > 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. > > Signed-off-by: Maarten Lankhorst <maarten.lankhorst@canonical.com> Reviewed-by: Christian König <christian.koenig@amd.com> > --- > v2: > robj -> resv > fix typo in commit description > > diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c > index 1440b6e9281e..1f8484284b47 100644 > --- a/drivers/gpu/drm/radeon/cik.c > +++ b/drivers/gpu/drm/radeon/cik.c > @@ -4690,7 +4690,7 @@ static int cik_mec_init(struct radeon_device *rdev) > r = radeon_bo_create(rdev, > rdev->mec.num_mec *rdev->mec.num_pipe * MEC_HPD_SIZE * 2, > PAGE_SIZE, true, > - RADEON_GEM_DOMAIN_GTT, 0, NULL, > + RADEON_GEM_DOMAIN_GTT, 0, NULL, NULL, > &rdev->mec.hpd_eop_obj); > if (r) { > dev_warn(rdev->dev, "(%d) create HDP EOP bo failed\n", r); > @@ -4861,7 +4861,7 @@ static int cik_cp_compute_resume(struct radeon_device *rdev) > sizeof(struct bonaire_mqd), > PAGE_SIZE, true, > RADEON_GEM_DOMAIN_GTT, 0, NULL, > - &rdev->ring[idx].mqd_obj); > + NULL, &rdev->ring[idx].mqd_obj); > if (r) { > dev_warn(rdev->dev, "(%d) create MQD bo failed\n", r); > return r; > diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c > index dbca60c7d097..c6ccef6c3596 100644 > --- a/drivers/gpu/drm/radeon/evergreen.c > +++ b/drivers/gpu/drm/radeon/evergreen.c > @@ -4023,7 +4023,7 @@ int sumo_rlc_init(struct radeon_device *rdev) > if (rdev->rlc.save_restore_obj == NULL) { > r = radeon_bo_create(rdev, dws * 4, PAGE_SIZE, true, > RADEON_GEM_DOMAIN_VRAM, 0, NULL, > - &rdev->rlc.save_restore_obj); > + NULL, &rdev->rlc.save_restore_obj); > if (r) { > dev_warn(rdev->dev, "(%d) create RLC sr bo failed\n", r); > return r; > @@ -4102,7 +4102,7 @@ int sumo_rlc_init(struct radeon_device *rdev) > if (rdev->rlc.clear_state_obj == NULL) { > r = radeon_bo_create(rdev, dws * 4, PAGE_SIZE, true, > RADEON_GEM_DOMAIN_VRAM, 0, NULL, > - &rdev->rlc.clear_state_obj); > + NULL, &rdev->rlc.clear_state_obj); > if (r) { > dev_warn(rdev->dev, "(%d) create RLC c bo failed\n", r); > sumo_rlc_fini(rdev); > @@ -4179,7 +4179,7 @@ int sumo_rlc_init(struct radeon_device *rdev) > r = radeon_bo_create(rdev, rdev->rlc.cp_table_size, > PAGE_SIZE, true, > RADEON_GEM_DOMAIN_VRAM, 0, NULL, > - &rdev->rlc.cp_table_obj); > + NULL, &rdev->rlc.cp_table_obj); > if (r) { > dev_warn(rdev->dev, "(%d) create RLC cp table bo failed\n", r); > sumo_rlc_fini(rdev); > diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c > index 35c22ee9bc4a..a82eaa81cd07 100644 > --- a/drivers/gpu/drm/radeon/r600.c > +++ b/drivers/gpu/drm/radeon/r600.c > @@ -1430,7 +1430,7 @@ int r600_vram_scratch_init(struct radeon_device *rdev) > if (rdev->vram_scratch.robj == NULL) { > r = radeon_bo_create(rdev, RADEON_GPU_PAGE_SIZE, > PAGE_SIZE, true, RADEON_GEM_DOMAIN_VRAM, > - 0, NULL, &rdev->vram_scratch.robj); > + 0, NULL, NULL, &rdev->vram_scratch.robj); > if (r) { > return r; > } > @@ -3368,7 +3368,7 @@ int r600_ih_ring_alloc(struct radeon_device *rdev) > r = radeon_bo_create(rdev, rdev->ih.ring_size, > PAGE_SIZE, true, > RADEON_GEM_DOMAIN_GTT, 0, > - NULL, &rdev->ih.ring_obj); > + NULL, NULL, &rdev->ih.ring_obj); > if (r) { > DRM_ERROR("radeon: failed to create ih ring buffer (%d).\n", r); > return r; > diff --git a/drivers/gpu/drm/radeon/radeon_benchmark.c b/drivers/gpu/drm/radeon/radeon_benchmark.c > index 1e8855060fc7..9e7f23dd14bd 100644 > --- a/drivers/gpu/drm/radeon/radeon_benchmark.c > +++ b/drivers/gpu/drm/radeon/radeon_benchmark.c > @@ -93,7 +93,7 @@ static void radeon_benchmark_move(struct radeon_device *rdev, unsigned size, > int time; > > n = RADEON_BENCHMARK_ITERATIONS; > - r = radeon_bo_create(rdev, size, PAGE_SIZE, true, sdomain, 0, NULL, &sobj); > + r = radeon_bo_create(rdev, size, PAGE_SIZE, true, sdomain, 0, NULL, NULL, &sobj); > if (r) { > goto out_cleanup; > } > @@ -105,7 +105,7 @@ static void radeon_benchmark_move(struct radeon_device *rdev, unsigned size, > if (r) { > goto out_cleanup; > } > - r = radeon_bo_create(rdev, size, PAGE_SIZE, true, ddomain, 0, NULL, &dobj); > + r = radeon_bo_create(rdev, size, PAGE_SIZE, true, ddomain, 0, NULL, NULL, &dobj); > if (r) { > goto out_cleanup; > } > diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c > index e84a76e6656a..6fbab1582112 100644 > --- a/drivers/gpu/drm/radeon/radeon_device.c > +++ b/drivers/gpu/drm/radeon/radeon_device.c > @@ -430,7 +430,7 @@ int radeon_wb_init(struct radeon_device *rdev) > > if (rdev->wb.wb_obj == NULL) { > r = radeon_bo_create(rdev, RADEON_GPU_PAGE_SIZE, PAGE_SIZE, true, > - RADEON_GEM_DOMAIN_GTT, 0, NULL, > + RADEON_GEM_DOMAIN_GTT, 0, NULL, NULL, > &rdev->wb.wb_obj); > if (r) { > dev_warn(rdev->dev, "(%d) create WB bo failed\n", r); > diff --git a/drivers/gpu/drm/radeon/radeon_gart.c b/drivers/gpu/drm/radeon/radeon_gart.c > index a053a0779aac..84146d5901aa 100644 > --- a/drivers/gpu/drm/radeon/radeon_gart.c > +++ b/drivers/gpu/drm/radeon/radeon_gart.c > @@ -128,7 +128,7 @@ int radeon_gart_table_vram_alloc(struct radeon_device *rdev) > if (rdev->gart.robj == NULL) { > r = radeon_bo_create(rdev, rdev->gart.table_size, > PAGE_SIZE, true, RADEON_GEM_DOMAIN_VRAM, > - 0, NULL, &rdev->gart.robj); > + 0, NULL, NULL, &rdev->gart.robj); > if (r) { > return r; > } > diff --git a/drivers/gpu/drm/radeon/radeon_gem.c b/drivers/gpu/drm/radeon/radeon_gem.c > index 4b7c8ec36c2f..c194497aa586 100644 > --- a/drivers/gpu/drm/radeon/radeon_gem.c > +++ b/drivers/gpu/drm/radeon/radeon_gem.c > @@ -67,7 +67,7 @@ int radeon_gem_object_create(struct radeon_device *rdev, unsigned long size, > > retry: > r = radeon_bo_create(rdev, size, alignment, kernel, initial_domain, > - flags, NULL, &robj); > + flags, NULL, NULL, &robj); > if (r) { > if (r != -ERESTARTSYS) { > if (initial_domain == RADEON_GEM_DOMAIN_VRAM) { > diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c > index 0e82f0223fd4..99a960a4f302 100644 > --- a/drivers/gpu/drm/radeon/radeon_object.c > +++ b/drivers/gpu/drm/radeon/radeon_object.c > @@ -167,8 +167,10 @@ void radeon_ttm_placement_from_domain(struct radeon_bo *rbo, u32 domain) > } > > int radeon_bo_create(struct radeon_device *rdev, > - unsigned long size, int byte_align, bool kernel, u32 domain, > - u32 flags, struct sg_table *sg, struct radeon_bo **bo_ptr) > + unsigned long size, int byte_align, bool kernel, > + u32 domain, u32 flags, struct sg_table *sg, > + struct reservation_object *resv, > + struct radeon_bo **bo_ptr) > { > struct radeon_bo *bo; > enum ttm_bo_type type; > @@ -216,7 +218,7 @@ int radeon_bo_create(struct radeon_device *rdev, > down_read(&rdev->pm.mclk_lock); > r = ttm_bo_init(&rdev->mman.bdev, &bo->tbo, size, type, > &bo->placement, page_align, !kernel, NULL, > - acc_size, sg, NULL, &radeon_ttm_bo_destroy); > + acc_size, sg, resv, &radeon_ttm_bo_destroy); > up_read(&rdev->pm.mclk_lock); > if (unlikely(r != 0)) { > return r; > diff --git a/drivers/gpu/drm/radeon/radeon_object.h b/drivers/gpu/drm/radeon/radeon_object.h > index 98a47fdf3625..1b8ec7917154 100644 > --- a/drivers/gpu/drm/radeon/radeon_object.h > +++ b/drivers/gpu/drm/radeon/radeon_object.h > @@ -126,6 +126,7 @@ extern int radeon_bo_create(struct radeon_device *rdev, > unsigned long size, int byte_align, > bool kernel, u32 domain, u32 flags, > struct sg_table *sg, > + struct reservation_object *resv, > struct radeon_bo **bo_ptr); > extern int radeon_bo_kmap(struct radeon_bo *bo, void **ptr); > extern void radeon_bo_kunmap(struct radeon_bo *bo); > diff --git a/drivers/gpu/drm/radeon/radeon_prime.c b/drivers/gpu/drm/radeon/radeon_prime.c > index 171daf7fc483..f3609c97496b 100644 > --- a/drivers/gpu/drm/radeon/radeon_prime.c > +++ b/drivers/gpu/drm/radeon/radeon_prime.c > @@ -61,12 +61,15 @@ struct drm_gem_object *radeon_gem_prime_import_sg_table(struct drm_device *dev, > struct dma_buf_attachment *attach, > struct sg_table *sg) > { > + struct reservation_object *resv = attach->dmabuf->resv; > struct radeon_device *rdev = dev->dev_private; > struct radeon_bo *bo; > int ret; > > + ww_mutex_lock(&resv->lock, NULL); > ret = radeon_bo_create(rdev, attach->dmabuf->size, PAGE_SIZE, false, > - RADEON_GEM_DOMAIN_GTT, 0, sg, &bo); > + RADEON_GEM_DOMAIN_GTT, 0, sg, resv, &bo); > + ww_mutex_unlock(&resv->lock); > if (ret) > return ERR_PTR(ret); > > diff --git a/drivers/gpu/drm/radeon/radeon_ring.c b/drivers/gpu/drm/radeon/radeon_ring.c > index 6f2a9bd6bb54..3d17af34afa7 100644 > --- a/drivers/gpu/drm/radeon/radeon_ring.c > +++ b/drivers/gpu/drm/radeon/radeon_ring.c > @@ -383,7 +383,7 @@ int radeon_ring_init(struct radeon_device *rdev, struct radeon_ring *ring, unsig > /* Allocate ring buffer */ > if (ring->ring_obj == NULL) { > r = radeon_bo_create(rdev, ring->ring_size, PAGE_SIZE, true, > - RADEON_GEM_DOMAIN_GTT, 0, > + RADEON_GEM_DOMAIN_GTT, 0, NULL, > NULL, &ring->ring_obj); > if (r) { > dev_err(rdev->dev, "(%d) ring create failed\n", r); > diff --git a/drivers/gpu/drm/radeon/radeon_sa.c b/drivers/gpu/drm/radeon/radeon_sa.c > index b84f97c8718c..c507896aca45 100644 > --- a/drivers/gpu/drm/radeon/radeon_sa.c > +++ b/drivers/gpu/drm/radeon/radeon_sa.c > @@ -65,7 +65,7 @@ int radeon_sa_bo_manager_init(struct radeon_device *rdev, > } > > r = radeon_bo_create(rdev, size, align, true, > - domain, flags, NULL, &sa_manager->bo); > + domain, flags, NULL, NULL, &sa_manager->bo); > if (r) { > dev_err(rdev->dev, "(%d) failed to allocate bo for manager\n", r); > return r; > diff --git a/drivers/gpu/drm/radeon/radeon_test.c b/drivers/gpu/drm/radeon/radeon_test.c > index ce943e1a5e51..07b506b41008 100644 > --- a/drivers/gpu/drm/radeon/radeon_test.c > +++ b/drivers/gpu/drm/radeon/radeon_test.c > @@ -67,7 +67,7 @@ static void radeon_do_test_moves(struct radeon_device *rdev, int flag) > } > > r = radeon_bo_create(rdev, size, PAGE_SIZE, true, RADEON_GEM_DOMAIN_VRAM, > - 0, NULL, &vram_obj); > + 0, NULL, NULL, &vram_obj); > if (r) { > DRM_ERROR("Failed to create VRAM object\n"); > goto out_cleanup; > @@ -87,7 +87,8 @@ static void radeon_do_test_moves(struct radeon_device *rdev, int flag) > struct radeon_fence *fence = NULL; > > r = radeon_bo_create(rdev, size, PAGE_SIZE, true, > - RADEON_GEM_DOMAIN_GTT, 0, NULL, gtt_obj + i); > + RADEON_GEM_DOMAIN_GTT, 0, NULL, NULL, > + gtt_obj + i); > if (r) { > DRM_ERROR("Failed to create GTT object %d\n", i); > goto out_lclean; > diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c > index eca2ce60d440..747307ec46da 100644 > --- a/drivers/gpu/drm/radeon/radeon_ttm.c > +++ b/drivers/gpu/drm/radeon/radeon_ttm.c > @@ -858,7 +858,7 @@ int radeon_ttm_init(struct radeon_device *rdev) > radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size); > > r = radeon_bo_create(rdev, 256 * 1024, PAGE_SIZE, true, > - RADEON_GEM_DOMAIN_VRAM, 0, > + RADEON_GEM_DOMAIN_VRAM, 0, NULL, > NULL, &rdev->stollen_vga_memory); > if (r) { > return r; > diff --git a/drivers/gpu/drm/radeon/radeon_uvd.c b/drivers/gpu/drm/radeon/radeon_uvd.c > index ba4f38916026..11b662469253 100644 > --- a/drivers/gpu/drm/radeon/radeon_uvd.c > +++ b/drivers/gpu/drm/radeon/radeon_uvd.c > @@ -141,7 +141,8 @@ int radeon_uvd_init(struct radeon_device *rdev) > RADEON_UVD_STACK_SIZE + RADEON_UVD_HEAP_SIZE + > RADEON_GPU_PAGE_SIZE; > r = radeon_bo_create(rdev, bo_size, PAGE_SIZE, true, > - RADEON_GEM_DOMAIN_VRAM, 0, NULL, &rdev->uvd.vcpu_bo); > + RADEON_GEM_DOMAIN_VRAM, 0, NULL, > + NULL, &rdev->uvd.vcpu_bo); > if (r) { > dev_err(rdev->dev, "(%d) failed to allocate UVD bo\n", r); > return r; > diff --git a/drivers/gpu/drm/radeon/radeon_vce.c b/drivers/gpu/drm/radeon/radeon_vce.c > index c7190aadbd89..9e85757d5599 100644 > --- a/drivers/gpu/drm/radeon/radeon_vce.c > +++ b/drivers/gpu/drm/radeon/radeon_vce.c > @@ -126,7 +126,8 @@ int radeon_vce_init(struct radeon_device *rdev) > size = RADEON_GPU_PAGE_ALIGN(rdev->vce_fw->size) + > RADEON_VCE_STACK_SIZE + RADEON_VCE_HEAP_SIZE; > r = radeon_bo_create(rdev, size, PAGE_SIZE, true, > - RADEON_GEM_DOMAIN_VRAM, 0, NULL, &rdev->vce.vcpu_bo); > + RADEON_GEM_DOMAIN_VRAM, 0, NULL, NULL, > + &rdev->vce.vcpu_bo); > if (r) { > dev_err(rdev->dev, "(%d) failed to allocate VCE bo\n", r); > return r; > diff --git a/drivers/gpu/drm/radeon/radeon_vm.c b/drivers/gpu/drm/radeon/radeon_vm.c > index f6e76c18d7eb..683062576a8d 100644 > --- a/drivers/gpu/drm/radeon/radeon_vm.c > +++ b/drivers/gpu/drm/radeon/radeon_vm.c > @@ -548,7 +548,8 @@ int radeon_vm_bo_set_addr(struct radeon_device *rdev, > > r = radeon_bo_create(rdev, RADEON_VM_PTE_COUNT * 8, > RADEON_GPU_PAGE_SIZE, true, > - RADEON_GEM_DOMAIN_VRAM, 0, NULL, &pt); > + RADEON_GEM_DOMAIN_VRAM, 0, > + NULL, NULL, &pt); > if (r) > return r; > > @@ -1127,7 +1128,7 @@ int radeon_vm_init(struct radeon_device *rdev, struct radeon_vm *vm) > > r = radeon_bo_create(rdev, pd_size, align, true, > RADEON_GEM_DOMAIN_VRAM, 0, NULL, > - &vm->page_directory); > + NULL, &vm->page_directory); > if (r) > return r; > >
diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c index 1440b6e9281e..1f8484284b47 100644 --- a/drivers/gpu/drm/radeon/cik.c +++ b/drivers/gpu/drm/radeon/cik.c @@ -4690,7 +4690,7 @@ static int cik_mec_init(struct radeon_device *rdev) r = radeon_bo_create(rdev, rdev->mec.num_mec *rdev->mec.num_pipe * MEC_HPD_SIZE * 2, PAGE_SIZE, true, - RADEON_GEM_DOMAIN_GTT, 0, NULL, + RADEON_GEM_DOMAIN_GTT, 0, NULL, NULL, &rdev->mec.hpd_eop_obj); if (r) { dev_warn(rdev->dev, "(%d) create HDP EOP bo failed\n", r); @@ -4861,7 +4861,7 @@ static int cik_cp_compute_resume(struct radeon_device *rdev) sizeof(struct bonaire_mqd), PAGE_SIZE, true, RADEON_GEM_DOMAIN_GTT, 0, NULL, - &rdev->ring[idx].mqd_obj); + NULL, &rdev->ring[idx].mqd_obj); if (r) { dev_warn(rdev->dev, "(%d) create MQD bo failed\n", r); return r; diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c index dbca60c7d097..c6ccef6c3596 100644 --- a/drivers/gpu/drm/radeon/evergreen.c +++ b/drivers/gpu/drm/radeon/evergreen.c @@ -4023,7 +4023,7 @@ int sumo_rlc_init(struct radeon_device *rdev) if (rdev->rlc.save_restore_obj == NULL) { r = radeon_bo_create(rdev, dws * 4, PAGE_SIZE, true, RADEON_GEM_DOMAIN_VRAM, 0, NULL, - &rdev->rlc.save_restore_obj); + NULL, &rdev->rlc.save_restore_obj); if (r) { dev_warn(rdev->dev, "(%d) create RLC sr bo failed\n", r); return r; @@ -4102,7 +4102,7 @@ int sumo_rlc_init(struct radeon_device *rdev) if (rdev->rlc.clear_state_obj == NULL) { r = radeon_bo_create(rdev, dws * 4, PAGE_SIZE, true, RADEON_GEM_DOMAIN_VRAM, 0, NULL, - &rdev->rlc.clear_state_obj); + NULL, &rdev->rlc.clear_state_obj); if (r) { dev_warn(rdev->dev, "(%d) create RLC c bo failed\n", r); sumo_rlc_fini(rdev); @@ -4179,7 +4179,7 @@ int sumo_rlc_init(struct radeon_device *rdev) r = radeon_bo_create(rdev, rdev->rlc.cp_table_size, PAGE_SIZE, true, RADEON_GEM_DOMAIN_VRAM, 0, NULL, - &rdev->rlc.cp_table_obj); + NULL, &rdev->rlc.cp_table_obj); if (r) { dev_warn(rdev->dev, "(%d) create RLC cp table bo failed\n", r); sumo_rlc_fini(rdev); diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c index 35c22ee9bc4a..a82eaa81cd07 100644 --- a/drivers/gpu/drm/radeon/r600.c +++ b/drivers/gpu/drm/radeon/r600.c @@ -1430,7 +1430,7 @@ int r600_vram_scratch_init(struct radeon_device *rdev) if (rdev->vram_scratch.robj == NULL) { r = radeon_bo_create(rdev, RADEON_GPU_PAGE_SIZE, PAGE_SIZE, true, RADEON_GEM_DOMAIN_VRAM, - 0, NULL, &rdev->vram_scratch.robj); + 0, NULL, NULL, &rdev->vram_scratch.robj); if (r) { return r; } @@ -3368,7 +3368,7 @@ int r600_ih_ring_alloc(struct radeon_device *rdev) r = radeon_bo_create(rdev, rdev->ih.ring_size, PAGE_SIZE, true, RADEON_GEM_DOMAIN_GTT, 0, - NULL, &rdev->ih.ring_obj); + NULL, NULL, &rdev->ih.ring_obj); if (r) { DRM_ERROR("radeon: failed to create ih ring buffer (%d).\n", r); return r; diff --git a/drivers/gpu/drm/radeon/radeon_benchmark.c b/drivers/gpu/drm/radeon/radeon_benchmark.c index 1e8855060fc7..9e7f23dd14bd 100644 --- a/drivers/gpu/drm/radeon/radeon_benchmark.c +++ b/drivers/gpu/drm/radeon/radeon_benchmark.c @@ -93,7 +93,7 @@ static void radeon_benchmark_move(struct radeon_device *rdev, unsigned size, int time; n = RADEON_BENCHMARK_ITERATIONS; - r = radeon_bo_create(rdev, size, PAGE_SIZE, true, sdomain, 0, NULL, &sobj); + r = radeon_bo_create(rdev, size, PAGE_SIZE, true, sdomain, 0, NULL, NULL, &sobj); if (r) { goto out_cleanup; } @@ -105,7 +105,7 @@ static void radeon_benchmark_move(struct radeon_device *rdev, unsigned size, if (r) { goto out_cleanup; } - r = radeon_bo_create(rdev, size, PAGE_SIZE, true, ddomain, 0, NULL, &dobj); + r = radeon_bo_create(rdev, size, PAGE_SIZE, true, ddomain, 0, NULL, NULL, &dobj); if (r) { goto out_cleanup; } diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c index e84a76e6656a..6fbab1582112 100644 --- a/drivers/gpu/drm/radeon/radeon_device.c +++ b/drivers/gpu/drm/radeon/radeon_device.c @@ -430,7 +430,7 @@ int radeon_wb_init(struct radeon_device *rdev) if (rdev->wb.wb_obj == NULL) { r = radeon_bo_create(rdev, RADEON_GPU_PAGE_SIZE, PAGE_SIZE, true, - RADEON_GEM_DOMAIN_GTT, 0, NULL, + RADEON_GEM_DOMAIN_GTT, 0, NULL, NULL, &rdev->wb.wb_obj); if (r) { dev_warn(rdev->dev, "(%d) create WB bo failed\n", r); diff --git a/drivers/gpu/drm/radeon/radeon_gart.c b/drivers/gpu/drm/radeon/radeon_gart.c index a053a0779aac..84146d5901aa 100644 --- a/drivers/gpu/drm/radeon/radeon_gart.c +++ b/drivers/gpu/drm/radeon/radeon_gart.c @@ -128,7 +128,7 @@ int radeon_gart_table_vram_alloc(struct radeon_device *rdev) if (rdev->gart.robj == NULL) { r = radeon_bo_create(rdev, rdev->gart.table_size, PAGE_SIZE, true, RADEON_GEM_DOMAIN_VRAM, - 0, NULL, &rdev->gart.robj); + 0, NULL, NULL, &rdev->gart.robj); if (r) { return r; } diff --git a/drivers/gpu/drm/radeon/radeon_gem.c b/drivers/gpu/drm/radeon/radeon_gem.c index 4b7c8ec36c2f..c194497aa586 100644 --- a/drivers/gpu/drm/radeon/radeon_gem.c +++ b/drivers/gpu/drm/radeon/radeon_gem.c @@ -67,7 +67,7 @@ int radeon_gem_object_create(struct radeon_device *rdev, unsigned long size, retry: r = radeon_bo_create(rdev, size, alignment, kernel, initial_domain, - flags, NULL, &robj); + flags, NULL, NULL, &robj); if (r) { if (r != -ERESTARTSYS) { if (initial_domain == RADEON_GEM_DOMAIN_VRAM) { diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c index 0e82f0223fd4..99a960a4f302 100644 --- a/drivers/gpu/drm/radeon/radeon_object.c +++ b/drivers/gpu/drm/radeon/radeon_object.c @@ -167,8 +167,10 @@ void radeon_ttm_placement_from_domain(struct radeon_bo *rbo, u32 domain) } int radeon_bo_create(struct radeon_device *rdev, - unsigned long size, int byte_align, bool kernel, u32 domain, - u32 flags, struct sg_table *sg, struct radeon_bo **bo_ptr) + unsigned long size, int byte_align, bool kernel, + u32 domain, u32 flags, struct sg_table *sg, + struct reservation_object *resv, + struct radeon_bo **bo_ptr) { struct radeon_bo *bo; enum ttm_bo_type type; @@ -216,7 +218,7 @@ int radeon_bo_create(struct radeon_device *rdev, down_read(&rdev->pm.mclk_lock); r = ttm_bo_init(&rdev->mman.bdev, &bo->tbo, size, type, &bo->placement, page_align, !kernel, NULL, - acc_size, sg, NULL, &radeon_ttm_bo_destroy); + acc_size, sg, resv, &radeon_ttm_bo_destroy); up_read(&rdev->pm.mclk_lock); if (unlikely(r != 0)) { return r; diff --git a/drivers/gpu/drm/radeon/radeon_object.h b/drivers/gpu/drm/radeon/radeon_object.h index 98a47fdf3625..1b8ec7917154 100644 --- a/drivers/gpu/drm/radeon/radeon_object.h +++ b/drivers/gpu/drm/radeon/radeon_object.h @@ -126,6 +126,7 @@ extern int radeon_bo_create(struct radeon_device *rdev, unsigned long size, int byte_align, bool kernel, u32 domain, u32 flags, struct sg_table *sg, + struct reservation_object *resv, struct radeon_bo **bo_ptr); extern int radeon_bo_kmap(struct radeon_bo *bo, void **ptr); extern void radeon_bo_kunmap(struct radeon_bo *bo); diff --git a/drivers/gpu/drm/radeon/radeon_prime.c b/drivers/gpu/drm/radeon/radeon_prime.c index 171daf7fc483..f3609c97496b 100644 --- a/drivers/gpu/drm/radeon/radeon_prime.c +++ b/drivers/gpu/drm/radeon/radeon_prime.c @@ -61,12 +61,15 @@ struct drm_gem_object *radeon_gem_prime_import_sg_table(struct drm_device *dev, struct dma_buf_attachment *attach, struct sg_table *sg) { + struct reservation_object *resv = attach->dmabuf->resv; struct radeon_device *rdev = dev->dev_private; struct radeon_bo *bo; int ret; + ww_mutex_lock(&resv->lock, NULL); ret = radeon_bo_create(rdev, attach->dmabuf->size, PAGE_SIZE, false, - RADEON_GEM_DOMAIN_GTT, 0, sg, &bo); + RADEON_GEM_DOMAIN_GTT, 0, sg, resv, &bo); + ww_mutex_unlock(&resv->lock); if (ret) return ERR_PTR(ret); diff --git a/drivers/gpu/drm/radeon/radeon_ring.c b/drivers/gpu/drm/radeon/radeon_ring.c index 6f2a9bd6bb54..3d17af34afa7 100644 --- a/drivers/gpu/drm/radeon/radeon_ring.c +++ b/drivers/gpu/drm/radeon/radeon_ring.c @@ -383,7 +383,7 @@ int radeon_ring_init(struct radeon_device *rdev, struct radeon_ring *ring, unsig /* Allocate ring buffer */ if (ring->ring_obj == NULL) { r = radeon_bo_create(rdev, ring->ring_size, PAGE_SIZE, true, - RADEON_GEM_DOMAIN_GTT, 0, + RADEON_GEM_DOMAIN_GTT, 0, NULL, NULL, &ring->ring_obj); if (r) { dev_err(rdev->dev, "(%d) ring create failed\n", r); diff --git a/drivers/gpu/drm/radeon/radeon_sa.c b/drivers/gpu/drm/radeon/radeon_sa.c index b84f97c8718c..c507896aca45 100644 --- a/drivers/gpu/drm/radeon/radeon_sa.c +++ b/drivers/gpu/drm/radeon/radeon_sa.c @@ -65,7 +65,7 @@ int radeon_sa_bo_manager_init(struct radeon_device *rdev, } r = radeon_bo_create(rdev, size, align, true, - domain, flags, NULL, &sa_manager->bo); + domain, flags, NULL, NULL, &sa_manager->bo); if (r) { dev_err(rdev->dev, "(%d) failed to allocate bo for manager\n", r); return r; diff --git a/drivers/gpu/drm/radeon/radeon_test.c b/drivers/gpu/drm/radeon/radeon_test.c index ce943e1a5e51..07b506b41008 100644 --- a/drivers/gpu/drm/radeon/radeon_test.c +++ b/drivers/gpu/drm/radeon/radeon_test.c @@ -67,7 +67,7 @@ static void radeon_do_test_moves(struct radeon_device *rdev, int flag) } r = radeon_bo_create(rdev, size, PAGE_SIZE, true, RADEON_GEM_DOMAIN_VRAM, - 0, NULL, &vram_obj); + 0, NULL, NULL, &vram_obj); if (r) { DRM_ERROR("Failed to create VRAM object\n"); goto out_cleanup; @@ -87,7 +87,8 @@ static void radeon_do_test_moves(struct radeon_device *rdev, int flag) struct radeon_fence *fence = NULL; r = radeon_bo_create(rdev, size, PAGE_SIZE, true, - RADEON_GEM_DOMAIN_GTT, 0, NULL, gtt_obj + i); + RADEON_GEM_DOMAIN_GTT, 0, NULL, NULL, + gtt_obj + i); if (r) { DRM_ERROR("Failed to create GTT object %d\n", i); goto out_lclean; diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c index eca2ce60d440..747307ec46da 100644 --- a/drivers/gpu/drm/radeon/radeon_ttm.c +++ b/drivers/gpu/drm/radeon/radeon_ttm.c @@ -858,7 +858,7 @@ int radeon_ttm_init(struct radeon_device *rdev) radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size); r = radeon_bo_create(rdev, 256 * 1024, PAGE_SIZE, true, - RADEON_GEM_DOMAIN_VRAM, 0, + RADEON_GEM_DOMAIN_VRAM, 0, NULL, NULL, &rdev->stollen_vga_memory); if (r) { return r; diff --git a/drivers/gpu/drm/radeon/radeon_uvd.c b/drivers/gpu/drm/radeon/radeon_uvd.c index ba4f38916026..11b662469253 100644 --- a/drivers/gpu/drm/radeon/radeon_uvd.c +++ b/drivers/gpu/drm/radeon/radeon_uvd.c @@ -141,7 +141,8 @@ int radeon_uvd_init(struct radeon_device *rdev) RADEON_UVD_STACK_SIZE + RADEON_UVD_HEAP_SIZE + RADEON_GPU_PAGE_SIZE; r = radeon_bo_create(rdev, bo_size, PAGE_SIZE, true, - RADEON_GEM_DOMAIN_VRAM, 0, NULL, &rdev->uvd.vcpu_bo); + RADEON_GEM_DOMAIN_VRAM, 0, NULL, + NULL, &rdev->uvd.vcpu_bo); if (r) { dev_err(rdev->dev, "(%d) failed to allocate UVD bo\n", r); return r; diff --git a/drivers/gpu/drm/radeon/radeon_vce.c b/drivers/gpu/drm/radeon/radeon_vce.c index c7190aadbd89..9e85757d5599 100644 --- a/drivers/gpu/drm/radeon/radeon_vce.c +++ b/drivers/gpu/drm/radeon/radeon_vce.c @@ -126,7 +126,8 @@ int radeon_vce_init(struct radeon_device *rdev) size = RADEON_GPU_PAGE_ALIGN(rdev->vce_fw->size) + RADEON_VCE_STACK_SIZE + RADEON_VCE_HEAP_SIZE; r = radeon_bo_create(rdev, size, PAGE_SIZE, true, - RADEON_GEM_DOMAIN_VRAM, 0, NULL, &rdev->vce.vcpu_bo); + RADEON_GEM_DOMAIN_VRAM, 0, NULL, NULL, + &rdev->vce.vcpu_bo); if (r) { dev_err(rdev->dev, "(%d) failed to allocate VCE bo\n", r); return r; diff --git a/drivers/gpu/drm/radeon/radeon_vm.c b/drivers/gpu/drm/radeon/radeon_vm.c index f6e76c18d7eb..683062576a8d 100644 --- a/drivers/gpu/drm/radeon/radeon_vm.c +++ b/drivers/gpu/drm/radeon/radeon_vm.c @@ -548,7 +548,8 @@ int radeon_vm_bo_set_addr(struct radeon_device *rdev, r = radeon_bo_create(rdev, RADEON_VM_PTE_COUNT * 8, RADEON_GPU_PAGE_SIZE, true, - RADEON_GEM_DOMAIN_VRAM, 0, NULL, &pt); + RADEON_GEM_DOMAIN_VRAM, 0, + NULL, NULL, &pt); if (r) return r; @@ -1127,7 +1128,7 @@ int radeon_vm_init(struct radeon_device *rdev, struct radeon_vm *vm) r = radeon_bo_create(rdev, pd_size, align, true, RADEON_GEM_DOMAIN_VRAM, 0, NULL, - &vm->page_directory); + NULL, &vm->page_directory); if (r) return r;
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. Signed-off-by: Maarten Lankhorst <maarten.lankhorst@canonical.com> --- v2: robj -> resv fix typo in commit description