Skip to content

Commit d0399da

Browse files
mbrost05airlied
authored andcommitted
drm/sched: Re-queue run job worker when drm_sched_entity_pop_job() returns NULL
Rather then loop over entities until one with a ready job is found, re-queue the run job worker when drm_sched_entity_pop_job() returns NULL. Signed-off-by: Matthew Brost <matthew.brost@intel.com> Reviewed-by: Christian König <christian.koenig@amd.com> Fixes: 66dbd90 ("drm/sched: Drain all entities in DRM sched run job worker") Reviewed-by: Luben Tuikov <ltuikov89@gmail.com> Signed-off-by: Dave Airlie <airlied@redhat.com> Link: https://patchwork.freedesktop.org/patch/msgid/20240130030413.2031009-1-matthew.brost@intel.com
1 parent 54be6c6 commit d0399da

1 file changed

Lines changed: 9 additions & 6 deletions

File tree

drivers/gpu/drm/scheduler/sched_main.c

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1178,21 +1178,24 @@ static void drm_sched_run_job_work(struct work_struct *w)
11781178
struct drm_sched_entity *entity;
11791179
struct dma_fence *fence;
11801180
struct drm_sched_fence *s_fence;
1181-
struct drm_sched_job *sched_job = NULL;
1181+
struct drm_sched_job *sched_job;
11821182
int r;
11831183

11841184
if (READ_ONCE(sched->pause_submit))
11851185
return;
11861186

11871187
/* Find entity with a ready job */
1188-
while (!sched_job && (entity = drm_sched_select_entity(sched))) {
1189-
sched_job = drm_sched_entity_pop_job(entity);
1190-
if (!sched_job)
1191-
complete_all(&entity->entity_idle);
1192-
}
1188+
entity = drm_sched_select_entity(sched);
11931189
if (!entity)
11941190
return; /* No more work */
11951191

1192+
sched_job = drm_sched_entity_pop_job(entity);
1193+
if (!sched_job) {
1194+
complete_all(&entity->entity_idle);
1195+
drm_sched_run_job_queue(sched);
1196+
return;
1197+
}
1198+
11961199
s_fence = sched_job->s_fence;
11971200

11981201
atomic_add(sched_job->credits, &sched->credit_count);

0 commit comments

Comments
 (0)