diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/0696-drm-scheduler-add-new-function-to-get-least-loaded-s.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.19.8/0696-drm-scheduler-add-new-function-to-get-least-loaded-s.patch | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/0696-drm-scheduler-add-new-function-to-get-least-loaded-s.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/0696-drm-scheduler-add-new-function-to-get-least-loaded-s.patch new file mode 100644 index 00000000..6c8a169d --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/0696-drm-scheduler-add-new-function-to-get-least-loaded-s.patch @@ -0,0 +1,62 @@ +From 93efbe785dcae0d47add1d68f03e498aeea55663 Mon Sep 17 00:00:00 2001 +From: Nayan Deshmukh <nayan26deshmukh@gmail.com> +Date: Wed, 1 Aug 2018 13:50:01 +0530 +Subject: [PATCH 0696/2940] drm/scheduler: add new function to get least loaded + sched v2 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The function selects the run queue from the rq_list with the +least load. The load is decided by the number of jobs in a +scheduler. + +v2: avoid using atomic read twice consecutively, instead store + it locally + +Signed-off-by: Nayan Deshmukh <nayan26deshmukh@gmail.com> +Reviewed-by: Christian König <christian.koenig@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/scheduler/gpu_scheduler.c | 25 +++++++++++++++++++++++ + 1 file changed, 25 insertions(+) + +diff --git a/drivers/gpu/drm/scheduler/gpu_scheduler.c b/drivers/gpu/drm/scheduler/gpu_scheduler.c +index d3d8ab454780..cc3b310da2e7 100644 +--- a/drivers/gpu/drm/scheduler/gpu_scheduler.c ++++ b/drivers/gpu/drm/scheduler/gpu_scheduler.c +@@ -241,6 +241,31 @@ static bool drm_sched_entity_is_ready(struct drm_sched_entity *entity) + return true; + } + ++/** ++ * drm_sched_entity_get_free_sched - Get the rq from rq_list with least load ++ * ++ * @entity: scheduler entity ++ * ++ * Return the pointer to the rq with least load. ++ */ ++static struct drm_sched_rq * ++drm_sched_entity_get_free_sched(struct drm_sched_entity *entity) ++{ ++ struct drm_sched_rq *rq = NULL; ++ unsigned int min_jobs = UINT_MAX, num_jobs; ++ int i; ++ ++ for (i = 0; i < entity->num_rq_list; ++i) { ++ num_jobs = atomic_read(&entity->rq_list[i]->sched->num_jobs); ++ if (num_jobs < min_jobs) { ++ min_jobs = num_jobs; ++ rq = entity->rq_list[i]; ++ } ++ } ++ ++ return rq; ++} ++ + static void drm_sched_entity_kill_jobs_cb(struct dma_fence *f, + struct dma_fence_cb *cb) + { +-- +2.17.1 + |