mirror of https://github.com/OpenIPC/firmware.git
28 lines
751 B
Diff
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;
|
|
}
|
|
|