dma-buf: simplify reservation_object_get_fences_rcu a bit
authorChristian König <christian.koenig@amd.com>
Mon, 5 Aug 2019 09:49:20 +0000 (11:49 +0200)
committerChristian König <christian.koenig@amd.com>
Wed, 7 Aug 2019 11:13:11 +0000 (13:13 +0200)
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
drivers/dma-buf/reservation.c

index c0ba059..ad6775b 100644 (file)
@@ -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);