Lines Matching full:rw
52 static inline void arch_read_lock(arch_rwlock_t *rw) in arch_read_lock() argument
55 do old = rw->lock; in arch_read_lock()
56 while (!old || __sl_cas(&rw->lock, old, old-1) != old); in arch_read_lock()
59 static inline void arch_read_unlock(arch_rwlock_t *rw) in arch_read_unlock() argument
62 do old = rw->lock; in arch_read_unlock()
63 while (__sl_cas(&rw->lock, old, old+1) != old); in arch_read_unlock()
66 static inline void arch_write_lock(arch_rwlock_t *rw) in arch_write_lock() argument
68 while (__sl_cas(&rw->lock, RW_LOCK_BIAS, 0) != RW_LOCK_BIAS); in arch_write_lock()
71 static inline void arch_write_unlock(arch_rwlock_t *rw) in arch_write_unlock() argument
73 __sl_cas(&rw->lock, 0, RW_LOCK_BIAS); in arch_write_unlock()
76 static inline int arch_read_trylock(arch_rwlock_t *rw) in arch_read_trylock() argument
79 do old = rw->lock; in arch_read_trylock()
80 while (old && __sl_cas(&rw->lock, old, old-1) != old); in arch_read_trylock()
84 static inline int arch_write_trylock(arch_rwlock_t *rw) in arch_write_trylock() argument
86 return __sl_cas(&rw->lock, RW_LOCK_BIAS, 0) == RW_LOCK_BIAS; in arch_write_trylock()