firmware/br-ext-chip-allwinner/board/v83x/kernel/patches/00000-include_linux_reserva...

28 lines
751 B
Diff

diff -drupN a/include/linux/reservation.h b/include/linux/reservation.h
--- a/include/linux/reservation.h 2018-08-06 17:23:04.000000000 +0300
+++ b/include/linux/reservation.h 2022-06-12 05:28:14.000000000 +0300
@@ -177,17 +177,14 @@ static inline struct fence *
reservation_object_get_excl_rcu(struct reservation_object *obj)
{
struct fence *fence;
- unsigned seq;
-retry:
- seq = read_seqcount_begin(&obj->seq);
+
+ if (!rcu_access_pointer(obj->fence_excl))
+ return NULL;
+
rcu_read_lock();
- fence = rcu_dereference(obj->fence_excl);
- if (read_seqcount_retry(&obj->seq, seq)) {
- rcu_read_unlock();
- goto retry;
- }
- fence = fence_get(fence);
+ fence = fence_get_rcu_safe(&obj->fence_excl);
rcu_read_unlock();
+
return fence;
}