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))