diff options
author | Christian König <christian.koenig@amd.com> | 2019-08-05 11:49:20 +0200 |
---|---|---|
committer | Christian König <christian.koenig@amd.com> | 2019-08-07 13:13:11 +0200 |
commit | b8c036dfc66f774624ba7b9e7414fd90a61e0527 (patch) | |
tree | 569c5732093526b63385d8530fa0456345f9eaf4 /drivers/dma-buf/reservation.c | |
parent | drm/i915: stop using seqcount for fence pruning (diff) | |
download | linux-b8c036dfc66f774624ba7b9e7414fd90a61e0527.tar.xz linux-b8c036dfc66f774624ba7b9e7414fd90a61e0527.zip |
dma-buf: simplify reservation_object_get_fences_rcu a bit
We can add the exclusive fence to the list after making sure we got
a consistent state.
Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/322034/?series=64786&rev=1
Diffstat (limited to '')
-rw-r--r-- | drivers/dma-buf/reservation.c | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/drivers/dma-buf/reservation.c b/drivers/dma-buf/reservation.c index c0ba05936ab6..ad6775b32a73 100644 --- a/drivers/dma-buf/reservation.c +++ b/drivers/dma-buf/reservation.c @@ -459,13 +459,6 @@ int reservation_object_get_fences_rcu(struct reservation_object *obj, if (!dma_fence_get_rcu(shared[i])) break; } - - if (!pfence_excl && fence_excl) { - shared[i] = fence_excl; - fence_excl = NULL; - ++i; - ++shared_count; - } } if (i != shared_count || read_seqcount_retry(&obj->seq, seq)) { @@ -480,6 +473,11 @@ unlock: rcu_read_unlock(); } while (ret); + if (pfence_excl) + *pfence_excl = fence_excl; + else if (fence_excl) + shared[++shared_count] = fence_excl; + if (!shared_count) { kfree(shared); shared = NULL; @@ -487,9 +485,6 @@ unlock: *pshared_count = shared_count; *pshared = shared; - if (pfence_excl) - *pfence_excl = fence_excl; - return ret; } EXPORT_SYMBOL_GPL(reservation_object_get_fences_rcu); |