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