Commit f3123c25 authored by Luben Tuikov's avatar Luben Tuikov

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: default avatarLuben Tuikov <ltuikov89@gmail.com>
Fixes: bc8d6a9d ("drm/sched: Don't disturb the entity when in RR-mode scheduling")
Reviewed-by: default avatarDanilo Krummrich <dakr@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20231110000123.72565-2-ltuikov89@gmail.com
parent f415a607
...@@ -370,7 +370,7 @@ static void drm_sched_entity_wakeup(struct dma_fence *f, ...@@ -370,7 +370,7 @@ static void drm_sched_entity_wakeup(struct dma_fence *f,
container_of(cb, struct drm_sched_entity, cb); container_of(cb, struct drm_sched_entity, cb);
drm_sched_entity_clear_dep(f, cb); drm_sched_entity_clear_dep(f, cb);
drm_sched_wakeup(entity->rq->sched); drm_sched_wakeup(entity->rq->sched, entity);
} }
/** /**
...@@ -602,7 +602,7 @@ void drm_sched_entity_push_job(struct drm_sched_job *sched_job) ...@@ -602,7 +602,7 @@ void drm_sched_entity_push_job(struct drm_sched_job *sched_job)
if (drm_sched_policy == DRM_SCHED_POLICY_FIFO) if (drm_sched_policy == DRM_SCHED_POLICY_FIFO)
drm_sched_rq_update_fifo(entity, submit_ts); drm_sched_rq_update_fifo(entity, submit_ts);
drm_sched_wakeup(entity->rq->sched); drm_sched_wakeup(entity->rq->sched, entity);
} }
} }
EXPORT_SYMBOL(drm_sched_entity_push_job); EXPORT_SYMBOL(drm_sched_entity_push_job);
...@@ -925,10 +925,12 @@ static bool drm_sched_can_queue(struct drm_gpu_scheduler *sched) ...@@ -925,10 +925,12 @@ static bool drm_sched_can_queue(struct drm_gpu_scheduler *sched)
* *
* Wake up the scheduler if we can queue jobs. * Wake up the scheduler if we can queue jobs.
*/ */
void drm_sched_wakeup(struct drm_gpu_scheduler *sched) void drm_sched_wakeup(struct drm_gpu_scheduler *sched,
struct drm_sched_entity *entity)
{ {
if (drm_sched_can_queue(sched)) if (drm_sched_entity_is_ready(entity))
drm_sched_run_job_queue(sched); if (drm_sched_can_queue(sched))
drm_sched_run_job_queue(sched);
} }
/** /**
......
...@@ -559,7 +559,7 @@ void drm_sched_entity_modify_sched(struct drm_sched_entity *entity, ...@@ -559,7 +559,7 @@ void drm_sched_entity_modify_sched(struct drm_sched_entity *entity,
void drm_sched_tdr_queue_imm(struct drm_gpu_scheduler *sched); void drm_sched_tdr_queue_imm(struct drm_gpu_scheduler *sched);
void drm_sched_job_cleanup(struct drm_sched_job *job); void drm_sched_job_cleanup(struct drm_sched_job *job);
void drm_sched_wakeup(struct drm_gpu_scheduler *sched); void drm_sched_wakeup(struct drm_gpu_scheduler *sched, struct drm_sched_entity *entity);
bool drm_sched_wqueue_ready(struct drm_gpu_scheduler *sched); bool drm_sched_wqueue_ready(struct drm_gpu_scheduler *sched);
void drm_sched_wqueue_stop(struct drm_gpu_scheduler *sched); void drm_sched_wqueue_stop(struct drm_gpu_scheduler *sched);
void drm_sched_wqueue_start(struct drm_gpu_scheduler *sched); void drm_sched_wqueue_start(struct drm_gpu_scheduler *sched);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment