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

Signed-off-by: Christian König <christian.koe...@amd.com>
---
 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 6eaca469005f..69c826553c72 100644
--- a/drivers/dma-buf/reservation.c
+++ b/drivers/dma-buf/reservation.c
@@ -426,13 +426,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)) {
@@ -447,6 +440,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;
@@ -454,9 +452,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
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to