Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

drm/sched: Qualify drm_sched_wakeup() by drm_sched_entity_is_ready()

Don't "wake up" the GPU scheduler unless the entity is ready, as well as we
can queue to the scheduler, i.e. there is no point in waking up the scheduler
for the entity unless the entity is ready.

Signed-off-by: Luben Tuikov <ltuikov89@gmail.com>
Fixes: bc8d6a9df99038 ("drm/sched: Don't disturb the entity when in RR-mode scheduling")
Reviewed-by: Danilo Krummrich <dakr@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20231110000123.72565-2-ltuikov89@gmail.com

+8 -6
+2 -2
drivers/gpu/drm/scheduler/sched_entity.c
··· 370 370 container_of(cb, struct drm_sched_entity, cb); 371 371 372 372 drm_sched_entity_clear_dep(f, cb); 373 - drm_sched_wakeup(entity->rq->sched); 373 + drm_sched_wakeup(entity->rq->sched, entity); 374 374 } 375 375 376 376 /** ··· 602 602 if (drm_sched_policy == DRM_SCHED_POLICY_FIFO) 603 603 drm_sched_rq_update_fifo(entity, submit_ts); 604 604 605 - drm_sched_wakeup(entity->rq->sched); 605 + drm_sched_wakeup(entity->rq->sched, entity); 606 606 } 607 607 } 608 608 EXPORT_SYMBOL(drm_sched_entity_push_job);
+5 -3
drivers/gpu/drm/scheduler/sched_main.c
··· 925 925 * 926 926 * Wake up the scheduler if we can queue jobs. 927 927 */ 928 - void drm_sched_wakeup(struct drm_gpu_scheduler *sched) 928 + void drm_sched_wakeup(struct drm_gpu_scheduler *sched, 929 + struct drm_sched_entity *entity) 929 930 { 930 - if (drm_sched_can_queue(sched)) 931 - drm_sched_run_job_queue(sched); 931 + if (drm_sched_entity_is_ready(entity)) 932 + if (drm_sched_can_queue(sched)) 933 + drm_sched_run_job_queue(sched); 932 934 } 933 935 934 936 /**
+1 -1
include/drm/gpu_scheduler.h
··· 559 559 560 560 void drm_sched_tdr_queue_imm(struct drm_gpu_scheduler *sched); 561 561 void drm_sched_job_cleanup(struct drm_sched_job *job); 562 - void drm_sched_wakeup(struct drm_gpu_scheduler *sched); 562 + void drm_sched_wakeup(struct drm_gpu_scheduler *sched, struct drm_sched_entity *entity); 563 563 bool drm_sched_wqueue_ready(struct drm_gpu_scheduler *sched); 564 564 void drm_sched_wqueue_stop(struct drm_gpu_scheduler *sched); 565 565 void drm_sched_wqueue_start(struct drm_gpu_scheduler *sched);