aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0032-drm-scheduler-fix-setting-the-priorty-for-entities-v.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0032-drm-scheduler-fix-setting-the-priorty-for-entities-v.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0032-drm-scheduler-fix-setting-the-priorty-for-entities-v.patch121
1 files changed, 121 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0032-drm-scheduler-fix-setting-the-priorty-for-entities-v.patch b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0032-drm-scheduler-fix-setting-the-priorty-for-entities-v.patch
new file mode 100644
index 00000000..320584d8
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0032-drm-scheduler-fix-setting-the-priorty-for-entities-v.patch
@@ -0,0 +1,121 @@
+From d83db65ede72d48f2b9c1cd07709c6d3a70e821d Mon Sep 17 00:00:00 2001
+From: Christian Koenig <christian.koenig@amd.com>
+Date: Wed, 1 Aug 2018 16:22:39 +0200
+Subject: [PATCH 0032/2940] drm/scheduler: fix setting the priorty for entities
+ (v2)
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Since we now deal with multiple rq we need to update all of them, not
+just the current one.
+
+v2: Trivial: Removed unused variable (Alex)
+
+Signed-off-by: Christian König <christian.koenig@amd.com>
+Acked-by: Nayan Deshmukh <nayan26deshmukh@gmail.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Kalyan Alle <kalyan.alle@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c | 4 +--
+ drivers/gpu/drm/scheduler/gpu_scheduler.c | 35 +++++++++++++++++++++++
+ include/drm/gpu_scheduler.h | 4 +++
+ 3 files changed, 40 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
+index df6965761046..02d563cfb4a7 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
+@@ -394,7 +394,6 @@ void amdgpu_ctx_priority_override(struct amdgpu_ctx *ctx,
+ {
+ int i;
+ struct amdgpu_device *adev = ctx->adev;
+- struct drm_sched_rq *rq;
+ struct drm_sched_entity *entity;
+ struct amdgpu_ring *ring;
+ enum drm_sched_priority ctx_prio;
+@@ -407,12 +406,11 @@ void amdgpu_ctx_priority_override(struct amdgpu_ctx *ctx,
+ for (i = 0; i < adev->num_rings; i++) {
+ ring = adev->rings[i];
+ entity = &ctx->rings[i].entity;
+- rq = &ring->sched.sched_rq[ctx_prio];
+
+ if (ring->funcs->type == AMDGPU_RING_TYPE_KIQ)
+ continue;
+
+- drm_sched_entity_set_rq(entity, rq);
++ drm_sched_entity_set_priority(entity, ctx_prio);
+ }
+ }
+
+diff --git a/drivers/gpu/drm/scheduler/gpu_scheduler.c b/drivers/gpu/drm/scheduler/gpu_scheduler.c
+index 4fc211e19d6e..051cd8650f06 100644
+--- a/drivers/gpu/drm/scheduler/gpu_scheduler.c
++++ b/drivers/gpu/drm/scheduler/gpu_scheduler.c
+@@ -382,6 +382,41 @@ static void drm_sched_entity_clear_dep(struct dma_fence *f, struct dma_fence_cb
+ dma_fence_put(f);
+ }
+
++/**
++ * drm_sched_entity_set_rq_priority - helper for drm_sched_entity_set_priority
++ */
++static void drm_sched_entity_set_rq_priority(struct drm_sched_rq **rq,
++ enum drm_sched_priority priority)
++{
++ *rq = &(*rq)->sched->sched_rq[priority];
++}
++
++/**
++ * drm_sched_entity_set_priority - Sets priority of the entity
++ *
++ * @entity: scheduler entity
++ * @priority: scheduler priority
++ *
++ * Update the priority of runqueus used for the entity.
++ */
++void drm_sched_entity_set_priority(struct drm_sched_entity *entity,
++ enum drm_sched_priority priority)
++{
++ unsigned int i;
++
++ spin_lock(&entity->rq_lock);
++
++ for (i = 0; i < entity->num_rq_list; ++i)
++ drm_sched_entity_set_rq_priority(&entity->rq_list[i], priority);
++
++ drm_sched_rq_remove_entity(entity->rq, entity);
++ drm_sched_entity_set_rq_priority(&entity->rq, priority);
++ drm_sched_rq_add_entity(entity->rq, entity);
++
++ spin_unlock(&entity->rq_lock);
++}
++EXPORT_SYMBOL(drm_sched_entity_set_priority);
++
+ /**
+ * drm_sched_entity_set_rq - Sets the run queue for an entity
+ *
+diff --git a/include/drm/gpu_scheduler.h b/include/drm/gpu_scheduler.h
+index 21c648b0b2a1..14c5ccbe8bba 100644
+--- a/include/drm/gpu_scheduler.h
++++ b/include/drm/gpu_scheduler.h
+@@ -75,6 +75,8 @@ enum drm_sched_priority {
+ struct drm_sched_entity {
+ struct list_head list;
+ struct drm_sched_rq *rq;
++ struct drm_sched_rq **rq_list;
++ unsigned int num_rq_list;
+ spinlock_t rq_lock;
+
+ struct spsc_queue job_queue;
+@@ -291,6 +293,8 @@ void drm_sched_entity_fini(struct drm_sched_entity *entity);
+ void drm_sched_entity_destroy(struct drm_sched_entity *entity);
+ void drm_sched_entity_push_job(struct drm_sched_job *sched_job,
+ struct drm_sched_entity *entity);
++void drm_sched_entity_set_priority(struct drm_sched_entity *entity,
++ enum drm_sched_priority priority);
+ void drm_sched_entity_set_rq(struct drm_sched_entity *entity,
+ struct drm_sched_rq *rq);
+
+--
+2.17.1
+