]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - include/linux/reservation.h
timerfd: export defines to userspace
[mirror_ubuntu-bionic-kernel.git] / include / linux / reservation.h
index b0f305e77b7f05e30bcd6ce4e7e566f640cccb80..d9706a6f5ae257f9a9a33a772669611bee030169 100644 (file)
@@ -40,7 +40,7 @@
 #define _LINUX_RESERVATION_H
 
 #include <linux/ww_mutex.h>
-#include <linux/fence.h>
+#include <linux/dma-fence.h>
 #include <linux/slab.h>
 #include <linux/seqlock.h>
 #include <linux/rcupdate.h>
@@ -59,7 +59,7 @@ extern const char reservation_seqcount_string[];
 struct reservation_object_list {
        struct rcu_head rcu;
        u32 shared_count, shared_max;
-       struct fence __rcu *shared[];
+       struct dma_fence __rcu *shared[];
 };
 
 /**
@@ -74,7 +74,7 @@ struct reservation_object {
        struct ww_mutex lock;
        seqcount_t seq;
 
-       struct fence __rcu *fence_excl;
+       struct dma_fence __rcu *fence_excl;
        struct reservation_object_list __rcu *fence;
        struct reservation_object_list *staged;
 };
@@ -107,7 +107,7 @@ reservation_object_fini(struct reservation_object *obj)
 {
        int i;
        struct reservation_object_list *fobj;
-       struct fence *excl;
+       struct dma_fence *excl;
 
        /*
         * This object should be dead and all references must have
@@ -115,12 +115,12 @@ reservation_object_fini(struct reservation_object *obj)
         */
        excl = rcu_dereference_protected(obj->fence_excl, 1);
        if (excl)
-               fence_put(excl);
+               dma_fence_put(excl);
 
        fobj = rcu_dereference_protected(obj->fence, 1);
        if (fobj) {
                for (i = 0; i < fobj->shared_count; ++i)
-                       fence_put(rcu_dereference_protected(fobj->shared[i], 1));
+                       dma_fence_put(rcu_dereference_protected(fobj->shared[i], 1));
 
                kfree(fobj);
        }
@@ -155,7 +155,7 @@ reservation_object_get_list(struct reservation_object *obj)
  * RETURNS
  * The exclusive fence or NULL
  */
-static inline struct fence *
+static inline struct dma_fence *
 reservation_object_get_excl(struct reservation_object *obj)
 {
        return rcu_dereference_protected(obj->fence_excl,
@@ -173,35 +173,32 @@ reservation_object_get_excl(struct reservation_object *obj)
  * RETURNS
  * The exclusive fence or NULL if none
  */
-static inline struct fence *
+static inline struct dma_fence *
 reservation_object_get_excl_rcu(struct reservation_object *obj)
 {
-       struct fence *fence;
-       unsigned seq;
-retry:
-       seq = read_seqcount_begin(&obj->seq);
+       struct dma_fence *fence;
+
+       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 = dma_fence_get_rcu_safe(&obj->fence_excl);
        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);
+                                        struct dma_fence *fence);
 
 void reservation_object_add_excl_fence(struct reservation_object *obj,
-                                      struct fence *fence);
+                                      struct dma_fence *fence);
 
 int reservation_object_get_fences_rcu(struct reservation_object *obj,
-                                     struct fence **pfence_excl,
+                                     struct dma_fence **pfence_excl,
                                      unsigned *pshared_count,
-                                     struct fence ***pshared);
+                                     struct dma_fence ***pshared);
 
 long reservation_object_wait_timeout_rcu(struct reservation_object *obj,
                                         bool wait_all, bool intr,