Lines Matching refs:lock
39 extern void queue_read_lock_slowpath(struct qrwlock *lock);
40 extern void queue_write_lock_slowpath(struct qrwlock *lock);
46 static inline int queue_read_can_lock(struct qrwlock *lock) in queue_read_can_lock() argument
48 return !(atomic_read(&lock->cnts) & _QW_WMASK); in queue_read_can_lock()
55 static inline int queue_write_can_lock(struct qrwlock *lock) in queue_write_can_lock() argument
57 return !atomic_read(&lock->cnts); in queue_write_can_lock()
65 static inline int queue_read_trylock(struct qrwlock *lock) in queue_read_trylock() argument
69 cnts = atomic_read(&lock->cnts); in queue_read_trylock()
71 cnts = (u32)atomic_add_return(_QR_BIAS, &lock->cnts); in queue_read_trylock()
74 atomic_sub(_QR_BIAS, &lock->cnts); in queue_read_trylock()
84 static inline int queue_write_trylock(struct qrwlock *lock) in queue_write_trylock() argument
88 cnts = atomic_read(&lock->cnts); in queue_write_trylock()
92 return likely(atomic_cmpxchg(&lock->cnts, in queue_write_trylock()
99 static inline void queue_read_lock(struct qrwlock *lock) in queue_read_lock() argument
103 cnts = atomic_add_return(_QR_BIAS, &lock->cnts); in queue_read_lock()
108 queue_read_lock_slowpath(lock); in queue_read_lock()
115 static inline void queue_write_lock(struct qrwlock *lock) in queue_write_lock() argument
118 if (atomic_cmpxchg(&lock->cnts, 0, _QW_LOCKED) == 0) in queue_write_lock()
121 queue_write_lock_slowpath(lock); in queue_write_lock()
128 static inline void queue_read_unlock(struct qrwlock *lock) in queue_read_unlock() argument
134 atomic_sub(_QR_BIAS, &lock->cnts); in queue_read_unlock()
142 static inline void queue_write_unlock(struct qrwlock *lock) in queue_write_unlock() argument
149 atomic_sub(_QW_LOCKED, &lock->cnts); in queue_write_unlock()