Lines Matching defs:rw
118 #define arch_read_relax(rw) barrier()
119 #define arch_write_relax(rw) barrier()
124 static inline void arch_read_lock(arch_rwlock_t *rw)
128 old = __atomic_add(1, &rw->cnts);
130 arch_read_lock_wait(rw);
133 static inline void arch_read_unlock(arch_rwlock_t *rw)
135 __atomic_add_const_barrier(-1, &rw->cnts);
138 static inline void arch_write_lock(arch_rwlock_t *rw)
142 if (!arch_try_cmpxchg(&rw->cnts, &old, 0x30000))
143 arch_write_lock_wait(rw);
146 static inline void arch_write_unlock(arch_rwlock_t *rw)
148 __atomic_add_barrier(-0x30000, &rw->cnts);
152 static inline int arch_read_trylock(arch_rwlock_t *rw)
156 old = READ_ONCE(rw->cnts);
157 return (!(old & 0xffff0000) && arch_try_cmpxchg(&rw->cnts, &old, old + 1));
160 static inline int arch_write_trylock(arch_rwlock_t *rw)
164 old = READ_ONCE(rw->cnts);
165 return !old && arch_try_cmpxchg(&rw->cnts, &old, 0x30000);