aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0645-drm-amdgpu-use-the-new-fence_is_later.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0645-drm-amdgpu-use-the-new-fence_is_later.patch')
-rw-r--r--common/recipes-kernel/linux/files/0645-drm-amdgpu-use-the-new-fence_is_later.patch78
1 files changed, 78 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0645-drm-amdgpu-use-the-new-fence_is_later.patch b/common/recipes-kernel/linux/files/0645-drm-amdgpu-use-the-new-fence_is_later.patch
new file mode 100644
index 00000000..d15ef789
--- /dev/null
+++ b/common/recipes-kernel/linux/files/0645-drm-amdgpu-use-the-new-fence_is_later.patch
@@ -0,0 +1,78 @@
+From 5598355afc3f374d6294be77a0607bc5c49ada3e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
+Date: Thu, 22 Oct 2015 10:53:16 +0200
+Subject: [PATCH 0645/1050] drm/amdgpu: use the new fence_is_later
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Instead of coding the check ourself.
+
+Signed-off-by: Christian König <christian.koenig@amd.com>
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c | 30 +++++++++++++-----------------
+ 1 file changed, 13 insertions(+), 17 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
+index 4921de1..0499d2b 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
+@@ -87,6 +87,15 @@ static bool amdgpu_sync_test_owner(struct fence *f, void *owner)
+ return false;
+ }
+
++static void amdgpu_sync_keep_later(struct fence **keep, struct fence *fence)
++{
++ if (*keep && fence_is_later(*keep, fence))
++ return;
++
++ fence_put(*keep);
++ *keep = fence_get(fence);
++}
++
+ /**
+ * amdgpu_sync_fence - remember to sync to this fence
+ *
+@@ -100,34 +109,21 @@ int amdgpu_sync_fence(struct amdgpu_device *adev, struct amdgpu_sync *sync,
+ struct amdgpu_sync_entry *e;
+ struct amdgpu_fence *fence;
+ struct amdgpu_fence *other;
+- struct fence *tmp, *later;
+
+ if (!f)
+ return 0;
+
+ if (amdgpu_sync_same_dev(adev, f) &&
+- amdgpu_sync_test_owner(f, AMDGPU_FENCE_OWNER_VM)) {
+- if (sync->last_vm_update) {
+- tmp = sync->last_vm_update;
+- BUG_ON(f->context != tmp->context);
+- later = (f->seqno - tmp->seqno <= INT_MAX) ? f : tmp;
+- sync->last_vm_update = fence_get(later);
+- fence_put(tmp);
+- } else
+- sync->last_vm_update = fence_get(f);
+- }
++ amdgpu_sync_test_owner(f, AMDGPU_FENCE_OWNER_VM))
++ amdgpu_sync_keep_later(&sync->last_vm_update, f);
+
+ fence = to_amdgpu_fence(f);
+ if (!fence || fence->ring->adev != adev) {
+ hash_for_each_possible(sync->fences, e, node, f->context) {
+- struct fence *new;
+ if (unlikely(e->fence->context != f->context))
+ continue;
+- new = fence_get(fence_later(e->fence, f));
+- if (new) {
+- fence_put(e->fence);
+- e->fence = new;
+- }
++
++ amdgpu_sync_keep_later(&e->fence, f);
+ return 0;
+ }
+
+--
+1.9.1
+