aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0666-drm-amdgpu-group-together-common-fence-implementatio.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0666-drm-amdgpu-group-together-common-fence-implementatio.patch')
-rw-r--r--common/recipes-kernel/linux/files/0666-drm-amdgpu-group-together-common-fence-implementatio.patch256
1 files changed, 0 insertions, 256 deletions
diff --git a/common/recipes-kernel/linux/files/0666-drm-amdgpu-group-together-common-fence-implementatio.patch b/common/recipes-kernel/linux/files/0666-drm-amdgpu-group-together-common-fence-implementatio.patch
deleted file mode 100644
index 8c6fedbf..00000000
--- a/common/recipes-kernel/linux/files/0666-drm-amdgpu-group-together-common-fence-implementatio.patch
+++ /dev/null
@@ -1,256 +0,0 @@
-From a95e264254dca5b6bfb331d5902930d0787bd7e1 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
-Date: Tue, 3 Nov 2015 12:21:57 +0100
-Subject: [PATCH 0666/1565] drm/amdgpu: group together common fence
- implementation
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-And also add some missing function documentation. No functional change.
-
-Signed-off-by: Christian König <christian.koenig@amd.com>
-Reviewed-by: Chunming Zhou <david1.zhou@amd.com>
-Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
----
- drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c | 206 ++++++++++++++++--------------
- 1 file changed, 109 insertions(+), 97 deletions(-)
-
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
-index 2c485a2..257d722 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
-@@ -137,42 +137,6 @@ int amdgpu_fence_emit(struct amdgpu_ring *ring, void *owner,
- }
-
- /**
-- * amdgpu_fence_check_signaled - callback from fence_queue
-- *
-- * this function is called with fence_queue lock held, which is also used
-- * for the fence locking itself, so unlocked variants are used for
-- * fence_signal, and remove_wait_queue.
-- */
--static int amdgpu_fence_check_signaled(wait_queue_t *wait, unsigned mode, int flags, void *key)
--{
-- struct amdgpu_fence *fence;
-- struct amdgpu_device *adev;
-- u64 seq;
-- int ret;
--
-- fence = container_of(wait, struct amdgpu_fence, fence_wake);
-- adev = fence->ring->adev;
--
-- /*
-- * We cannot use amdgpu_fence_process here because we're already
-- * in the waitqueue, in a call from wake_up_all.
-- */
-- seq = atomic64_read(&fence->ring->fence_drv.last_seq);
-- if (seq >= fence->seq) {
-- ret = fence_signal_locked(&fence->base);
-- if (!ret)
-- FENCE_TRACE(&fence->base, "signaled from irq context\n");
-- else
-- FENCE_TRACE(&fence->base, "was already signaled\n");
--
-- __remove_wait_queue(&fence->ring->fence_drv.fence_queue, &fence->fence_wake);
-- fence_put(&fence->base);
-- } else
-- FENCE_TRACE(&fence->base, "pending\n");
-- return 0;
--}
--
--/**
- * amdgpu_fence_activity - check for fence activity
- *
- * @ring: pointer to struct amdgpu_ring
-@@ -305,48 +269,6 @@ static bool amdgpu_fence_seq_signaled(struct amdgpu_ring *ring, u64 seq)
- return false;
- }
-
--static bool amdgpu_fence_is_signaled(struct fence *f)
--{
-- struct amdgpu_fence *fence = to_amdgpu_fence(f);
-- struct amdgpu_ring *ring = fence->ring;
--
-- if (atomic64_read(&ring->fence_drv.last_seq) >= fence->seq)
-- return true;
--
-- amdgpu_fence_process(ring);
--
-- if (atomic64_read(&ring->fence_drv.last_seq) >= fence->seq)
-- return true;
--
-- return false;
--}
--
--/**
-- * amdgpu_fence_enable_signaling - enable signalling on fence
-- * @fence: fence
-- *
-- * This function is called with fence_queue lock held, and adds a callback
-- * to fence_queue that checks if this fence is signaled, and if so it
-- * signals the fence and removes itself.
-- */
--static bool amdgpu_fence_enable_signaling(struct fence *f)
--{
-- struct amdgpu_fence *fence = to_amdgpu_fence(f);
-- struct amdgpu_ring *ring = fence->ring;
--
-- if (atomic64_read(&ring->fence_drv.last_seq) >= fence->seq)
-- return false;
--
-- fence->fence_wake.flags = 0;
-- fence->fence_wake.private = NULL;
-- fence->fence_wake.func = amdgpu_fence_check_signaled;
-- __add_wait_queue(&ring->fence_drv.fence_queue, &fence->fence_wake);
-- fence_get(f);
-- amdgpu_fence_schedule_check(ring);
-- FENCE_TRACE(&fence->base, "armed on ring %i!\n", ring->idx);
-- return true;
--}
--
- /*
- * amdgpu_ring_wait_seq_timeout - wait for seq of the specific ring to signal
- * @ring: ring to wait on for the seq number
-@@ -733,6 +655,115 @@ void amdgpu_fence_driver_force_completion(struct amdgpu_device *adev)
- }
- }
-
-+/*
-+ * Common fence implementation
-+ */
-+
-+static const char *amdgpu_fence_get_driver_name(struct fence *fence)
-+{
-+ return "amdgpu";
-+}
-+
-+static const char *amdgpu_fence_get_timeline_name(struct fence *f)
-+{
-+ struct amdgpu_fence *fence = to_amdgpu_fence(f);
-+ return (const char *)fence->ring->name;
-+}
-+
-+/**
-+ * amdgpu_fence_is_signaled - test if fence is signaled
-+ *
-+ * @f: fence to test
-+ *
-+ * Test the fence sequence number if it is already signaled. If it isn't
-+ * signaled start fence processing. Returns True if the fence is signaled.
-+ */
-+static bool amdgpu_fence_is_signaled(struct fence *f)
-+{
-+ struct amdgpu_fence *fence = to_amdgpu_fence(f);
-+ struct amdgpu_ring *ring = fence->ring;
-+
-+ if (atomic64_read(&ring->fence_drv.last_seq) >= fence->seq)
-+ return true;
-+
-+ amdgpu_fence_process(ring);
-+
-+ if (atomic64_read(&ring->fence_drv.last_seq) >= fence->seq)
-+ return true;
-+
-+ return false;
-+}
-+
-+/**
-+ * amdgpu_fence_check_signaled - callback from fence_queue
-+ *
-+ * this function is called with fence_queue lock held, which is also used
-+ * for the fence locking itself, so unlocked variants are used for
-+ * fence_signal, and remove_wait_queue.
-+ */
-+static int amdgpu_fence_check_signaled(wait_queue_t *wait, unsigned mode, int flags, void *key)
-+{
-+ struct amdgpu_fence *fence;
-+ struct amdgpu_device *adev;
-+ u64 seq;
-+ int ret;
-+
-+ fence = container_of(wait, struct amdgpu_fence, fence_wake);
-+ adev = fence->ring->adev;
-+
-+ /*
-+ * We cannot use amdgpu_fence_process here because we're already
-+ * in the waitqueue, in a call from wake_up_all.
-+ */
-+ seq = atomic64_read(&fence->ring->fence_drv.last_seq);
-+ if (seq >= fence->seq) {
-+ ret = fence_signal_locked(&fence->base);
-+ if (!ret)
-+ FENCE_TRACE(&fence->base, "signaled from irq context\n");
-+ else
-+ FENCE_TRACE(&fence->base, "was already signaled\n");
-+
-+ __remove_wait_queue(&fence->ring->fence_drv.fence_queue, &fence->fence_wake);
-+ fence_put(&fence->base);
-+ } else
-+ FENCE_TRACE(&fence->base, "pending\n");
-+ return 0;
-+}
-+
-+/**
-+ * amdgpu_fence_enable_signaling - enable signalling on fence
-+ * @fence: fence
-+ *
-+ * This function is called with fence_queue lock held, and adds a callback
-+ * to fence_queue that checks if this fence is signaled, and if so it
-+ * signals the fence and removes itself.
-+ */
-+static bool amdgpu_fence_enable_signaling(struct fence *f)
-+{
-+ struct amdgpu_fence *fence = to_amdgpu_fence(f);
-+ struct amdgpu_ring *ring = fence->ring;
-+
-+ if (atomic64_read(&ring->fence_drv.last_seq) >= fence->seq)
-+ return false;
-+
-+ fence->fence_wake.flags = 0;
-+ fence->fence_wake.private = NULL;
-+ fence->fence_wake.func = amdgpu_fence_check_signaled;
-+ __add_wait_queue(&ring->fence_drv.fence_queue, &fence->fence_wake);
-+ fence_get(f);
-+ amdgpu_fence_schedule_check(ring);
-+ FENCE_TRACE(&fence->base, "armed on ring %i!\n", ring->idx);
-+ return true;
-+}
-+
-+const struct fence_ops amdgpu_fence_ops = {
-+ .get_driver_name = amdgpu_fence_get_driver_name,
-+ .get_timeline_name = amdgpu_fence_get_timeline_name,
-+ .enable_signaling = amdgpu_fence_enable_signaling,
-+ .signaled = amdgpu_fence_is_signaled,
-+ .wait = fence_default_wait,
-+ .release = NULL,
-+};
-
- /*
- * Fence debugfs
-@@ -783,22 +814,3 @@ int amdgpu_debugfs_fence_init(struct amdgpu_device *adev)
- #endif
- }
-
--static const char *amdgpu_fence_get_driver_name(struct fence *fence)
--{
-- return "amdgpu";
--}
--
--static const char *amdgpu_fence_get_timeline_name(struct fence *f)
--{
-- struct amdgpu_fence *fence = to_amdgpu_fence(f);
-- return (const char *)fence->ring->name;
--}
--
--const struct fence_ops amdgpu_fence_ops = {
-- .get_driver_name = amdgpu_fence_get_driver_name,
-- .get_timeline_name = amdgpu_fence_get_timeline_name,
-- .enable_signaling = amdgpu_fence_enable_signaling,
-- .signaled = amdgpu_fence_is_signaled,
-- .wait = fence_default_wait,
-- .release = NULL,
--};
---
-1.9.1
-