Lines Matching full:rw
102 #define arch_read_relax(rw) barrier() argument
103 #define arch_write_relax(rw) barrier() argument
108 static inline void arch_read_lock(arch_rwlock_t *rw) in arch_read_lock() argument
112 old = __atomic_add(1, &rw->cnts); in arch_read_lock()
114 arch_read_lock_wait(rw); in arch_read_lock()
117 static inline void arch_read_unlock(arch_rwlock_t *rw) in arch_read_unlock() argument
119 __atomic_add_const_barrier(-1, &rw->cnts); in arch_read_unlock()
122 static inline void arch_write_lock(arch_rwlock_t *rw) in arch_write_lock() argument
126 if (!arch_try_cmpxchg(&rw->cnts, &old, 0x30000)) in arch_write_lock()
127 arch_write_lock_wait(rw); in arch_write_lock()
130 static inline void arch_write_unlock(arch_rwlock_t *rw) in arch_write_unlock() argument
132 __atomic_add_barrier(-0x30000, &rw->cnts); in arch_write_unlock()
136 static inline int arch_read_trylock(arch_rwlock_t *rw) in arch_read_trylock() argument
140 old = READ_ONCE(rw->cnts); in arch_read_trylock()
141 return (!(old & 0xffff0000) && arch_try_cmpxchg(&rw->cnts, &old, old + 1)); in arch_read_trylock()
144 static inline int arch_write_trylock(arch_rwlock_t *rw) in arch_write_trylock() argument
148 old = READ_ONCE(rw->cnts); in arch_write_trylock()
149 return !old && arch_try_cmpxchg(&rw->cnts, &old, 0x30000); in arch_write_trylock()