lkml.org 
[lkml]   [2020]   [Feb]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH V2] dma-buf: Fix missing excl fence waiting
Date
If shared fence list is not empty, even we want to test all fences, excl fence is ignored.
That is abviously wrong, so fix it.

Signed-off-by: xinhui pan <xinhui.pan@amd.com>
---
change from v1:
init left correctly
---
drivers/dma-buf/dma-resv.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/dma-buf/dma-resv.c b/drivers/dma-buf/dma-resv.c
index 4264e64788c4..82e4b4f63bef 100644
--- a/drivers/dma-buf/dma-resv.c
+++ b/drivers/dma-buf/dma-resv.c
@@ -632,13 +632,13 @@ static inline int dma_resv_test_signaled_single(struct dma_fence *passed_fence)
*/
bool dma_resv_test_signaled_rcu(struct dma_resv *obj, bool test_all)
{
- unsigned seq, shared_count;
+ unsigned int seq, shared_count, left;
int ret;

rcu_read_lock();
retry:
ret = true;
- shared_count = 0;
+ left = shared_count = 0;
seq = read_seqcount_begin(&obj->seq);

if (test_all) {
@@ -647,7 +647,7 @@ bool dma_resv_test_signaled_rcu(struct dma_resv *obj, bool test_all)
struct dma_resv_list *fobj = rcu_dereference(obj->fence);

if (fobj)
- shared_count = fobj->shared_count;
+ left = shared_count = fobj->shared_count;

for (i = 0; i < shared_count; ++i) {
struct dma_fence *fence = rcu_dereference(fobj->shared[i]);
@@ -657,13 +657,14 @@ bool dma_resv_test_signaled_rcu(struct dma_resv *obj, bool test_all)
goto retry;
else if (!ret)
break;
+ left--;
}

if (read_seqcount_retry(&obj->seq, seq))
goto retry;
}

- if (!shared_count) {
+ if (!left) {
struct dma_fence *fence_excl = rcu_dereference(obj->fence_excl);

if (fence_excl) {
--
2.21.0 (Apple Git-122)

\
 
 \ /
  Last update: 2020-02-23 13:05    [W:0.039 / U:24.884 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site