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 <David1.Zhou at amd.com> --- 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