diff options
Diffstat (limited to 'drivers/gpu/drm/amd/scheduler/gpu_scheduler.c')
-rw-r--r-- | drivers/gpu/drm/amd/scheduler/gpu_scheduler.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c index b9d5822bece8..8d49ea2e4134 100644 --- a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c +++ b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c | |||
@@ -319,6 +319,11 @@ static bool amd_sched_entity_in(struct amd_sched_job *sched_job) | |||
319 | return added; | 319 | return added; |
320 | } | 320 | } |
321 | 321 | ||
322 | static void amd_sched_free_job(struct fence *f, struct fence_cb *cb) { | ||
323 | struct amd_sched_job *job = container_of(cb, struct amd_sched_job, cb_free_job); | ||
324 | schedule_work(&job->work_free_job); | ||
325 | } | ||
326 | |||
322 | /** | 327 | /** |
323 | * Submit a job to the job queue | 328 | * Submit a job to the job queue |
324 | * | 329 | * |
@@ -330,6 +335,9 @@ void amd_sched_entity_push_job(struct amd_sched_job *sched_job) | |||
330 | { | 335 | { |
331 | struct amd_sched_entity *entity = sched_job->s_entity; | 336 | struct amd_sched_entity *entity = sched_job->s_entity; |
332 | 337 | ||
338 | sched_job->use_sched = 1; | ||
339 | fence_add_callback(&sched_job->s_fence->base, | ||
340 | &sched_job->cb_free_job, amd_sched_free_job); | ||
333 | trace_amd_sched_job(sched_job); | 341 | trace_amd_sched_job(sched_job); |
334 | wait_event(entity->sched->job_scheduled, | 342 | wait_event(entity->sched->job_scheduled, |
335 | amd_sched_entity_in(sched_job)); | 343 | amd_sched_entity_in(sched_job)); |