drm_sched_pick_best return best selecetd ring schedul list's address.

Signed-off-by: James Zhu <james....@amd.com>
---
 drivers/gpu/drm/scheduler/sched_entity.c |  2 +-
 drivers/gpu/drm/scheduler/sched_main.c   | 14 ++++++++------
 2 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/scheduler/sched_entity.c 
b/drivers/gpu/drm/scheduler/sched_entity.c
index 191c56064f19..f5595607995b 100644
--- a/drivers/gpu/drm/scheduler/sched_entity.c
+++ b/drivers/gpu/drm/scheduler/sched_entity.c
@@ -475,7 +475,7 @@ void drm_sched_entity_select_rq(struct drm_sched_entity 
*entity)
                return;
 
        spin_lock(&entity->rq_lock);
-       sched = drm_sched_pick_best(entity->sched_list, entity->num_sched_list);
+       sched = *drm_sched_pick_best(entity->sched_list, 
entity->num_sched_list);
        rq = sched ? &sched->sched_rq[entity->priority] : NULL;
        if (rq != entity->rq) {
                drm_sched_rq_remove_entity(entity->rq, entity);
diff --git a/drivers/gpu/drm/scheduler/sched_main.c 
b/drivers/gpu/drm/scheduler/sched_main.c
index 68317d3a7a27..111277f6c53c 100644
--- a/drivers/gpu/drm/scheduler/sched_main.c
+++ b/drivers/gpu/drm/scheduler/sched_main.c
@@ -863,12 +863,12 @@ drm_sched_get_cleanup_job(struct drm_gpu_scheduler *sched)
  * Returns pointer of the sched with the least load or NULL if none of the
  * drm_gpu_schedulers are ready
  */
-struct drm_gpu_scheduler *
+struct drm_gpu_scheduler **
 drm_sched_pick_best(struct drm_gpu_scheduler **sched_list,
                     unsigned int num_sched_list)
 {
-       struct drm_gpu_scheduler *sched, *picked_sched = NULL;
-       int i;
+       struct drm_gpu_scheduler *sched;
+       int i, picked_idx = -1;
        unsigned int min_score = UINT_MAX, num_score;
 
        for (i = 0; i < num_sched_list; ++i) {
@@ -883,11 +883,13 @@ drm_sched_pick_best(struct drm_gpu_scheduler **sched_list,
                num_score = atomic_read(sched->score);
                if (num_score < min_score) {
                        min_score = num_score;
-                       picked_sched = sched;
+                       picked_idx = i;
                }
        }
-
-       return picked_sched;
+       if (picked_idx != -1)
+               return &(sched_list[picked_idx]);
+       else
+               return (struct drm_gpu_scheduler **)(NULL);
 }
 EXPORT_SYMBOL(drm_sched_pick_best);
 
-- 
2.25.1

Reply via email to