On Tue, Apr 19, 2022 at 10:55 AM Christian König <christian.koenig@xxxxxxx> wrote: > > Am 19.04.22 um 16:49 schrieb Alex Deucher: > > On Tue, Apr 19, 2022 at 10:19 AM Christian König > > <ckoenig.leichtzumerken@xxxxxxxxx> wrote: > >> We just need to reserve the BO here, no need for using ttm_eu. > > Can you include a more detailed description as to why it's not > > necessary? > > Well the logic in ttm_eu is for reserving multiple buffers. With the commit message fixed up to include that detail, the series is: Acked-by: Alex Deucher <alexander.deucher@xxxxxxx> > > > Most of this code was copied from radeon originally. Does > > radeon need a similar cleanup? > > Most likely yes. > > Christian. > > > > > Alex > > > >> Signed-off-by: Christian König <christian.koenig@xxxxxxx> > >> --- > >> drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c | 32 +++++++++++++----------- > >> 1 file changed, 17 insertions(+), 15 deletions(-) > >> > >> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c > >> index 5224d9a39737..576849e95296 100644 > >> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c > >> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c > >> @@ -302,9 +302,6 @@ static int amdgpu_vkms_prepare_fb(struct drm_plane *plane, > >> struct drm_gem_object *obj; > >> struct amdgpu_device *adev; > >> struct amdgpu_bo *rbo; > >> - struct list_head list; > >> - struct ttm_validate_buffer tv; > >> - struct ww_acquire_ctx ticket; > >> uint32_t domain; > >> int r; > >> > >> @@ -316,18 +313,19 @@ static int amdgpu_vkms_prepare_fb(struct drm_plane *plane, > >> obj = new_state->fb->obj[0]; > >> rbo = gem_to_amdgpu_bo(obj); > >> adev = amdgpu_ttm_adev(rbo->tbo.bdev); > >> - INIT_LIST_HEAD(&list); > >> > >> - tv.bo = &rbo->tbo; > >> - tv.num_shared = 1; > >> - list_add(&tv.head, &list); > >> - > >> - r = ttm_eu_reserve_buffers(&ticket, &list, false, NULL); > >> + r = amdgpu_bo_reserve(rbo, true); > >> if (r) { > >> dev_err(adev->dev, "fail to reserve bo (%d)\n", r); > >> return r; > >> } > >> > >> + r = dma_resv_reserve_fences(rbo->tbo.base.resv, 1); > >> + if (r) { > >> + dev_err(adev->dev, "allocating fence slot failed (%d)\n", r); > >> + goto error_unlock; > >> + } > >> + > >> if (plane->type != DRM_PLANE_TYPE_CURSOR) > >> domain = amdgpu_display_supported_domains(adev, rbo->flags); > >> else > >> @@ -337,25 +335,29 @@ static int amdgpu_vkms_prepare_fb(struct drm_plane *plane, > >> if (unlikely(r != 0)) { > >> if (r != -ERESTARTSYS) > >> DRM_ERROR("Failed to pin framebuffer with error %d\n", r); > >> - ttm_eu_backoff_reservation(&ticket, &list); > >> - return r; > >> + goto error_unlock; > >> } > >> > >> r = amdgpu_ttm_alloc_gart(&rbo->tbo); > >> if (unlikely(r != 0)) { > >> - amdgpu_bo_unpin(rbo); > >> - ttm_eu_backoff_reservation(&ticket, &list); > >> DRM_ERROR("%p bind failed\n", rbo); > >> - return r; > >> + goto error_unpin; > >> } > >> > >> - ttm_eu_backoff_reservation(&ticket, &list); > >> + amdgpu_bo_unreserve(rbo); > >> > >> afb->address = amdgpu_bo_gpu_offset(rbo); > >> > >> amdgpu_bo_ref(rbo); > >> > >> return 0; > >> + > >> +error_unpin: > >> + amdgpu_bo_unpin(rbo); > >> + > >> +error_unlock: > >> + amdgpu_bo_unreserve(rbo); > >> + return r; > >> } > >> > >> static void amdgpu_vkms_cleanup_fb(struct drm_plane *plane, > >> -- > >> 2.25.1 > >> >