v2:
still check context first to avoid warning from dma_fence_is_later
apply this fix in add_shared_replace as well

Change-Id: If6a979ba9fd6c923b82212f35f07a9ff31c86767
Signed-off-by: Monk Liu <monk....@amd.com>
---
 drivers/dma-buf/reservation.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/dma-buf/reservation.c b/drivers/dma-buf/reservation.c
index 314eb10..c6e3c86 100644
--- a/drivers/dma-buf/reservation.c
+++ b/drivers/dma-buf/reservation.c
@@ -118,7 +118,8 @@ reservation_object_add_shared_inplace(struct 
reservation_object *obj,
                old_fence = rcu_dereference_protected(fobj->shared[i],
                                                reservation_object_held(obj));
 
-               if (old_fence->context == fence->context) {
+               if (old_fence->context == fence->context &&
+                       dma_fence_is_later(fence, old_fence)) {
                        /* memory barrier is added by write_seqcount_begin */
                        RCU_INIT_POINTER(fobj->shared[i], fence);
                        write_seqcount_end(&obj->seq);
@@ -179,7 +180,8 @@ reservation_object_add_shared_replace(struct 
reservation_object *obj,
                check = rcu_dereference_protected(old->shared[i],
                                                reservation_object_held(obj));
 
-               if (check->context == fence->context ||
+               if ((check->context == fence->context &&
+                       dma_fence_is_later(fence, check)) ||
                    dma_fence_is_signaled(check))
                        RCU_INIT_POINTER(fobj->shared[--k], check);
                else
-- 
2.7.4

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to