diff options
Diffstat (limited to 'meta-amdfalconx86/recipes-kernel/linux/files/1140-dma-buf-return-index-of-the-first-signaled-fence.patch')
-rw-r--r-- | meta-amdfalconx86/recipes-kernel/linux/files/1140-dma-buf-return-index-of-the-first-signaled-fence.patch | 188 |
1 files changed, 0 insertions, 188 deletions
diff --git a/meta-amdfalconx86/recipes-kernel/linux/files/1140-dma-buf-return-index-of-the-first-signaled-fence.patch b/meta-amdfalconx86/recipes-kernel/linux/files/1140-dma-buf-return-index-of-the-first-signaled-fence.patch deleted file mode 100644 index 76815764..00000000 --- a/meta-amdfalconx86/recipes-kernel/linux/files/1140-dma-buf-return-index-of-the-first-signaled-fence.patch +++ /dev/null @@ -1,188 +0,0 @@ -From 7e06443930ab2fabda1977c20ff82ff6bc42e3be Mon Sep 17 00:00:00 2001 -From: Sanjay R Mehta <sanju.mehta@amd.com> -Date: Tue, 15 Nov 2016 14:30:58 +0530 -Subject: [PATCH 02/10] dma-buf: return index of the first signaled fence - -Return the index of the first signaled fence. This information -is useful in some APIs like Vulkan. - -Signed-off-by: monk.liu <monk.liu@amd.com> -Signed-off-by: Alex Deucher <alexander.deucher@amd.com> -Cc: Sumit Semwal <sumit.semwal@linaro.org> -Signed-off-by: Sanjay R Mehta <sanju.mehta@amd.com> ---- - drivers/dma-buf/fence.c | 19 ++++++++++++++----- - drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 4 +++- - drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c | 2 +- - drivers/gpu/drm/amd/include/uapi/drm/amdgpu_drm.h | 21 +++++++++++---------- - include/linux/fence.h | 2 +- - 5 files changed, 30 insertions(+), 18 deletions(-) - -diff --git a/drivers/dma-buf/fence.c b/drivers/dma-buf/fence.c -index 7b05dbe..192f99b 100644 ---- a/drivers/dma-buf/fence.c -+++ b/drivers/dma-buf/fence.c -@@ -398,14 +398,17 @@ out: - EXPORT_SYMBOL(fence_default_wait); - - static bool --fence_test_signaled_any(struct fence **fences, uint32_t count) -+fence_test_signaled_any(struct fence **fences, uint32_t count, uint32_t *idx) - { - int i; - - for (i = 0; i < count; ++i) { - struct fence *fence = fences[i]; -- if (test_bit(FENCE_FLAG_SIGNALED_BIT, &fence->flags)) -+ if (test_bit(FENCE_FLAG_SIGNALED_BIT, &fence->flags)) { -+ if (idx) -+ *idx = i; - return true; -+ } - } - return false; - } -@@ -417,6 +420,7 @@ fence_test_signaled_any(struct fence **fences, uint32_t count) - * @count: [in] number of fences to wait on - * @intr: [in] if true, do an interruptible wait - * @timeout: [in] timeout value in jiffies, or MAX_SCHEDULE_TIMEOUT -+ * @idx: [out] the first signaled fence index, meaninful only on Returns positive - * - * Returns -EINVAL on custom fence wait implementation, -ERESTARTSYS if - * interrupted, 0 if the wait timed out, or the remaining timeout in jiffies -@@ -428,7 +432,7 @@ fence_test_signaled_any(struct fence **fences, uint32_t count) - */ - signed long - fence_wait_any_timeout(struct fence **fences, uint32_t count, -- bool intr, signed long timeout) -+ bool intr, signed long timeout, uint32_t *idx) - { - struct default_wait_cb *cb; - signed long ret = timeout; -@@ -439,8 +443,11 @@ fence_wait_any_timeout(struct fence **fences, uint32_t count, - - if (timeout == 0) { - for (i = 0; i < count; ++i) -- if (fence_is_signaled(fences[i])) -+ if (fence_is_signaled(fences[i])) { -+ if (idx) -+ *idx = i; - return 1; -+ } - - return 0; - } -@@ -463,6 +470,8 @@ fence_wait_any_timeout(struct fence **fences, uint32_t count, - if (fence_add_callback(fence, &cb[i].base, - fence_default_wait_cb)) { - /* This fence is already signaled */ -+ if (idx) -+ *idx = i; - goto fence_rm_cb; - } - } -@@ -473,7 +482,7 @@ fence_wait_any_timeout(struct fence **fences, uint32_t count, - else - set_current_state(TASK_UNINTERRUPTIBLE); - -- if (fence_test_signaled_any(fences, count)) -+ if (fence_test_signaled_any(fences, count, idx)) - break; - - ret = schedule_timeout(ret); -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c -index bb6057a..181e2b7 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c -@@ -1107,6 +1107,7 @@ static int amdgpu_cs_wait_any_fence(struct amdgpu_device *adev, - { - unsigned long timeout = amdgpu_gem_timeout(wait->in.timeout_ns); - uint32_t fence_count = wait->in.fence_count; -+ uint32_t first = ~0; - struct fence **array; - unsigned i; - long r; -@@ -1132,13 +1133,14 @@ static int amdgpu_cs_wait_any_fence(struct amdgpu_device *adev, - } - } - -- r = fence_wait_any_timeout(array, fence_count, true, timeout); -+ r = fence_wait_any_timeout(array, fence_count, true, timeout, &first); - if (r < 0) - goto err_free_fence_array; - - out: - memset(wait, 0, sizeof(*wait)); - wait->out.status = (r > 0); -+ wait->out.first_signaled = first; - /* set return value 0 to indicate success */ - r = 0; - -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c -index 8bf84ef..9f4311c 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c -@@ -360,7 +360,7 @@ int amdgpu_sa_bo_new(struct amdgpu_sa_manager *sa_manager, - if (count) { - spin_unlock(&sa_manager->wq.lock); - t = fence_wait_any_timeout(fences, count, false, -- MAX_SCHEDULE_TIMEOUT); -+ MAX_SCHEDULE_TIMEOUT, NULL); - for (i = 0; i < count; ++i) - fence_put(fences[i]); - -diff --git a/drivers/gpu/drm/amd/include/uapi/drm/amdgpu_drm.h b/drivers/gpu/drm/amd/include/uapi/drm/amdgpu_drm.h -index 3f13a87..c2f06eb 100644 ---- a/drivers/gpu/drm/amd/include/uapi/drm/amdgpu_drm.h -+++ b/drivers/gpu/drm/amd/include/uapi/drm/amdgpu_drm.h -@@ -334,23 +334,24 @@ union drm_amdgpu_wait_cs { - }; - - struct drm_amdgpu_fence { -- uint32_t ctx_id; -- uint32_t ip_type; -- uint32_t ip_instance; -- uint32_t ring; -- uint64_t seq_no; -+ __u32 ctx_id; -+ __u32 ip_type; -+ __u32 ip_instance; -+ __u32 ring; -+ __u64 seq_no; - }; - - struct drm_amdgpu_wait_fences_in { - /** This points to uint64_t * which points to fences */ -- uint64_t fences; -- uint32_t fence_count; -- uint32_t wait_all; -- uint64_t timeout_ns; -+ __u64 fences; -+ __u32 fence_count; -+ __u32 wait_all; -+ __u64 timeout_ns; - }; - - struct drm_amdgpu_wait_fences_out { -- uint64_t status; -+ __u32 status; -+ __u32 first_signaled; - }; - - union drm_amdgpu_wait_fences { -diff --git a/include/linux/fence.h b/include/linux/fence.h -index bb52201..b8da489 100644 ---- a/include/linux/fence.h -+++ b/include/linux/fence.h -@@ -322,7 +322,7 @@ static inline struct fence *fence_later(struct fence *f1, struct fence *f2) - - signed long fence_wait_timeout(struct fence *, bool intr, signed long timeout); - signed long fence_wait_any_timeout(struct fence **fences, uint32_t count, -- bool intr, signed long timeout); -+ bool intr, signed long timeout, uint32_t *idx); - - /** - * fence_wait - sleep until the fence gets signaled --- -2.7.4 - |