aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0702-drm-amdgpu-optimize-scheduler-fence-handling.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0702-drm-amdgpu-optimize-scheduler-fence-handling.patch')
-rw-r--r--common/recipes-kernel/linux/files/0702-drm-amdgpu-optimize-scheduler-fence-handling.patch160
1 files changed, 0 insertions, 160 deletions
diff --git a/common/recipes-kernel/linux/files/0702-drm-amdgpu-optimize-scheduler-fence-handling.patch b/common/recipes-kernel/linux/files/0702-drm-amdgpu-optimize-scheduler-fence-handling.patch
deleted file mode 100644
index dd2d044e..00000000
--- a/common/recipes-kernel/linux/files/0702-drm-amdgpu-optimize-scheduler-fence-handling.patch
+++ /dev/null
@@ -1,160 +0,0 @@
-From 393a0bd4376a8ecdde079344681a014ec3eb1291 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
-Date: Thu, 5 Nov 2015 12:57:10 +0100
-Subject: [PATCH 0702/1565] drm/amdgpu: optimize scheduler fence handling
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-We only need to wait for jobs to be scheduled when
-the dependency is from the same scheduler.
-
-Signed-off-by: Christian König <christian.koenig@amd.com>
-Reviewed-by: Chunming Zhou <david1.zhou@amd.com>
----
- drivers/gpu/drm/amd/scheduler/gpu_scheduler.c | 51 ++++++++++++++++++++-------
- drivers/gpu/drm/amd/scheduler/gpu_scheduler.h | 5 ++-
- drivers/gpu/drm/amd/scheduler/sched_fence.c | 13 +++++++
- 3 files changed, 55 insertions(+), 14 deletions(-)
-
-diff --git a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
-index ea30d6a..b7cd108 100644
---- a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
-+++ b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
-@@ -211,6 +211,41 @@ static void amd_sched_entity_wakeup(struct fence *f, struct fence_cb *cb)
- amd_sched_wakeup(entity->sched);
- }
-
-+static bool amd_sched_entity_add_dependency_cb(struct amd_sched_entity *entity)
-+{
-+ struct amd_gpu_scheduler *sched = entity->sched;
-+ struct fence * fence = entity->dependency;
-+ struct amd_sched_fence *s_fence;
-+
-+ if (fence->context == entity->fence_context) {
-+ /* We can ignore fences from ourself */
-+ fence_put(entity->dependency);
-+ return false;
-+ }
-+
-+ s_fence = to_amd_sched_fence(fence);
-+ if (s_fence && s_fence->sched == sched) {
-+ /* Fence is from the same scheduler */
-+ if (test_bit(AMD_SCHED_FENCE_SCHEDULED_BIT, &fence->flags)) {
-+ /* Ignore it when it is already scheduled */
-+ fence_put(entity->dependency);
-+ return false;
-+ }
-+
-+ /* Wait for fence to be scheduled */
-+ entity->cb.func = amd_sched_entity_wakeup;
-+ list_add_tail(&entity->cb.node, &s_fence->scheduled_cb);
-+ return true;
-+ }
-+
-+ if (!fence_add_callback(entity->dependency, &entity->cb,
-+ amd_sched_entity_wakeup))
-+ return true;
-+
-+ fence_put(entity->dependency);
-+ return false;
-+}
-+
- static struct amd_sched_job *
- amd_sched_entity_pop_job(struct amd_sched_entity *entity)
- {
-@@ -223,20 +258,9 @@ amd_sched_entity_pop_job(struct amd_sched_entity *entity)
- if (!kfifo_out_peek(&entity->job_queue, &sched_job, sizeof(sched_job)))
- return NULL;
-
-- while ((entity->dependency = sched->ops->dependency(sched_job))) {
--
-- if (entity->dependency->context == entity->fence_context) {
-- /* We can ignore fences from ourself */
-- fence_put(entity->dependency);
-- continue;
-- }
--
-- if (fence_add_callback(entity->dependency, &entity->cb,
-- amd_sched_entity_wakeup))
-- fence_put(entity->dependency);
-- else
-+ while ((entity->dependency = sched->ops->dependency(sched_job)))
-+ if (amd_sched_entity_add_dependency_cb(entity))
- return NULL;
-- }
-
- return sched_job;
- }
-@@ -400,6 +424,7 @@ static int amd_sched_main(void *param)
-
- atomic_inc(&sched->hw_rq_count);
- fence = sched->ops->run_job(sched_job);
-+ amd_sched_fence_scheduled(s_fence);
- if (fence) {
- r = fence_add_callback(fence, &s_fence->cb,
- amd_sched_process_job);
-diff --git a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.h b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.h
-index 939692b..a0f0ae5 100644
---- a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.h
-+++ b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.h
-@@ -27,6 +27,8 @@
- #include <linux/kfifo.h>
- #include <linux/fence.h>
-
-+#define AMD_SCHED_FENCE_SCHEDULED_BIT FENCE_FLAG_USER_BITS
-+
- struct amd_gpu_scheduler;
- struct amd_sched_rq;
-
-@@ -68,6 +70,7 @@ struct amd_sched_rq {
- struct amd_sched_fence {
- struct fence base;
- struct fence_cb cb;
-+ struct list_head scheduled_cb;
- struct amd_gpu_scheduler *sched;
- spinlock_t lock;
- void *owner;
-@@ -134,7 +137,7 @@ void amd_sched_entity_push_job(struct amd_sched_job *sched_job);
-
- struct amd_sched_fence *amd_sched_fence_create(
- struct amd_sched_entity *s_entity, void *owner);
-+void amd_sched_fence_scheduled(struct amd_sched_fence *fence);
- void amd_sched_fence_signal(struct amd_sched_fence *fence);
-
--
- #endif
-diff --git a/drivers/gpu/drm/amd/scheduler/sched_fence.c b/drivers/gpu/drm/amd/scheduler/sched_fence.c
-index 8d2130b..87c78ee 100644
---- a/drivers/gpu/drm/amd/scheduler/sched_fence.c
-+++ b/drivers/gpu/drm/amd/scheduler/sched_fence.c
-@@ -35,6 +35,8 @@ struct amd_sched_fence *amd_sched_fence_create(struct amd_sched_entity *s_entity
- fence = kmem_cache_zalloc(sched_fence_slab, GFP_KERNEL);
- if (fence == NULL)
- return NULL;
-+
-+ INIT_LIST_HEAD(&fence->scheduled_cb);
- fence->owner = owner;
- fence->sched = s_entity->sched;
- spin_lock_init(&fence->lock);
-@@ -55,6 +57,17 @@ void amd_sched_fence_signal(struct amd_sched_fence *fence)
- FENCE_TRACE(&fence->base, "was already signaled\n");
- }
-
-+void amd_sched_fence_scheduled(struct amd_sched_fence *s_fence)
-+{
-+ struct fence_cb *cur, *tmp;
-+
-+ set_bit(AMD_SCHED_FENCE_SCHEDULED_BIT, &s_fence->base.flags);
-+ list_for_each_entry_safe(cur, tmp, &s_fence->scheduled_cb, node) {
-+ list_del_init(&cur->node);
-+ cur->func(&s_fence->base, cur);
-+ }
-+}
-+
- static const char *amd_sched_fence_get_driver_name(struct fence *fence)
- {
- return "amd_sched";
---
-1.9.1
-