aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0513-drm-amdgpu-re-work-sync_resv.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0513-drm-amdgpu-re-work-sync_resv.patch')
-rw-r--r--meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0513-drm-amdgpu-re-work-sync_resv.patch77
1 files changed, 77 insertions, 0 deletions
diff --git a/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0513-drm-amdgpu-re-work-sync_resv.patch b/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0513-drm-amdgpu-re-work-sync_resv.patch
new file mode 100644
index 00000000..be13fc6f
--- /dev/null
+++ b/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0513-drm-amdgpu-re-work-sync_resv.patch
@@ -0,0 +1,77 @@
+From 423a9480add9d9afba035d3c2617034d5f766065 Mon Sep 17 00:00:00 2001
+From: Chunming Zhou <david1.zhou@amd.com>
+Date: Mon, 24 Aug 2015 16:59:54 +0800
+Subject: [PATCH 0513/1050] drm/amdgpu: re-work sync_resv
+
+sync_resv is to handle both amdgpu_fence and sched_fence.
+
+Signed-off-by: Chunming Zhou <david1.zhou@amd.com>
+Reviewed-by: Jammy Zhou <Jammy.Zhou@amd.com>
+Reviewed-by: Christian K?nig <christian.koenig@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c | 24 ++++++++++++++++++------
+ 1 file changed, 18 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
+index 69b7d45..068aeaf 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
+@@ -142,6 +142,18 @@ int amdgpu_sync_fence(struct amdgpu_device *adev, struct amdgpu_sync *sync,
+ return 0;
+ }
+
++static void *amdgpu_sync_get_owner(struct fence *f)
++{
++ struct amdgpu_fence *a_fence = to_amdgpu_fence(f);
++ struct amd_sched_fence *s_fence = to_amd_sched_fence(f);
++
++ if (s_fence)
++ return s_fence->owner;
++ else if (a_fence)
++ return a_fence->owner;
++ return AMDGPU_FENCE_OWNER_UNDEFINED;
++}
++
+ /**
+ * amdgpu_sync_resv - use the semaphores to sync to a reservation object
+ *
+@@ -158,7 +170,7 @@ int amdgpu_sync_resv(struct amdgpu_device *adev,
+ {
+ struct reservation_object_list *flist;
+ struct fence *f;
+- struct amdgpu_fence *fence;
++ void *fence_owner;
+ unsigned i;
+ int r = 0;
+
+@@ -176,22 +188,22 @@ int amdgpu_sync_resv(struct amdgpu_device *adev,
+ for (i = 0; i < flist->shared_count; ++i) {
+ f = rcu_dereference_protected(flist->shared[i],
+ reservation_object_held(resv));
+- fence = f ? to_amdgpu_fence(f) : NULL;
+- if (fence && fence->ring->adev == adev) {
++ if (amdgpu_sync_same_dev(adev, f)) {
+ /* VM updates are only interesting
+ * for other VM updates and moves.
+ */
++ fence_owner = amdgpu_sync_get_owner(f);
+ if ((owner != AMDGPU_FENCE_OWNER_MOVE) &&
+- (fence->owner != AMDGPU_FENCE_OWNER_MOVE) &&
++ (fence_owner != AMDGPU_FENCE_OWNER_MOVE) &&
+ ((owner == AMDGPU_FENCE_OWNER_VM) !=
+- (fence->owner == AMDGPU_FENCE_OWNER_VM)))
++ (fence_owner == AMDGPU_FENCE_OWNER_VM)))
+ continue;
+
+ /* Ignore fence from the same owner as
+ * long as it isn't undefined.
+ */
+ if (owner != AMDGPU_FENCE_OWNER_UNDEFINED &&
+- fence->owner == owner)
++ fence_owner == owner)
+ continue;
+ }
+
+--
+1.9.1
+