Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/external/bsd/drm2/include/linux More <linux/reservation....



details:   https://anonhg.NetBSD.org/src/rev/167d38f5e64c
branches:  trunk
changeset: 992714:167d38f5e64c
user:      riastradh <riastradh%NetBSD.org@localhost>
date:      Mon Aug 27 07:34:41 2018 +0000

description:
More <linux/reservation.h> stubs.

diffstat:

 sys/external/bsd/drm2/include/linux/reservation.h |  41 +++++++++++++++++++++-
 1 files changed, 38 insertions(+), 3 deletions(-)

diffs (88 lines):

diff -r c4687beb61c7 -r 167d38f5e64c sys/external/bsd/drm2/include/linux/reservation.h
--- a/sys/external/bsd/drm2/include/linux/reservation.h Mon Aug 27 07:34:32 2018 +0000
+++ b/sys/external/bsd/drm2/include/linux/reservation.h Mon Aug 27 07:34:41 2018 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: reservation.h,v 1.3 2018/08/27 07:32:22 riastradh Exp $        */
+/*     $NetBSD: reservation.h,v 1.4 2018/08/27 07:34:41 riastradh Exp $        */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -34,6 +34,7 @@
 
 #include <sys/atomic.h>
 
+#include <linux/rcupdate.h>
 #include <linux/ww_mutex.h>
 
 struct fence;
@@ -41,18 +42,32 @@
 extern struct ww_class reservation_ww_class;
 
 struct reservation_object {
-       struct ww_mutex lock;
+       struct ww_mutex         lock;
 
-       struct fence *robj_fence_excl;
+       struct reservation_object_list __rcu    *robj_objlist;
+       struct fence __rcu                      *robj_fence_excl;
+};
+
+struct reservation_object_list {
+       uint32_t                shared_count;
+       struct fence __rcu      *shared[];
 };
 
 #define        reservation_object_add_excl_fence       linux_reservation_object_add_excl_fence
 #define        reservation_object_add_shared_fence     linux_reservation_object_add_shared_fence
+#define        reservation_object_reserve_shared       linux_reservation_object_reserve_shared
+#define        reservation_object_test_signaled_rcu    linux_reservation_object_test_signaled_rcu
+#define        reservation_object_wait_timeout_rcu     linux_reservation_object_wait_timeout_rcu
 
 void   reservation_object_add_excl_fence(struct reservation_object *,
            struct fence *);
 void   reservation_object_add_shared_fence(struct reservation_object *,
            struct fence *);
+int    reservation_object_reserve_shared(struct reservation_object *);
+bool   reservation_object_test_signaled_rcu(struct reservation_object *,
+           bool);
+long   reservation_object_wait_timeout_rcu(struct reservation_object *,
+           bool, bool, unsigned long);
 
 static inline void
 reservation_object_init(struct reservation_object *reservation)
@@ -68,15 +83,35 @@
        ww_mutex_destroy(&reservation->lock);
 }
 
+static inline bool
+reservation_object_held(struct reservation_object *reservation)
+{
+
+       return ww_mutex_is_locked(&reservation->lock);
+}
+
 static inline struct fence *
 reservation_object_get_excl(struct reservation_object *reservation)
 {
        struct fence *fence;
 
+       KASSERT(reservation_object_held(reservation));
        fence = reservation->robj_fence_excl;
        membar_datadep_consumer();
 
        return fence;
 }
 
+static inline struct reservation_object_list *
+reservation_object_get_list(struct reservation_object *reservation)
+{
+       struct reservation_object_list *objlist;
+
+       KASSERT(reservation_object_held(reservation));
+       objlist = reservation->robj_objlist;
+       membar_datadep_consumer();
+
+       return objlist;
+}
+
 #endif  /* _LINUX_RESERVATION_H_ */



Home | Main Index | Thread Index | Old Index