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

Signed-off-by: Tvrtko Ursulin <[email protected]>
Cc: Christian König <[email protected]>
Cc: Danilo Krummrich <[email protected]>
Cc: Matthew Brost <[email protected]>
Cc: Philipp Stanner <[email protected]>
---
 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 8375053aa126..06b06987129d 100644
--- a/drivers/gpu/drm/scheduler/sched_main.c
+++ b/drivers/gpu/drm/scheduler/sched_main.c
@@ -267,38 +267,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;
@@ -307,6 +283,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.47.1

Reply via email to