aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/scheduler/gpu_scheduler.c')
-rw-r--r--drivers/gpu/drm/amd/scheduler/gpu_scheduler.c8
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
322static 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));