aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/0696-drm-scheduler-add-new-function-to-get-least-loaded-s.patch
diff options
context:
space:
mode:
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.patch62
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
+