Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild
[deliverable/linux.git] / include / linux / reservation.h
index 5a0b64cf68b4a84683071669e3b9ab01765cecd7..49d057655d62b0614afbeea04b2d2b47bc97e7ea 100644 (file)
@@ -120,6 +120,24 @@ reservation_object_get_excl(struct reservation_object *obj)
                                         reservation_object_held(obj));
 }
 
+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);
+       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);
+       rcu_read_unlock();
+       return fence;
+}
+
 int reservation_object_reserve_shared(struct reservation_object *obj);
 void reservation_object_add_shared_fence(struct reservation_object *obj,
                                         struct fence *fence);
This page took 0.024792 seconds and 5 git commands to generate.