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.c34
1 files changed, 17 insertions, 17 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c
index d82f2481bd0e..6a7e83edcaa7 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c
@@ -118,7 +118,6 @@ int amdgpu_sched_ib_submit_kernel_helper(struct amdgpu_device *adev,
118{ 118{
119 int r = 0; 119 int r = 0;
120 if (amdgpu_enable_scheduler) { 120 if (amdgpu_enable_scheduler) {
121 uint64_t v_seq;
122 struct amdgpu_cs_parser *sched_job = 121 struct amdgpu_cs_parser *sched_job =
123 amdgpu_cs_parser_create(adev, owner, &adev->kernel_ctx, 122 amdgpu_cs_parser_create(adev, owner, &adev->kernel_ctx,
124 ibs, num_ibs); 123 ibs, num_ibs);
@@ -126,22 +125,23 @@ int amdgpu_sched_ib_submit_kernel_helper(struct amdgpu_device *adev,
126 return -ENOMEM; 125 return -ENOMEM;
127 } 126 }
128 sched_job->free_job = free_job; 127 sched_job->free_job = free_job;
129 v_seq = atomic64_inc_return(&adev->kernel_ctx.rings[ring->idx].entity.last_queued_v_seq); 128 mutex_lock(&sched_job->job_lock);
130 ibs[num_ibs - 1].sequence = v_seq; 129 r = amd_sched_push_job(ring->scheduler,
131 amd_sched_push_job(ring->scheduler, 130 &adev->kernel_ctx.rings[ring->idx].entity,
132 &adev->kernel_ctx.rings[ring->idx].entity, 131 sched_job, &sched_job->s_fence);
133 sched_job); 132 if (r) {
134 r = amd_sched_wait_emit( 133 mutex_unlock(&sched_job->job_lock);
135 &adev->kernel_ctx.rings[ring->idx].entity, 134 kfree(sched_job);
136 v_seq, 135 return r;
137 false, 136 }
138 -1); 137 ibs[num_ibs - 1].sequence = sched_job->s_fence->v_seq;
139 if (r) 138 *f = &sched_job->s_fence->base;
140 WARN(true, "emit timeout\n"); 139 mutex_unlock(&sched_job->job_lock);
141 } else 140 } else {
142 r = amdgpu_ib_schedule(adev, num_ibs, ibs, owner); 141 r = amdgpu_ib_schedule(adev, num_ibs, ibs, owner);
143 if (r) 142 if (r)
144 return r; 143 return r;
145 *f = &ibs[num_ibs - 1].fence->base; 144 *f = &ibs[num_ibs - 1].fence->base;
145 }
146 return 0; 146 return 0;
147} 147}