aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c
index dd9fac302e55..b22a95f0571c 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c
@@ -31,7 +31,31 @@
31static struct fence *amdgpu_sched_dependency(struct amd_sched_job *sched_job) 31static struct fence *amdgpu_sched_dependency(struct amd_sched_job *sched_job)
32{ 32{
33 struct amdgpu_job *job = to_amdgpu_job(sched_job); 33 struct amdgpu_job *job = to_amdgpu_job(sched_job);
34 return amdgpu_sync_get_fence(&job->ibs->sync); 34 struct amdgpu_sync *sync = &job->ibs->sync;
35 struct amdgpu_vm *vm = job->ibs->vm;
36
37 struct fence *fence = amdgpu_sync_get_fence(sync);
38
39 if (fence == NULL && vm && !job->ibs->grabbed_vmid) {
40 struct amdgpu_ring *ring = job->ibs->ring;
41 struct amdgpu_device *adev = ring->adev;
42 int r;
43
44 mutex_lock(&adev->vm_manager.lock);
45 r = amdgpu_vm_grab_id(vm, ring, sync);
46 if (r) {
47 DRM_ERROR("Error getting VM ID (%d)\n", r);
48 } else {
49 fence = &job->base.s_fence->base;
50 amdgpu_vm_fence(ring->adev, vm, fence);
51 job->ibs->grabbed_vmid = true;
52 }
53 mutex_unlock(&adev->vm_manager.lock);
54
55 fence = amdgpu_sync_get_fence(sync);
56 }
57
58 return fence;
35} 59}
36 60
37static struct fence *amdgpu_sched_run_job(struct amd_sched_job *sched_job) 61static struct fence *amdgpu_sched_run_job(struct amd_sched_job *sched_job)