Lines Matching refs:rw
99 #define arch_read_relax(rw) barrier()
100 #define arch_write_relax(rw) barrier()
105 static inline void arch_read_lock(arch_rwlock_t *rw)
109 old = __atomic_add(1, &rw->cnts);
111 arch_read_lock_wait(rw);
114 static inline void arch_read_unlock(arch_rwlock_t *rw)
116 __atomic_add_const_barrier(-1, &rw->cnts);
119 static inline void arch_write_lock(arch_rwlock_t *rw)
121 if (!__atomic_cmpxchg_bool(&rw->cnts, 0, 0x30000))
122 arch_write_lock_wait(rw);
125 static inline void arch_write_unlock(arch_rwlock_t *rw)
127 __atomic_add_barrier(-0x30000, &rw->cnts);
131 static inline int arch_read_trylock(arch_rwlock_t *rw)
135 old = READ_ONCE(rw->cnts);
137 __atomic_cmpxchg_bool(&rw->cnts, old, old + 1));
140 static inline int arch_write_trylock(arch_rwlock_t *rw)
144 old = READ_ONCE(rw->cnts);
145 return !old && __atomic_cmpxchg_bool(&rw->cnts, 0, 0x30000);