18 #ifndef _COBALT_UAPI_KERNEL_URW_H
19 #define _COBALT_UAPI_KERNEL_URW_H
21 #include <linux/types.h>
53 #define URW_INITIALIZER { 0 }
54 #define DEFINE_URW(__name) urw_t __name = URW_INITIALIZER
56 static inline void __try_read_start(
const urw_t *urw, urwstate_t *tmp)
60 token = ACCESS_ONCE(urw->sequence);
71 static inline void __try_read_end(
const urw_t *urw, urwstate_t *tmp)
74 if (urw->sequence != tmp->token) {
75 __try_read_start(urw, tmp);
82 static inline void __do_write_start(urw_t *urw, urwstate_t *tmp)
89 static inline void __do_write_end(urw_t *urw, urwstate_t *tmp)
96 static inline void unsynced_rw_init(urw_t *urw)
101 #define unsynced_read_block(__tmp, __urw) \
102 for (__try_read_start(__urw, __tmp); \
103 (__tmp)->dirty; __try_read_end(__urw, __tmp))
105 #define unsynced_write_block(__tmp, __urw) \
106 for (__do_write_start(__urw, __tmp); \
107 (__tmp)->dirty; __do_write_end(__urw, __tmp))