Extract out two copies of the identical code to function epilogue to make
it smaller and more readable.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursu...@igalia.com>
Cc: Christian König <christian.koe...@amd.com>
Cc: Danilo Krummrich <d...@kernel.org>
Cc: Matthew Brost <matthew.br...@intel.com>
Cc: Philipp Stanner <pha...@kernel.org>
---
 drivers/gpu/drm/scheduler/sched_main.c | 48 +++++++++++---------------
 1 file changed, 20 insertions(+), 28 deletions(-)

diff --git a/drivers/gpu/drm/scheduler/sched_main.c 
b/drivers/gpu/drm/scheduler/sched_main.c
index a26cc11c8ade..381f556096af 100644
--- a/drivers/gpu/drm/scheduler/sched_main.c
+++ b/drivers/gpu/drm/scheduler/sched_main.c
@@ -262,38 +262,14 @@ drm_sched_rq_select_entity_rr(struct drm_gpu_scheduler 
*sched,
        entity = rq->current_entity;
        if (entity) {
                list_for_each_entry_continue(entity, &rq->entities, list) {
-                       if (drm_sched_entity_is_ready(entity)) {
-                               /* If we can't queue yet, preserve the current
-                                * entity in terms of fairness.
-                                */
-                               if (!drm_sched_can_queue(sched, entity)) {
-                                       spin_unlock(&rq->lock);
-                                       return ERR_PTR(-ENOSPC);
-                               }
-
-                               rq->current_entity = entity;
-                               reinit_completion(&entity->entity_idle);
-                               spin_unlock(&rq->lock);
-                               return entity;
-                       }
+                       if (drm_sched_entity_is_ready(entity))
+                               goto found;
                }
        }
 
        list_for_each_entry(entity, &rq->entities, list) {
-               if (drm_sched_entity_is_ready(entity)) {
-                       /* If we can't queue yet, preserve the current entity in
-                        * terms of fairness.
-                        */
-                       if (!drm_sched_can_queue(sched, entity)) {
-                               spin_unlock(&rq->lock);
-                               return ERR_PTR(-ENOSPC);
-                       }
-
-                       rq->current_entity = entity;
-                       reinit_completion(&entity->entity_idle);
-                       spin_unlock(&rq->lock);
-                       return entity;
-               }
+               if (drm_sched_entity_is_ready(entity))
+                       goto found;
 
                if (entity == rq->current_entity)
                        break;
@@ -302,6 +278,22 @@ drm_sched_rq_select_entity_rr(struct drm_gpu_scheduler 
*sched,
        spin_unlock(&rq->lock);
 
        return NULL;
+
+found:
+       if (!drm_sched_can_queue(sched, entity)) {
+               /*
+                * If scheduler cannot take more jobs signal the caller to not
+                * consider lower priority queues.
+                */
+               entity = ERR_PTR(-ENOSPC);
+       } else {
+               rq->current_entity = entity;
+               reinit_completion(&entity->entity_idle);
+       }
+
+       spin_unlock(&rq->lock);
+
+       return entity;
 }
 
 /**
-- 
2.48.0

Reply via email to