Lines Matching refs:lock

34 rspin_until_writer_unlock(struct qrwlock *lock, u32 cnts)  in rspin_until_writer_unlock()  argument
38 cnts = smp_load_acquire((u32 *)&lock->cnts); in rspin_until_writer_unlock()
46 void queue_read_lock_slowpath(struct qrwlock *lock) in queue_read_lock_slowpath() argument
58 cnts = smp_load_acquire((u32 *)&lock->cnts); in queue_read_lock_slowpath()
59 rspin_until_writer_unlock(lock, cnts); in queue_read_lock_slowpath()
62 atomic_sub(_QR_BIAS, &lock->cnts); in queue_read_lock_slowpath()
67 arch_spin_lock(&lock->lock); in queue_read_lock_slowpath()
76 while (atomic_read(&lock->cnts) & _QW_WMASK) in queue_read_lock_slowpath()
79 cnts = atomic_add_return(_QR_BIAS, &lock->cnts) - _QR_BIAS; in queue_read_lock_slowpath()
80 rspin_until_writer_unlock(lock, cnts); in queue_read_lock_slowpath()
85 arch_spin_unlock(&lock->lock); in queue_read_lock_slowpath()
93 void queue_write_lock_slowpath(struct qrwlock *lock) in queue_write_lock_slowpath() argument
98 arch_spin_lock(&lock->lock); in queue_write_lock_slowpath()
101 if (!atomic_read(&lock->cnts) && in queue_write_lock_slowpath()
102 (atomic_cmpxchg(&lock->cnts, 0, _QW_LOCKED) == 0)) in queue_write_lock_slowpath()
110 cnts = atomic_read(&lock->cnts); in queue_write_lock_slowpath()
112 (atomic_cmpxchg(&lock->cnts, cnts, in queue_write_lock_slowpath()
121 cnts = atomic_read(&lock->cnts); in queue_write_lock_slowpath()
123 (atomic_cmpxchg(&lock->cnts, _QW_WAITING, in queue_write_lock_slowpath()
130 arch_spin_unlock(&lock->lock); in queue_write_lock_slowpath()