Lines Matching defs:rw
113 static inline void arch_read_lock(arch_rwlock_t *rw)
116 old = rw->lock & 0x7fffffffU;
117 if (_raw_compare_and_swap(&rw->lock, old, old + 1) != old)
118 _raw_read_lock_wait(rw);
121 static inline void arch_read_lock_flags(arch_rwlock_t *rw, unsigned long flags)
124 old = rw->lock & 0x7fffffffU;
125 if (_raw_compare_and_swap(&rw->lock, old, old + 1) != old)
126 _raw_read_lock_wait_flags(rw, flags);
129 static inline void arch_read_unlock(arch_rwlock_t *rw)
133 old = rw->lock;
136 old = _raw_compare_and_swap(&rw->lock, old, old - 1);
140 static inline void arch_write_lock(arch_rwlock_t *rw)
142 if (unlikely(_raw_compare_and_swap(&rw->lock, 0, 0x80000000) != 0))
143 _raw_write_lock_wait(rw);
146 static inline void arch_write_lock_flags(arch_rwlock_t *rw, unsigned long flags)
148 if (unlikely(_raw_compare_and_swap(&rw->lock, 0, 0x80000000) != 0))
149 _raw_write_lock_wait_flags(rw, flags);
152 static inline void arch_write_unlock(arch_rwlock_t *rw)
154 _raw_compare_and_swap(&rw->lock, 0x80000000, 0);
157 static inline int arch_read_trylock(arch_rwlock_t *rw)
160 old = rw->lock & 0x7fffffffU;
161 if (likely(_raw_compare_and_swap(&rw->lock, old, old + 1) == old))
163 return _raw_read_trylock_retry(rw);
166 static inline int arch_write_trylock(arch_rwlock_t *rw)
168 if (likely(_raw_compare_and_swap(&rw->lock, 0, 0x80000000) == 0))
170 return _raw_write_trylock_retry(rw);