aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0024-drm-amdgpu-add-entity-only-when-first-job-come.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0024-drm-amdgpu-add-entity-only-when-first-job-come.patch')
-rw-r--r--common/recipes-kernel/linux/files/0024-drm-amdgpu-add-entity-only-when-first-job-come.patch67
1 files changed, 67 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0024-drm-amdgpu-add-entity-only-when-first-job-come.patch b/common/recipes-kernel/linux/files/0024-drm-amdgpu-add-entity-only-when-first-job-come.patch
new file mode 100644
index 00000000..659bbaf0
--- /dev/null
+++ b/common/recipes-kernel/linux/files/0024-drm-amdgpu-add-entity-only-when-first-job-come.patch
@@ -0,0 +1,67 @@
+From 090a50215bda6e62ddd9514d6f1ab0ba972b87bd Mon Sep 17 00:00:00 2001
+From: Chunming Zhou <David1.Zhou@amd.com>
+Date: Fri, 11 Dec 2015 18:22:52 +0800
+Subject: [PATCH 0024/1110] drm/amdgpu: add entity only when first job come
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+umd somtimes will create a context for every ring,
+that means some entities wouldn't be used at all.
+
+Signed-off-by: Chunming Zhou <David1.Zhou@amd.com>
+Reviewed-by: Christian König <christian.koenig@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/scheduler/gpu_scheduler.c | 13 ++++++++-----
+ 1 file changed, 8 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
+index 5ace1a7..8b2becd 100644
+--- a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
++++ b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
+@@ -47,6 +47,8 @@ static void amd_sched_rq_init(struct amd_sched_rq *rq)
+ static void amd_sched_rq_add_entity(struct amd_sched_rq *rq,
+ struct amd_sched_entity *entity)
+ {
++ if (!list_empty(&entity->list))
++ return;
+ spin_lock(&rq->lock);
+ list_add_tail(&entity->list, &rq->entities);
+ spin_unlock(&rq->lock);
+@@ -55,6 +57,8 @@ static void amd_sched_rq_add_entity(struct amd_sched_rq *rq,
+ static void amd_sched_rq_remove_entity(struct amd_sched_rq *rq,
+ struct amd_sched_entity *entity)
+ {
++ if (list_empty(&entity->list))
++ return;
+ spin_lock(&rq->lock);
+ list_del_init(&entity->list);
+ if (rq->current_entity == entity)
+@@ -138,9 +142,6 @@ int amd_sched_entity_init(struct amd_gpu_scheduler *sched,
+ atomic_set(&entity->fence_seq, 0);
+ entity->fence_context = fence_context_alloc(1);
+
+- /* Add the entity to the run queue */
+- amd_sched_rq_add_entity(rq, entity);
+-
+ return 0;
+ }
+
+@@ -302,9 +303,11 @@ static bool amd_sched_entity_in(struct amd_sched_job *sched_job)
+ spin_unlock(&entity->queue_lock);
+
+ /* first job wakes up scheduler */
+- if (first)
++ if (first) {
++ /* Add the entity to the run queue */
++ amd_sched_rq_add_entity(entity->rq, entity);
+ amd_sched_wakeup(sched);
+-
++ }
+ return added;
+ }
+
+--
+2.7.4
+