drm/radeon: use dma_resv_wait_timeout() instead of manually waiting
authorChristian König <christian.koenig@amd.com>
Wed, 27 Oct 2021 11:30:40 +0000 (13:30 +0200)
committerChristian König <christian.koenig@amd.com>
Thu, 4 Nov 2021 09:25:06 +0000 (10:25 +0100)
Don't touch the exclusive fence manually here, but rather use the
general dma_resv function. We did that for better hw reset handling but
this doesn't necessary work correctly.

Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Alex Deuche <alexander.deucher@amd.com>
Acked-by: Nirmoy Das <nirmoy.das@amd.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20211028132630.2330-6-christian.koenig@amd.com
drivers/gpu/drm/radeon/radeon_uvd.c

index 2ea8691..377f9cd 100644 (file)
@@ -469,7 +469,6 @@ static int radeon_uvd_cs_msg(struct radeon_cs_parser *p, struct radeon_bo *bo,
 {
        int32_t *msg, msg_type, handle;
        unsigned img_size = 0;
-       struct dma_fence *f;
        void *ptr;
 
        int i, r;
@@ -479,13 +478,11 @@ static int radeon_uvd_cs_msg(struct radeon_cs_parser *p, struct radeon_bo *bo,
                return -EINVAL;
        }
 
-       f = dma_resv_excl_fence(bo->tbo.base.resv);
-       if (f) {
-               r = radeon_fence_wait((struct radeon_fence *)f, false);
-               if (r) {
-                       DRM_ERROR("Failed waiting for UVD message (%d)!\n", r);
-                       return r;
-               }
+       r = dma_resv_wait_timeout(bo->tbo.base.resv, false, false,
+                                 MAX_SCHEDULE_TIMEOUT);
+       if (r <= 0) {
+               DRM_ERROR("Failed waiting for UVD message (%d)!\n", r);
+               return r ? r : -ETIME;
        }
 
        r = radeon_bo_kmap(bo, &ptr);