aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0648-drm-amdgpu-switch-to-common-fence_wait_any_timeout-v.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0648-drm-amdgpu-switch-to-common-fence_wait_any_timeout-v.patch')
-rw-r--r--common/recipes-kernel/linux/files/0648-drm-amdgpu-switch-to-common-fence_wait_any_timeout-v.patch186
1 files changed, 0 insertions, 186 deletions
diff --git a/common/recipes-kernel/linux/files/0648-drm-amdgpu-switch-to-common-fence_wait_any_timeout-v.patch b/common/recipes-kernel/linux/files/0648-drm-amdgpu-switch-to-common-fence_wait_any_timeout-v.patch
deleted file mode 100644
index ab756142..00000000
--- a/common/recipes-kernel/linux/files/0648-drm-amdgpu-switch-to-common-fence_wait_any_timeout-v.patch
+++ /dev/null
@@ -1,186 +0,0 @@
-From ee327caf1a2cdba9313167c36db2d7ff02d534bc Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
-Date: Tue, 20 Oct 2015 17:38:07 +0200
-Subject: [PATCH 0648/1565] drm/amdgpu: switch to common fence_wait_any_timeout
- v2
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-No need to duplicate the functionality any more.
-
-v2: fix handling if no fence is available.
-
-Signed-off-by: Christian König <christian.koenig@amd.com>
-Reviewed-by: Alex Deucher <alexander.deucher@amd.com> (v1)
----
- drivers/gpu/drm/amd/amdgpu/amdgpu.h | 4 --
- drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c | 98 -------------------------------
- drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c | 20 ++++---
- 3 files changed, 13 insertions(+), 109 deletions(-)
-
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
-index a9c0def..dd7d2ce 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
-@@ -447,10 +447,6 @@ int amdgpu_fence_wait_next(struct amdgpu_ring *ring);
- int amdgpu_fence_wait_empty(struct amdgpu_ring *ring);
- unsigned amdgpu_fence_count_emitted(struct amdgpu_ring *ring);
-
--signed long amdgpu_fence_wait_any(struct fence **array,
-- uint32_t count,
-- bool intr,
-- signed long t);
- struct amdgpu_fence *amdgpu_fence_ref(struct amdgpu_fence *fence);
- void amdgpu_fence_unref(struct amdgpu_fence **fence);
-
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
-index 663caa9..c4bb282 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
-@@ -822,104 +822,6 @@ static const char *amdgpu_fence_get_timeline_name(struct fence *f)
- return (const char *)fence->ring->name;
- }
-
--static bool amdgpu_test_signaled_any(struct fence **fences, uint32_t count)
--{
-- int idx;
-- struct fence *fence;
--
-- for (idx = 0; idx < count; ++idx) {
-- fence = fences[idx];
-- if (fence) {
-- if (test_bit(FENCE_FLAG_SIGNALED_BIT, &fence->flags))
-- return true;
-- }
-- }
-- return false;
--}
--
--struct amdgpu_wait_cb {
-- struct fence_cb base;
-- struct task_struct *task;
--};
--
--static void amdgpu_fence_wait_cb(struct fence *fence, struct fence_cb *cb)
--{
-- struct amdgpu_wait_cb *wait =
-- container_of(cb, struct amdgpu_wait_cb, base);
-- wake_up_process(wait->task);
--}
--
--/**
-- * Wait the fence array with timeout
-- *
-- * @array: the fence array with amdgpu fence pointer
-- * @count: the number of the fence array
-- * @intr: when sleep, set the current task interruptable or not
-- * @t: timeout to wait
-- *
-- * It will return when any fence is signaled or timeout.
-- */
--signed long amdgpu_fence_wait_any(struct fence **array, uint32_t count,
-- bool intr, signed long t)
--{
-- struct amdgpu_wait_cb *cb;
-- struct fence *fence;
-- unsigned idx;
--
-- BUG_ON(!array);
--
-- cb = kcalloc(count, sizeof(struct amdgpu_wait_cb), GFP_KERNEL);
-- if (cb == NULL) {
-- t = -ENOMEM;
-- goto err_free_cb;
-- }
--
-- for (idx = 0; idx < count; ++idx) {
-- fence = array[idx];
-- if (fence) {
-- cb[idx].task = current;
-- if (fence_add_callback(fence,
-- &cb[idx].base, amdgpu_fence_wait_cb)) {
-- /* The fence is already signaled */
-- goto fence_rm_cb;
-- }
-- }
-- }
--
-- while (t > 0) {
-- if (intr)
-- set_current_state(TASK_INTERRUPTIBLE);
-- else
-- set_current_state(TASK_UNINTERRUPTIBLE);
--
-- /*
-- * amdgpu_test_signaled_any must be called after
-- * set_current_state to prevent a race with wake_up_process
-- */
-- if (amdgpu_test_signaled_any(array, count))
-- break;
--
-- t = schedule_timeout(t);
--
-- if (t > 0 && intr && signal_pending(current))
-- t = -ERESTARTSYS;
-- }
--
-- __set_current_state(TASK_RUNNING);
--
--fence_rm_cb:
-- for (idx = 0; idx < count; ++idx) {
-- fence = array[idx];
-- if (fence && cb[idx].base.func)
-- fence_remove_callback(fence, &cb[idx].base);
-- }
--
--err_free_cb:
-- kfree(cb);
--
-- return t;
--}
--
- const struct fence_ops amdgpu_fence_ops = {
- .get_driver_name = amdgpu_fence_get_driver_name,
- .get_timeline_name = amdgpu_fence_get_timeline_name,
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c
-index 5cb27d5..3f48759 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c
-@@ -337,6 +337,7 @@ int amdgpu_sa_bo_new(struct amdgpu_device *adev,
- {
- struct fence *fences[AMDGPU_MAX_RINGS];
- unsigned tries[AMDGPU_MAX_RINGS];
-+ unsigned count;
- int i, r;
- signed long t;
-
-@@ -371,13 +372,18 @@ int amdgpu_sa_bo_new(struct amdgpu_device *adev,
- /* see if we can skip over some allocations */
- } while (amdgpu_sa_bo_next_hole(sa_manager, fences, tries));
-
-- spin_unlock(&sa_manager->wq.lock);
-- t = amdgpu_fence_wait_any(fences, AMDGPU_MAX_RINGS,
-- false, MAX_SCHEDULE_TIMEOUT);
-- r = (t > 0) ? 0 : t;
-- spin_lock(&sa_manager->wq.lock);
-- /* if we have nothing to wait for block */
-- if (r == -ENOENT) {
-+ for (i = 0, count = 0; i < AMDGPU_MAX_RINGS; ++i)
-+ if (fences[i])
-+ fences[count++] = fences[i];
-+
-+ if (count) {
-+ spin_unlock(&sa_manager->wq.lock);
-+ t = fence_wait_any_timeout(fences, count, false,
-+ MAX_SCHEDULE_TIMEOUT);
-+ r = (t > 0) ? 0 : t;
-+ spin_lock(&sa_manager->wq.lock);
-+ } else {
-+ /* if we have nothing to wait for block */
- r = wait_event_interruptible_locked(
- sa_manager->wq,
- amdgpu_sa_event(sa_manager, size, align)
---
-1.9.1
-