fence_wait in run_job could block scheduler, and the fence itself is
belonged to this scheduler.

Change-Id: I0c69224de5ef1bdb5b0691d668d786858155fe15
Signed-off-by: Chunming Zhou <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
index df8b6e0..48c7f1b 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
@@ -152,6 +152,10 @@ static struct fence *amdgpu_job_dependency(struct 
amd_sched_job *sched_job)
                fence = amdgpu_sync_get_fence(&job->sync);
        }
 
+       if (fence == NULL && vm && vm->recover_pt_fence &&
+           !fence_is_signaled(vm->recover_pt_fence))
+               fence = vm->recover_pt_fence;
+
        return fence;
 }
 
@@ -171,14 +175,6 @@ static struct fence *amdgpu_job_run(struct amd_sched_job 
*sched_job)
 
        trace_amdgpu_sched_run_job(job);
 
-       if (job->vm && job->vm->recover_pt_fence) {
-               signed long r;
-               r = fence_wait_timeout(job->vm->recover_pt_fence, true,
-                                      MAX_SCHEDULE_TIMEOUT);
-               if (r < 0)
-                       DRM_ERROR("Error (%ld) waiting for fence!\n", r);
-       }
-
        r = amdgpu_ib_schedule(job->ring, job->num_ibs, job->ibs,
                               job->sync.last_vm_update, job, &fence);
        if (r) {
-- 
1.9.1

_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to