We can add the exclusive fence to the list after making sure we got
a consistent state.

Signed-off-by: Christian König <[email protected]>
---
 drivers/dma-buf/reservation.c | 15 +++++----------
 1 file changed, 5 insertions(+), 10 deletions(-)

diff --git a/drivers/dma-buf/reservation.c b/drivers/dma-buf/reservation.c
index 944d962ddddf..7505eb289023 100644
--- a/drivers/dma-buf/reservation.c
+++ b/drivers/dma-buf/reservation.c
@@ -453,13 +453,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)) {
@@ -474,6 +467,11 @@ int reservation_object_get_fences_rcu(struct 
reservation_object *obj,
                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;
@@ -481,9 +479,6 @@ int reservation_object_get_fences_rcu(struct 
reservation_object *obj,
 
        *pshared_count = shared_count;
        *pshared = shared;
-       if (pfence_excl)
-               *pfence_excl = fence_excl;
-
        return ret;
 }
 EXPORT_SYMBOL_GPL(reservation_object_get_fences_rcu);
-- 
2.17.1

_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to