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 <[email protected]> Reviewed-by: Christian König <[email protected]> Fixes: 66dbd90 ("drm/sched: Drain all entities in DRM sched run job worker") Reviewed-by: Luben Tuikov <[email protected]> Signed-off-by: Dave Airlie <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent 54be6c6 commit d0399da

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

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)