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 57 #define READ_ONCE ACCESS_ONCE 60 static inline void __try_read_start(
const urw_t *urw, urwstate_t *tmp)
64 token = READ_ONCE(urw->sequence);
75 static inline void __try_read_end(
const urw_t *urw, urwstate_t *tmp)
78 if (urw->sequence != tmp->token) {
79 __try_read_start(urw, tmp);
86 static inline void __do_write_start(urw_t *urw, urwstate_t *tmp)
93 static inline void __do_write_end(urw_t *urw, urwstate_t *tmp)
100 static inline void unsynced_rw_init(urw_t *urw)
105 #define unsynced_read_block(__tmp, __urw) \ 106 for (__try_read_start(__urw, __tmp); \ 107 (__tmp)->dirty; __try_read_end(__urw, __tmp)) 109 #define unsynced_write_block(__tmp, __urw) \ 110 for (__do_write_start(__urw, __tmp); \ 111 (__tmp)->dirty; __do_write_end(__urw, __tmp))