aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0226-drm-amdgpu-cleanup-amdgpu_sync_rings-V2.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0226-drm-amdgpu-cleanup-amdgpu_sync_rings-V2.patch')
-rw-r--r--common/recipes-kernel/linux/files/0226-drm-amdgpu-cleanup-amdgpu_sync_rings-V2.patch118
1 files changed, 118 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0226-drm-amdgpu-cleanup-amdgpu_sync_rings-V2.patch b/common/recipes-kernel/linux/files/0226-drm-amdgpu-cleanup-amdgpu_sync_rings-V2.patch
new file mode 100644
index 00000000..6e1ff374
--- /dev/null
+++ b/common/recipes-kernel/linux/files/0226-drm-amdgpu-cleanup-amdgpu_sync_rings-V2.patch
@@ -0,0 +1,118 @@
+From 65eeb8fd02011de3e023be0569a727c420ef2340 Mon Sep 17 00:00:00 2001
+From: Chunming Zhou <David1.Zhou@amd.com>
+Date: Fri, 15 Jan 2016 11:12:42 +0800
+Subject: [PATCH 0226/1110] drm/amdgpu: cleanup amdgpu_sync_rings V2
+
+No longer needed now that semaphores are gone.
+
+V2: remove the first amdgpu_sync_wait in amdgpu_ib_schedule
+
+Signed-off-by: Chunming Zhou <David1.Zhou@amd.com>
+Reviewed-by: Ken Wang <Qingqing.Wang@amd.com> (V1)
+Reviewed-by: Monk Liu <monk.liu@amd.com> (V2)
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu.h | 2 --
+ drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c | 10 +++-----
+ drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c | 42 --------------------------------
+ 3 files changed, 3 insertions(+), 51 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+index 2d6e17d..1ab88b5 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+@@ -614,8 +614,6 @@ int amdgpu_sync_resv(struct amdgpu_device *adev,
+ struct amdgpu_sync *sync,
+ struct reservation_object *resv,
+ void *owner);
+-int amdgpu_sync_rings(struct amdgpu_sync *sync,
+- struct amdgpu_ring *ring);
+ struct fence *amdgpu_sync_get_fence(struct amdgpu_sync *sync);
+ int amdgpu_sync_wait(struct amdgpu_sync *sync);
+ void amdgpu_sync_free(struct amdgpu_device *adev, struct amdgpu_sync *sync,
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
+index 9e25eda..3b58d70 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
+@@ -141,11 +141,7 @@ int amdgpu_ib_schedule(struct amdgpu_device *adev, unsigned num_ibs,
+ dev_err(adev->dev, "couldn't schedule ib\n");
+ return -EINVAL;
+ }
+- r = amdgpu_sync_wait(&ibs->sync);
+- if (r) {
+- dev_err(adev->dev, "IB sync failed (%d).\n", r);
+- return r;
+- }
++
+ r = amdgpu_ring_lock(ring, (256 + AMDGPU_NUM_SYNCS * 8) * num_ibs);
+ if (r) {
+ dev_err(adev->dev, "scheduling IB failed (%d).\n", r);
+@@ -161,10 +157,10 @@ int amdgpu_ib_schedule(struct amdgpu_device *adev, unsigned num_ibs,
+ }
+ }
+
+- r = amdgpu_sync_rings(&ibs->sync, ring);
++ r = amdgpu_sync_wait(&ibs->sync);
+ if (r) {
+ amdgpu_ring_unlock_undo(ring);
+- dev_err(adev->dev, "failed to sync rings (%d)\n", r);
++ dev_err(adev->dev, "failed to sync wait (%d)\n", r);
+ return r;
+ }
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
+index a6fee51..7f12a4d 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
+@@ -261,48 +261,6 @@ int amdgpu_sync_wait(struct amdgpu_sync *sync)
+ }
+
+ /**
+- * amdgpu_sync_rings - sync ring to all registered fences
+- *
+- * @sync: sync object to use
+- * @ring: ring that needs sync
+- *
+- * Ensure that all registered fences are signaled before letting
+- * the ring continue. The caller must hold the ring lock.
+- */
+-int amdgpu_sync_rings(struct amdgpu_sync *sync,
+- struct amdgpu_ring *ring)
+-{
+- struct amdgpu_device *adev = ring->adev;
+- int i, r;
+-
+- for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
+- struct amdgpu_ring *other = adev->rings[i];
+- struct amdgpu_fence *fence;
+-
+- if (!sync->sync_to[i])
+- continue;
+-
+- fence = to_amdgpu_fence(sync->sync_to[i]);
+-
+- /* prevent GPU deadlocks */
+- if (!other->ready) {
+- dev_err(adev->dev, "Syncing to a disabled ring!");
+- return -EINVAL;
+- }
+-
+- if (amdgpu_enable_scheduler) {
+- r = fence_wait(sync->sync_to[i], true);
+- if (r)
+- return r;
+- continue;
+- }
+-
+- }
+-
+- return 0;
+-}
+-
+-/**
+ * amdgpu_sync_free - free the sync object
+ *
+ * @adev: amdgpu_device pointer
+--
+2.7.4
+