If the hardware queue for a scheduler is empty then we don't need to the shift the entities from their current scheduler as they are not getting scheduled because of some dependency. Signed-off-by: Nayan Deshmukh <nayan26deshmukh@xxxxxxxxx> --- drivers/gpu/drm/scheduler/sched_entity.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/drivers/gpu/drm/scheduler/sched_entity.c b/drivers/gpu/drm/scheduler/sched_entity.c index 3e22a54a99c2..4d18497d6ecf 100644 --- a/drivers/gpu/drm/scheduler/sched_entity.c +++ b/drivers/gpu/drm/scheduler/sched_entity.c @@ -130,6 +130,12 @@ drm_sched_entity_get_free_sched(struct drm_sched_entity *entity) int i; for (i = 0; i < entity->num_rq_list; ++i) { + if (atomic_read(&entity->rq_list[i]->sched->hw_rq_count) < + entity->rq_list[i]->sched->hw_submission_limit) { + rq = entity->rq_list[i]; + break; + } + num_jobs = atomic_read(&entity->rq_list[i]->sched->num_jobs); if (num_jobs < min_jobs) { min_jobs = num_jobs; @@ -470,6 +476,14 @@ void drm_sched_entity_select_rq(struct drm_sched_entity *entity) if (spsc_queue_count(&entity->job_queue) || entity->num_rq_list <= 1) return; + /* + * We don't need to shift entity if the hardware + * queue of current scheduler is empty + */ + if (atomic_read(&entity->rq->sched->hw_rq_count) < + entity->rq->sched->hw_submission_limit) + return; + fence = READ_ONCE(entity->last_scheduled); if (fence && !dma_fence_is_signaled(fence)) return; -- 2.14.3 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel