Lines Matching refs:lock
12 static inline void rspin_until_writer_unlock(rwlock_t *lock, u32 cnts) in rspin_until_writer_unlock() argument
18 cnts = atomic_read(&lock->cnts); in rspin_until_writer_unlock()
26 void queue_read_lock_slowpath(rwlock_t *lock) in queue_read_lock_slowpath() argument
33 atomic_sub(_QR_BIAS, &lock->cnts); in queue_read_lock_slowpath()
38 spin_lock(&lock->lock); in queue_read_lock_slowpath()
47 while ( atomic_read(&lock->cnts) & _QW_WMASK ) in queue_read_lock_slowpath()
50 cnts = atomic_add_return(_QR_BIAS, &lock->cnts) - _QR_BIAS; in queue_read_lock_slowpath()
51 rspin_until_writer_unlock(lock, cnts); in queue_read_lock_slowpath()
56 spin_unlock(&lock->lock); in queue_read_lock_slowpath()
63 void queue_write_lock_slowpath(rwlock_t *lock) in queue_write_lock_slowpath() argument
68 spin_lock(&lock->lock); in queue_write_lock_slowpath()
71 if ( !atomic_read(&lock->cnts) && in queue_write_lock_slowpath()
72 (atomic_cmpxchg(&lock->cnts, 0, _QW_LOCKED) == 0) ) in queue_write_lock_slowpath()
81 cnts = atomic_read(&lock->cnts); in queue_write_lock_slowpath()
83 (atomic_cmpxchg(&lock->cnts, cnts, in queue_write_lock_slowpath()
93 cnts = atomic_read(&lock->cnts); in queue_write_lock_slowpath()
95 (atomic_cmpxchg(&lock->cnts, _QW_WAITING, in queue_write_lock_slowpath()
102 spin_unlock(&lock->lock); in queue_write_lock_slowpath()