aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0643-drm-amdgpu-move-ring_from_fence-to-common-code.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0643-drm-amdgpu-move-ring_from_fence-to-common-code.patch')
-rw-r--r--common/recipes-kernel/linux/files/0643-drm-amdgpu-move-ring_from_fence-to-common-code.patch116
1 files changed, 116 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0643-drm-amdgpu-move-ring_from_fence-to-common-code.patch b/common/recipes-kernel/linux/files/0643-drm-amdgpu-move-ring_from_fence-to-common-code.patch
new file mode 100644
index 00000000..13c00bad
--- /dev/null
+++ b/common/recipes-kernel/linux/files/0643-drm-amdgpu-move-ring_from_fence-to-common-code.patch
@@ -0,0 +1,116 @@
+From d220693b832396002fe10d3f019b6dd909f9ff7c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
+Date: Thu, 22 Oct 2015 11:29:33 +0200
+Subject: [PATCH 0643/1050] drm/amdgpu: move ring_from_fence to common code
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Going to need that elsewhere as well.
+
+Signed-off-by: Christian König <christian.koenig@amd.com>
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 +
+ drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 24 ++++++++++++++++++++++++
+ drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c | 23 ++---------------------
+ 3 files changed, 27 insertions(+), 21 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+index 63cf48e..d23d211 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+@@ -1231,6 +1231,7 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring,
+ struct amdgpu_irq_src *irq_src, unsigned irq_type,
+ enum amdgpu_ring_type ring_type);
+ void amdgpu_ring_fini(struct amdgpu_ring *ring);
++struct amdgpu_ring *amdgpu_ring_from_fence(struct fence *f);
+
+ /*
+ * CS.
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
+index b2df348..78e9b0f 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
+@@ -436,6 +436,30 @@ void amdgpu_ring_fini(struct amdgpu_ring *ring)
+ }
+ }
+
++/**
++ * amdgpu_ring_from_fence - get ring from fence
++ *
++ * @f: fence structure
++ *
++ * Extract the ring a fence belongs to. Handles both scheduler as
++ * well as hardware fences.
++ */
++struct amdgpu_ring *amdgpu_ring_from_fence(struct fence *f)
++{
++ struct amdgpu_fence *a_fence;
++ struct amd_sched_fence *s_fence;
++
++ s_fence = to_amd_sched_fence(f);
++ if (s_fence)
++ return container_of(s_fence->sched, struct amdgpu_ring, sched);
++
++ a_fence = to_amdgpu_fence(f);
++ if (a_fence)
++ return a_fence->ring;
++
++ return NULL;
++}
++
+ /*
+ * Debugfs info
+ */
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c
+index 3f48759..0212b31 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c
+@@ -139,25 +139,6 @@ int amdgpu_sa_bo_manager_suspend(struct amdgpu_device *adev,
+ return r;
+ }
+
+-static uint32_t amdgpu_sa_get_ring_from_fence(struct fence *f)
+-{
+- struct amdgpu_fence *a_fence;
+- struct amd_sched_fence *s_fence;
+-
+- s_fence = to_amd_sched_fence(f);
+- if (s_fence) {
+- struct amdgpu_ring *ring;
+-
+- ring = container_of(s_fence->sched, struct amdgpu_ring, sched);
+- return ring->idx;
+- }
+-
+- a_fence = to_amdgpu_fence(f);
+- if (a_fence)
+- return a_fence->ring->idx;
+- return 0;
+-}
+-
+ static void amdgpu_sa_bo_remove_locked(struct amdgpu_sa_bo *sa_bo)
+ {
+ struct amdgpu_sa_manager *sa_manager = sa_bo->manager;
+@@ -318,7 +299,7 @@ static bool amdgpu_sa_bo_next_hole(struct amdgpu_sa_manager *sa_manager,
+ }
+
+ if (best_bo) {
+- uint32_t idx = amdgpu_sa_get_ring_from_fence(best_bo->fence);
++ uint32_t idx = amdgpu_ring_from_fence(best_bo->fence)->idx;
+ ++tries[idx];
+ sa_manager->hole = best_bo->olist.prev;
+
+@@ -412,7 +393,7 @@ void amdgpu_sa_bo_free(struct amdgpu_device *adev, struct amdgpu_sa_bo **sa_bo,
+ if (fence && !fence_is_signaled(fence)) {
+ uint32_t idx;
+ (*sa_bo)->fence = fence_get(fence);
+- idx = amdgpu_sa_get_ring_from_fence(fence);
++ idx = amdgpu_ring_from_fence(fence)->idx;
+ list_add_tail(&(*sa_bo)->flist, &sa_manager->flist[idx]);
+ } else {
+ amdgpu_sa_bo_remove_locked(*sa_bo);
+--
+1.9.1
+