diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c | 34 |
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 | } |