| /linux/kernel/locking/ |
| H A D | mutex.c | 35 #include <trace/events/lock.h> 46 static void __mutex_init_generic(struct mutex *lock) in __mutex_init_generic() argument 48 atomic_long_set(&lock->owner, 0); in __mutex_init_generic() 49 scoped_guard (raw_spinlock_init, &lock->wait_lock) { in __mutex_init_generic() 50 lock->first_waiter = NULL; in __mutex_init_generic() 53 osq_lock_init(&lock->osq); in __mutex_init_generic() 55 debug_mutex_init(lock); in __mutex_init_generic() 63 bool mutex_is_locked(struct mutex *lock) in mutex_is_locked() argument 65 return __mutex_owner(lock) != NULL; in mutex_is_locked() 75 unsigned long mutex_get_owner(struct mutex *lock) in mutex_get_owner() argument 85 __mutex_trylock_common(struct mutex * lock,bool handoff) __mutex_trylock_common() argument 124 __mutex_trylock_or_handoff(struct mutex * lock,bool handoff) __mutex_trylock_or_handoff() argument 132 __mutex_trylock(struct mutex * lock) __mutex_trylock() argument 143 mutex_init_generic(struct mutex * lock) mutex_init_generic() argument 153 __mutex_trylock_fast(struct mutex * lock) __mutex_trylock_fast() argument 167 __mutex_unlock_fast(struct mutex * lock) __mutex_unlock_fast() argument 177 mutex_init_lockdep(struct mutex * lock,const char * name,struct lock_class_key * key) mutex_init_lockdep() argument 190 __mutex_set_flag(struct mutex * lock,unsigned long flag) __mutex_set_flag() argument 195 __mutex_clear_flag(struct mutex * lock,unsigned long flag) __mutex_clear_flag() argument 208 __mutex_add_waiter(struct mutex * lock,struct mutex_waiter * waiter,struct mutex_waiter * pos) __mutex_add_waiter() argument 241 __mutex_remove_waiter(struct mutex * lock,struct mutex_waiter * waiter) __mutex_remove_waiter() argument 263 __mutex_handoff(struct mutex * lock,struct task_struct * task) __mutex_handoff() argument 314 mutex_lock(struct mutex * lock) mutex_lock() argument 331 __mutex_trylock_or_owner(struct mutex * lock) __mutex_trylock_or_owner() argument 337 ww_mutex_spin_on_owner(struct mutex * lock,struct ww_acquire_ctx * ww_ctx,struct mutex_waiter * waiter) ww_mutex_spin_on_owner() argument 385 mutex_spin_on_owner(struct mutex * lock,struct task_struct * owner,struct ww_acquire_ctx * ww_ctx,struct mutex_waiter * waiter) mutex_spin_on_owner() argument 425 mutex_can_spin_on_owner(struct mutex * lock) mutex_can_spin_on_owner() argument 474 mutex_optimistic_spin(struct mutex * lock,struct ww_acquire_ctx * ww_ctx,struct mutex_waiter * waiter) mutex_optimistic_spin() argument 550 mutex_optimistic_spin(struct mutex * lock,struct ww_acquire_ctx * ww_ctx,struct mutex_waiter * waiter) mutex_optimistic_spin() argument 576 mutex_unlock(struct mutex * lock) mutex_unlock() argument 597 ww_mutex_unlock(struct ww_mutex * lock) ww_mutex_unlock() argument 609 __mutex_lock_common(struct mutex * lock,unsigned int state,unsigned int subclass,struct lockdep_map * nest_lock,unsigned long ip,struct ww_acquire_ctx * ww_ctx,const bool use_ww_ctx) __mutex_lock_common() argument 816 __mutex_lock(struct mutex * lock,unsigned int state,unsigned int subclass,struct lockdep_map * nest_lock,unsigned long ip) __mutex_lock() argument 824 __ww_mutex_lock(struct mutex * lock,unsigned int state,unsigned int subclass,unsigned long ip,struct ww_acquire_ctx * ww_ctx) __ww_mutex_lock() argument 871 mutex_lock_nested(struct mutex * lock,unsigned int subclass) mutex_lock_nested() argument 880 _mutex_lock_nest_lock(struct mutex * lock,struct lockdep_map * nest) _mutex_lock_nest_lock() argument 888 _mutex_lock_killable(struct mutex * lock,unsigned int subclass,struct lockdep_map * nest) _mutex_lock_killable() argument 896 mutex_lock_interruptible_nested(struct mutex * lock,unsigned int subclass) mutex_lock_interruptible_nested() argument 903 mutex_lock_io_nested(struct mutex * lock,unsigned int subclass) mutex_lock_io_nested() argument 918 ww_mutex_deadlock_injection(struct ww_mutex * lock,struct ww_acquire_ctx * ctx) ww_mutex_deadlock_injection() argument 945 ww_mutex_lock(struct ww_mutex * lock,struct ww_acquire_ctx * ctx) ww_mutex_lock() argument 960 ww_mutex_lock_interruptible(struct ww_mutex * lock,struct ww_acquire_ctx * ctx) ww_mutex_lock_interruptible() argument 980 __mutex_unlock_slowpath(struct mutex * lock,unsigned long ip) __mutex_unlock_slowpath() argument 1055 mutex_lock_interruptible(struct mutex * lock) mutex_lock_interruptible() argument 1079 mutex_lock_killable(struct mutex * lock) mutex_lock_killable() argument 1100 mutex_lock_io(struct mutex * lock) mutex_lock_io() argument 1111 __mutex_lock_slowpath(struct mutex * lock) __mutex_lock_slowpath() argument 1119 __mutex_lock_killable_slowpath(struct mutex * lock) __mutex_lock_killable_slowpath() argument 1126 __mutex_lock_interruptible_slowpath(struct mutex * lock) __mutex_lock_interruptible_slowpath() argument 1133 __ww_mutex_lock_slowpath(struct ww_mutex * lock,struct ww_acquire_ctx * ctx) __ww_mutex_lock_slowpath() argument 1141 __ww_mutex_lock_interruptible_slowpath(struct ww_mutex * lock,struct ww_acquire_ctx * ctx) __ww_mutex_lock_interruptible_slowpath() argument 1166 mutex_trylock(struct mutex * lock) mutex_trylock() argument 1173 _mutex_trylock_nest_lock(struct mutex * lock,struct lockdep_map * nest_lock) _mutex_trylock_nest_lock() argument 1189 ww_mutex_lock(struct ww_mutex * lock,struct ww_acquire_ctx * ctx) ww_mutex_lock() argument 1204 ww_mutex_lock_interruptible(struct ww_mutex * lock,struct ww_acquire_ctx * ctx) ww_mutex_lock_interruptible() argument 1231 atomic_dec_and_mutex_lock(atomic_t * cnt,struct mutex * lock) atomic_dec_and_mutex_lock() argument [all...] |
| H A D | rtmutex_api.c | 35 * Debug aware fast / slowpath lock,trylock,unlock 40 static __always_inline int __rt_mutex_lock_common(struct rt_mutex *lock, in __rt_mutex_lock_common() argument 44 __cond_acquires(0, lock) in __rt_mutex_lock_common() 49 mutex_acquire_nest(&lock->dep_map, subclass, 0, nest_lock, _RET_IP_); in __rt_mutex_lock_common() 50 ret = __rt_mutex_lock(&lock->rtmutex, state); in __rt_mutex_lock_common() 52 mutex_release(&lock->dep_map, _RET_IP_); in __rt_mutex_lock_common() 64 * rt_mutex_lock_nested - lock a rt_mutex 66 * @lock: the rt_mutex to be locked 69 void __sched rt_mutex_lock_nested(struct rt_mutex *lock, unsigned int subclass) in rt_mutex_lock_nested() 71 if (__rt_mutex_lock_common(lock, TASK_UNINTERRUPTIBL in rt_mutex_lock_nested() 68 rt_mutex_lock_nested(struct rt_mutex * lock,unsigned int subclass) rt_mutex_lock_nested() argument 74 _rt_mutex_lock_nest_lock(struct rt_mutex * lock,struct lockdep_map * nest_lock) _rt_mutex_lock_nest_lock() argument 87 rt_mutex_lock(struct rt_mutex * lock) rt_mutex_lock() argument 103 rt_mutex_lock_interruptible(struct rt_mutex * lock) rt_mutex_lock_interruptible() argument 118 rt_mutex_lock_killable(struct rt_mutex * lock) rt_mutex_lock_killable() argument 136 rt_mutex_trylock(struct rt_mutex * lock) rt_mutex_trylock() argument 156 rt_mutex_unlock(struct rt_mutex * lock) rt_mutex_unlock() argument 166 rt_mutex_futex_trylock(struct rt_mutex_base * lock) rt_mutex_futex_trylock() argument 171 __rt_mutex_futex_trylock(struct rt_mutex_base * lock) __rt_mutex_futex_trylock() argument 183 __rt_mutex_futex_unlock(struct rt_mutex_base * lock,struct rt_wake_q_head * wqh) __rt_mutex_futex_unlock() argument 206 rt_mutex_futex_unlock(struct rt_mutex_base * lock) rt_mutex_futex_unlock() argument 231 __rt_mutex_init(struct rt_mutex * lock,const char * name,struct lock_class_key * key) __rt_mutex_init() argument 254 rt_mutex_init_proxy_locked(struct rt_mutex_base * lock,struct task_struct * proxy_owner) rt_mutex_init_proxy_locked() argument 285 rt_mutex_proxy_unlock(struct rt_mutex_base * lock) rt_mutex_proxy_unlock() argument 311 __rt_mutex_start_proxy_lock(struct rt_mutex_base * lock,struct rt_mutex_waiter * waiter,struct task_struct * task,struct wake_q_head * wake_q) __rt_mutex_start_proxy_lock() argument 359 rt_mutex_start_proxy_lock(struct rt_mutex_base * lock,struct rt_mutex_waiter * waiter,struct task_struct * task) rt_mutex_start_proxy_lock() argument 395 rt_mutex_wait_proxy_lock(struct rt_mutex_base * lock,struct hrtimer_sleeper * to,struct rt_mutex_waiter * waiter) rt_mutex_wait_proxy_lock() argument 435 rt_mutex_cleanup_proxy_lock(struct rt_mutex_base * lock,struct rt_mutex_waiter * waiter) rt_mutex_cleanup_proxy_lock() argument 524 __mutex_lock_common(struct mutex * lock,unsigned int state,unsigned int subclass,struct lockdep_map * nest_lock,unsigned long ip) __mutex_lock_common() argument 551 mutex_lock_nested(struct mutex * lock,unsigned int subclass) mutex_lock_nested() argument 557 _mutex_lock_nest_lock(struct mutex * lock,struct lockdep_map * nest_lock) _mutex_lock_nest_lock() argument 564 mutex_lock_interruptible_nested(struct mutex * lock,unsigned int subclass) mutex_lock_interruptible_nested() argument 571 _mutex_lock_killable(struct mutex * lock,unsigned int subclass,struct lockdep_map * nest_lock) _mutex_lock_killable() argument 578 mutex_lock_io_nested(struct mutex * lock,unsigned int subclass) mutex_lock_io_nested() argument 590 _mutex_trylock_nest_lock(struct mutex * lock,struct lockdep_map * nest_lock) _mutex_trylock_nest_lock() argument 613 mutex_lock(struct mutex * lock) mutex_lock() argument 619 mutex_lock_interruptible(struct mutex * lock) mutex_lock_interruptible() argument 625 mutex_lock_killable(struct mutex * lock) mutex_lock_killable() argument 631 mutex_lock_io(struct mutex * lock) mutex_lock_io() argument 640 mutex_trylock(struct mutex * lock) mutex_trylock() argument 650 mutex_unlock(struct mutex * lock) mutex_unlock() argument [all...] |
| H A D | ww_mutex.h | 23 __ww_waiter_first(struct mutex *lock) in __ww_waiter_first() argument 24 __must_hold(&lock->wait_lock) in __ww_waiter_first() 26 return lock->first_waiter; in __ww_waiter_first() 35 __ww_waiter_next(struct mutex *lock, struct mutex_waiter *w) in __ww_waiter_next() argument 36 __must_hold(&lock->wait_lock) in __ww_waiter_next() 43 if (lock->first_waiter == w) in __ww_waiter_next() 55 __ww_waiter_prev(struct mutex *lock, struct mutex_waiter *w) in __ww_waiter_prev() argument 56 __must_hold(&lock->wait_lock) in __ww_waiter_prev() 62 if (lock->first_waiter == w) in __ww_waiter_prev() 69 __ww_waiter_last(struct mutex *lock) in __ww_waiter_last() argument 80 __ww_waiter_add(struct mutex * lock,struct mutex_waiter * waiter,struct mutex_waiter * pos) __ww_waiter_add() argument 87 __ww_mutex_owner(struct mutex * lock) __ww_mutex_owner() argument 93 __ww_mutex_has_waiters(struct mutex * lock) __ww_mutex_has_waiters() argument 98 lock_wait_lock(struct mutex * lock,unsigned long * flags) lock_wait_lock() argument 104 unlock_wait_lock(struct mutex * lock,unsigned long * flags) unlock_wait_lock() argument 110 lockdep_assert_wait_lock_held(struct mutex * lock) lockdep_assert_wait_lock_held() argument 123 __ww_waiter_first(struct rt_mutex * lock) __ww_waiter_first() argument 133 __ww_waiter_next(struct rt_mutex * lock,struct rt_mutex_waiter * w) __ww_waiter_next() argument 142 __ww_waiter_prev(struct rt_mutex * lock,struct rt_mutex_waiter * w) __ww_waiter_prev() argument 151 __ww_waiter_last(struct rt_mutex * lock) __ww_waiter_last() argument 161 __ww_waiter_add(struct rt_mutex * lock,struct rt_mutex_waiter * waiter,struct rt_mutex_waiter * pos) __ww_waiter_add() argument 167 __ww_mutex_owner(struct rt_mutex * lock) __ww_mutex_owner() argument 173 __ww_mutex_has_waiters(struct rt_mutex * lock) __ww_mutex_has_waiters() argument 179 lock_wait_lock(struct rt_mutex * lock,unsigned long * flags) lock_wait_lock() argument 185 unlock_wait_lock(struct rt_mutex * lock,unsigned long * flags) unlock_wait_lock() argument 191 lockdep_assert_wait_lock_held(struct rt_mutex * lock) lockdep_assert_wait_lock_held() argument 312 __ww_mutex_die(struct MUTEX * lock,struct MUTEX_WAITER * waiter,struct ww_acquire_ctx * ww_ctx,struct wake_q_head * wake_q) __ww_mutex_die() argument 341 __ww_mutex_wound(struct MUTEX * lock,struct ww_acquire_ctx * ww_ctx,struct ww_acquire_ctx * hold_ctx,struct wake_q_head * wake_q) __ww_mutex_wound() argument 408 __ww_mutex_check_waiters(struct MUTEX * lock,struct ww_acquire_ctx * ww_ctx,struct wake_q_head * wake_q) __ww_mutex_check_waiters() argument 433 ww_mutex_set_context_fastpath(struct ww_mutex * lock,struct ww_acquire_ctx * ctx) ww_mutex_set_context_fastpath() argument 476 __ww_mutex_kill(struct MUTEX * lock,struct ww_acquire_ctx * ww_ctx) __ww_mutex_kill() argument 504 __ww_mutex_check_kill(struct MUTEX * lock,struct MUTEX_WAITER * waiter,struct ww_acquire_ctx * ctx) __ww_mutex_check_kill() argument 554 __ww_mutex_add_waiter(struct MUTEX_WAITER * waiter,struct MUTEX * lock,struct ww_acquire_ctx * ww_ctx,struct wake_q_head * wake_q) __ww_mutex_add_waiter() argument 625 __ww_mutex_unlock(struct ww_mutex * lock) __ww_mutex_unlock() argument [all...] |
| H A D | rtmutex.c | 27 #include <trace/events/lock.h> 37 struct rt_mutex *lock, in __ww_mutex_add_waiter() argument 44 static inline void __ww_mutex_check_waiters(struct rt_mutex *lock, in __ww_mutex_check_waiters() argument 50 static inline void ww_mutex_lock_acquired(struct ww_mutex *lock, in ww_mutex_lock_acquired() argument 55 static inline int __ww_mutex_check_kill(struct rt_mutex *lock, in __ww_mutex_check_kill() argument 69 * lock->owner state tracking: 71 * lock->owner holds the task_struct pointer of the owner. Bit 0 72 * is used to keep track of the "lock has waiters" state. 75 * NULL 0 lock is free (fast acquire possible) 76 * NULL 1 lock i 96 rt_mutex_owner_encode(struct rt_mutex_base * lock,struct task_struct * owner) rt_mutex_owner_encode() argument 108 rt_mutex_set_owner(struct rt_mutex_base * lock,struct task_struct * owner) rt_mutex_set_owner() argument 118 rt_mutex_clear_owner(struct rt_mutex_base * lock) rt_mutex_clear_owner() argument 125 clear_rt_mutex_waiters(struct rt_mutex_base * lock) clear_rt_mutex_waiters() argument 133 fixup_rt_mutex_waiters(struct rt_mutex_base * lock,bool acquire_lock) fixup_rt_mutex_waiters() argument 222 rt_mutex_cmpxchg_acquire(struct rt_mutex_base * lock,struct task_struct * old,struct task_struct * new) rt_mutex_cmpxchg_acquire() argument 229 rt_mutex_try_acquire(struct rt_mutex_base * lock) rt_mutex_try_acquire() argument 234 rt_mutex_cmpxchg_release(struct rt_mutex_base * lock,struct task_struct * old,struct task_struct * new) rt_mutex_cmpxchg_release() argument 246 mark_rt_mutex_waiters(struct rt_mutex_base * lock) mark_rt_mutex_waiters() argument 270 unlock_rt_mutex_safe(struct rt_mutex_base * lock,unsigned long flags) unlock_rt_mutex_safe() argument 306 rt_mutex_cmpxchg_acquire(struct rt_mutex_base * lock,struct task_struct * old,struct task_struct * new) rt_mutex_cmpxchg_acquire() argument 316 rt_mutex_try_acquire(struct rt_mutex_base * lock) rt_mutex_try_acquire() argument 328 rt_mutex_cmpxchg_release(struct rt_mutex_base * lock,struct task_struct * old,struct task_struct * new) rt_mutex_cmpxchg_release() argument 335 mark_rt_mutex_waiters(struct rt_mutex_base * lock) mark_rt_mutex_waiters() argument 345 unlock_rt_mutex_safe(struct rt_mutex_base * lock,unsigned long flags) unlock_rt_mutex_safe() argument 486 rt_mutex_enqueue(struct rt_mutex_base * lock,struct rt_mutex_waiter * waiter) rt_mutex_enqueue() argument 494 rt_mutex_dequeue(struct rt_mutex_base * lock,struct rt_mutex_waiter * waiter) rt_mutex_dequeue() argument 533 rt_mutex_adjust_prio(struct rt_mutex_base * lock,struct task_struct * p) rt_mutex_adjust_prio() argument 694 struct rt_mutex_base *lock; rt_mutex_adjust_prio_chain() local 1093 try_to_take_rt_mutex(struct rt_mutex_base * lock,struct task_struct * task,struct rt_mutex_waiter * waiter) try_to_take_rt_mutex() argument 1209 task_blocks_on_rt_mutex(struct rt_mutex_base * lock,struct rt_mutex_waiter * waiter,struct task_struct * task,struct ww_acquire_ctx * ww_ctx,enum rtmutex_chainwalk chwalk,struct wake_q_head * wake_q) task_blocks_on_rt_mutex() argument 1321 mark_wakeup_next_waiter(struct rt_wake_q_head * wqh,struct rt_mutex_base * lock) mark_wakeup_next_waiter() argument 1366 __rt_mutex_slowtrylock(struct rt_mutex_base * lock) __rt_mutex_slowtrylock() argument 1383 rt_mutex_slowtrylock(struct rt_mutex_base * lock) rt_mutex_slowtrylock() argument 1409 __rt_mutex_trylock(struct rt_mutex_base * lock) __rt_mutex_trylock() argument 1420 rt_mutex_slowunlock(struct rt_mutex_base * lock) rt_mutex_slowunlock() argument 1481 __rt_mutex_unlock(struct rt_mutex_base * lock) __rt_mutex_unlock() argument 1490 rtmutex_spin_on_owner(struct rt_mutex_base * lock,struct rt_mutex_waiter * waiter,struct task_struct * owner) rtmutex_spin_on_owner() argument 1527 rtmutex_spin_on_owner(struct rt_mutex_base * lock,struct rt_mutex_waiter * waiter,struct task_struct * owner) rtmutex_spin_on_owner() argument 1550 remove_waiter(struct rt_mutex_base * lock,struct rt_mutex_waiter * waiter) remove_waiter() argument 1620 rt_mutex_slowlock_block(struct rt_mutex_base * lock,struct ww_acquire_ctx * ww_ctx,unsigned int state,struct hrtimer_sleeper * timeout,struct rt_mutex_waiter * waiter,struct wake_q_head * wake_q) rt_mutex_slowlock_block() argument 1677 rt_mutex_handle_deadlock(int res,int detect_deadlock,struct rt_mutex_base * lock,struct rt_mutex_waiter * w) rt_mutex_handle_deadlock() argument 1710 __rt_mutex_slowlock(struct rt_mutex_base * lock,struct ww_acquire_ctx * ww_ctx,unsigned int state,enum rtmutex_chainwalk chwalk,struct rt_mutex_waiter * waiter,struct wake_q_head * wake_q) __rt_mutex_slowlock() argument 1770 __rt_mutex_slowlock_locked(struct rt_mutex_base * lock,struct ww_acquire_ctx * ww_ctx,unsigned int state,struct wake_q_head * wake_q) __rt_mutex_slowlock_locked() argument 1796 rt_mutex_slowlock(struct rt_mutex_base * lock,struct ww_acquire_ctx * ww_ctx,unsigned int state) rt_mutex_slowlock() argument 1829 __rt_mutex_lock(struct rt_mutex_base * lock,unsigned int state) __rt_mutex_lock() argument 1851 rtlock_slowlock_locked(struct rt_mutex_base * lock,struct wake_q_head * wake_q) rtlock_slowlock_locked() argument 1911 rtlock_slowlock(struct rt_mutex_base * lock) rtlock_slowlock() argument [all...] |
| H A D | qspinlock_paravirt.h | 81 static inline bool pv_hybrid_queued_unfair_trylock(struct qspinlock *lock) in pv_hybrid_queued_unfair_trylock() argument 88 int val = atomic_read(&lock->val); in pv_hybrid_queued_unfair_trylock() 92 try_cmpxchg_acquire(&lock->locked, &old, _Q_LOCKED_VAL)) { in pv_hybrid_queued_unfair_trylock() 110 static __always_inline void set_pending(struct qspinlock *lock) in set_pending() argument 112 WRITE_ONCE(lock->pending, 1); in set_pending() 120 static __always_inline bool trylock_clear_pending(struct qspinlock *lock) in trylock_clear_pending() argument 124 return !READ_ONCE(lock->locked) && in trylock_clear_pending() 125 try_cmpxchg_acquire(&lock->locked_pending, &old, _Q_LOCKED_VAL); in trylock_clear_pending() 128 static __always_inline void set_pending(struct qspinlock *lock) in set_pending() argument 130 atomic_or(_Q_PENDING_VAL, &lock->val); in set_pending() [all …]
|
| H A D | qspinlock.c | 25 #include <trace/events/lock.h> 36 * MCS lock. A copy of the original MCS lock paper ("Algorithms for Scalable 42 * This queued spinlock implementation is based on the MCS lock, however to 46 * In particular; where the traditional MCS lock consists of a tail pointer 55 * number. With one byte for the lock value and 3 bytes for the tail, only a 56 * 32-bit word is now needed. Even though we only need 1 bit for the lock, 60 * We also change the first spinner to spin on the lock bit instead of its 61 * node; whereby avoiding the need to carry a node from lock to unlock, and 62 * preserving existing lock AP 149 clear_pending(struct qspinlock * lock) clear_pending() argument 162 clear_pending_set_locked(struct qspinlock * lock) clear_pending_set_locked() argument 177 xchg_tail(struct qspinlock * lock,u32 tail) xchg_tail() argument 195 clear_pending(struct qspinlock * lock) clear_pending() argument 206 clear_pending_set_locked(struct qspinlock * lock) clear_pending_set_locked() argument 221 xchg_tail(struct qspinlock * lock,u32 tail) xchg_tail() argument 247 queued_fetch_set_pending_acquire(struct qspinlock * lock) queued_fetch_set_pending_acquire() argument 259 set_locked(struct qspinlock * lock) set_locked() argument 273 __pv_kick_node(struct qspinlock * lock,struct mcs_spinlock * node) __pv_kick_node() argument 275 __pv_wait_head_or_lock(struct qspinlock * lock,struct mcs_spinlock * node) __pv_wait_head_or_lock() argument 313 queued_spin_lock_slowpath(struct qspinlock * lock,u32 val) queued_spin_lock_slowpath() argument [all...] |
| H A D | qrwlock.c | 21 void __lockfunc queued_read_lock_slowpath(struct qrwlock *lock) in queued_read_lock_slowpath() argument 33 atomic_cond_read_acquire(&lock->cnts, !(VAL & _QW_LOCKED)); in queued_read_lock_slowpath() 36 atomic_sub(_QR_BIAS, &lock->cnts); in queued_read_lock_slowpath() 38 trace_contention_begin(lock, LCB_F_SPIN | LCB_F_READ); in queued_read_lock_slowpath() 43 arch_spin_lock(&lock->wait_lock); in queued_read_lock_slowpath() 44 atomic_add(_QR_BIAS, &lock->cnts); in queued_read_lock_slowpath() 51 atomic_cond_read_acquire(&lock->cnts, !(VAL & _QW_LOCKED)); in queued_read_lock_slowpath() 56 arch_spin_unlock(&lock->wait_lock); in queued_read_lock_slowpath() 58 trace_contention_end(lock, 0); in queued_read_lock_slowpath() 66 void __lockfunc queued_write_lock_slowpath(struct qrwlock *lock) in queued_write_lock_slowpath() argument [all …]
|
| /linux/include/linux/ |
| H A D | local_lock_internal.h | 81 #define __local_lock_init(lock) \ argument 85 debug_check_no_locks_freed((void *)lock, sizeof(*lock));\ 86 lockdep_init_map_type(&(lock)->dep_map, #lock, &__key, \ 89 local_lock_debug_init(lock); \ 92 #define __local_trylock_init(lock) \ argument 94 __local_lock_init((local_lock_t *)lock); \ 97 #define __spinlock_nested_bh_init(lock) \ argument 101 debug_check_no_locks_freed((void *)lock, sizeof(*lock));\ 102 lockdep_init_map_type(&(lock)->dep_map, #lock, &__key, \ 105 local_lock_debug_init(lock); \ [all …]
|
| /linux/arch/alpha/include/asm/ |
| H A D | spinlock.h | 17 #define arch_spin_is_locked(x) ((x)->lock != 0) 19 static inline int arch_spin_value_unlocked(arch_spinlock_t lock) in arch_spin_value_unlocked() argument 21 return lock.lock == 0; in arch_spin_value_unlocked() 24 static inline void arch_spin_unlock(arch_spinlock_t * lock) in arch_spin_unlock() argument 27 lock->lock = 0; in arch_spin_unlock() 30 static inline void arch_spin_lock(arch_spinlock_t * lock) in arch_spin_lock() argument 46 : "=&r" (tmp), "=m" (lock->lock) in arch_spin_lock() 47 : "m"(lock->lock) : "memory"); in arch_spin_lock() 50 static inline int arch_spin_trylock(arch_spinlock_t *lock) in arch_spin_trylock() argument 52 return !test_and_set_bit(0, &lock->lock); in arch_spin_trylock() [all …]
|
| /linux/drivers/md/persistent-data/ |
| H A D | dm-block-manager.c | 45 spinlock_t lock; member 61 static unsigned int __find_holder(struct block_lock *lock, in __find_holder() argument 67 if (lock->holders[i] == task) in __find_holder() 75 static void __add_holder(struct block_lock *lock, struct task_struct *task) in __add_holder() argument 77 unsigned int h = __find_holder(lock, NULL); in __add_holder() 83 lock->holders[h] = task; in __add_holder() 86 t = lock->traces + h; in __add_holder() 92 static void __del_holder(struct block_lock *lock, struct task_struct *task) in __del_holder() argument 94 unsigned int h = __find_holder(lock, task); in __del_holder() 96 lock->holders[h] = NULL; in __del_holder() [all …]
|
| /linux/fs/ocfs2/dlm/ |
| H A D | dlmast.c | 35 struct dlm_lock *lock); 36 static int dlm_should_cancel_bast(struct dlm_ctxt *dlm, struct dlm_lock *lock); 47 static int dlm_should_cancel_bast(struct dlm_ctxt *dlm, struct dlm_lock *lock) in dlm_should_cancel_bast() argument 50 assert_spin_locked(&lock->spinlock); in dlm_should_cancel_bast() 52 if (lock->ml.highest_blocked == LKM_IVMODE) in dlm_should_cancel_bast() 54 BUG_ON(lock->ml.highest_blocked == LKM_NLMODE); in dlm_should_cancel_bast() 56 if (lock->bast_pending && in dlm_should_cancel_bast() 57 list_empty(&lock->bast_list)) in dlm_should_cancel_bast() 61 if (lock->ml.type == LKM_EXMODE) in dlm_should_cancel_bast() 64 else if (lock->ml.type == LKM_NLMODE) in dlm_should_cancel_bast() [all …]
|
| H A D | dlmlock.c | 45 struct dlm_lock *lock, int flags); 49 static void dlm_lock_detach_lockres(struct dlm_lock *lock); 74 struct dlm_lock *lock) in dlm_can_grant_new_lock() argument 79 if (!dlm_lock_compatible(tmplock->ml.type, lock->ml.type)) in dlm_can_grant_new_lock() 84 if (!dlm_lock_compatible(tmplock->ml.type, lock->ml.type)) in dlm_can_grant_new_lock() 87 lock->ml.type)) in dlm_can_grant_new_lock() 103 struct dlm_lock *lock, int flags) in dlmlock_master() argument 108 mlog(0, "type=%d\n", lock->ml.type); in dlmlock_master() 115 lock->ml.node != dlm->node_num) { in dlmlock_master() 124 if (dlm_can_grant_new_lock(res, lock)) { in dlmlock_master() [all …]
|
| H A D | dlmconvert.c | 43 struct dlm_lock *lock, int flags, 48 struct dlm_lock *lock, int flags, int type); 61 struct dlm_lock *lock, int flags, int type) in dlmconvert_master() argument 72 status = __dlmconvert_master(dlm, res, lock, flags, type, in dlmconvert_master() 83 dlm_queue_ast(dlm, lock); in dlmconvert_master() 104 struct dlm_lock *lock, int flags, in __dlmconvert_master() argument 114 lock->ml.type, lock->ml.convert_type, type); in __dlmconvert_master() 116 spin_lock(&lock->spinlock); in __dlmconvert_master() 119 if (lock->ml.convert_type != LKM_IVMODE) { in __dlmconvert_master() 127 if (!dlm_lock_on_list(&res->granted, lock)) { in __dlmconvert_master() [all …]
|
| H A D | dlmunlock.c | 43 struct dlm_lock *lock, 48 struct dlm_lock *lock, 54 struct dlm_lock *lock, 83 struct dlm_lock *lock, in dlmunlock_common() argument 105 in_use = !list_empty(&lock->ast_list); in dlmunlock_common() 125 spin_lock(&lock->spinlock); in dlmunlock_common() 140 status = dlm_get_cancel_actions(dlm, res, lock, lksb, &actions); in dlmunlock_common() 142 status = dlm_get_unlock_actions(dlm, res, lock, lksb, &actions); in dlmunlock_common() 161 lock->cancel_pending = 1; in dlmunlock_common() 163 lock->unlock_pending = 1; in dlmunlock_common() [all …]
|
| /linux/arch/hexagon/include/asm/ |
| H A D | spinlock.h | 28 static inline void arch_read_lock(arch_rwlock_t *lock) in arch_read_lock() argument 37 : "r" (&lock->lock) in arch_read_lock() 43 static inline void arch_read_unlock(arch_rwlock_t *lock) in arch_read_unlock() argument 51 : "r" (&lock->lock) in arch_read_unlock() 58 static inline int arch_read_trylock(arch_rwlock_t *lock) in arch_read_trylock() argument 69 : "r" (&lock->lock) in arch_read_trylock() 76 static inline void arch_write_lock(arch_rwlock_t *lock) in arch_write_lock() argument 85 : "r" (&lock->lock) in arch_write_lock() 91 static inline int arch_write_trylock(arch_rwlock_t *lock) in arch_write_trylock() argument 102 : "r" (&lock->lock) in arch_write_trylock() [all …]
|
| /linux/arch/powerpc/include/asm/ |
| H A D | simple_spinlock.h | 35 static __always_inline int arch_spin_value_unlocked(arch_spinlock_t lock) in arch_spin_value_unlocked() argument 37 return lock.slock == 0; in arch_spin_value_unlocked() 40 static inline int arch_spin_is_locked(arch_spinlock_t *lock) in arch_spin_is_locked() argument 42 return !arch_spin_value_unlocked(READ_ONCE(*lock)); in arch_spin_is_locked() 49 static inline unsigned long __arch_spin_trylock(arch_spinlock_t *lock) in __arch_spin_trylock() argument 64 : "r" (token), "r" (&lock->slock), [eh] "n" (eh) in __arch_spin_trylock() 70 static inline int arch_spin_trylock(arch_spinlock_t *lock) in arch_spin_trylock() argument 72 return __arch_spin_trylock(lock) == 0; in arch_spin_trylock() 91 void splpar_spin_yield(arch_spinlock_t *lock); 92 void splpar_rw_yield(arch_rwlock_t *lock); [all …]
|
| /linux/drivers/acpi/acpica/ |
| H A D | utlock.c | 4 * Module Name: utlock - Reader/Writer lock interfaces 21 * PARAMETERS: lock - Pointer to a valid RW lock 25 * DESCRIPTION: Reader/writer lock creation and deletion interfaces. 28 acpi_status acpi_ut_create_rw_lock(struct acpi_rw_lock *lock) in acpi_ut_create_rw_lock() argument 32 lock->num_readers = 0; in acpi_ut_create_rw_lock() 33 status = acpi_os_create_mutex(&lock->reader_mutex); in acpi_ut_create_rw_lock() 38 status = acpi_os_create_mutex(&lock->writer_mutex); in acpi_ut_create_rw_lock() 42 void acpi_ut_delete_rw_lock(struct acpi_rw_lock *lock) in acpi_ut_delete_rw_lock() argument 45 acpi_os_delete_mutex(lock in acpi_ut_delete_rw_lock() 71 acpi_ut_acquire_read_lock(struct acpi_rw_lock * lock) acpi_ut_acquire_read_lock() argument 93 acpi_ut_release_read_lock(struct acpi_rw_lock * lock) acpi_ut_release_read_lock() argument 129 acpi_ut_acquire_write_lock(struct acpi_rw_lock * lock) acpi_ut_acquire_write_lock() argument 137 acpi_ut_release_write_lock(struct acpi_rw_lock * lock) acpi_ut_release_write_lock() argument [all...] |
| /linux/tools/testing/selftests/bpf/progs/ |
| H A D | linked_list.c | 12 struct bpf_spin_lock lock; member 28 int list_push_pop(struct bpf_spin_lock *lock, struct bpf_list_head *head, bool leave_in_map) in list_push_pop() argument 37 bpf_spin_lock(lock); in list_push_pop() 39 bpf_spin_unlock(lock); in list_push_pop() 46 bpf_spin_lock(lock); in list_push_pop() 48 bpf_spin_unlock(lock); in list_push_pop() 56 bpf_spin_lock(lock); in list_push_pop() 59 bpf_spin_unlock(lock); in list_push_pop() 62 bpf_spin_lock(lock); in list_push_pop() 64 bpf_spin_unlock(lock); in list_push_pop() [all …]
|
| /linux/include/trace/events/ |
| H A D | lock.h | 3 #define TRACE_SYSTEM lock 10 /* flags for lock:contention_begin */ 25 TP_PROTO(struct lockdep_map *lock, unsigned int subclass, 29 TP_ARGS(lock, subclass, trylock, read, check, next_lock, ip), 33 __string(name, lock->name) 40 __entry->lockdep_addr = lock; 49 DECLARE_EVENT_CLASS(lock, 51 TP_PROTO(struct lockdep_map *lock, unsigned long ip), 53 TP_ARGS(lock, ip), 56 __string( name, lock [all...] |
| /linux/arch/arm/include/asm/ |
| H A D | spinlock.h | 56 static inline void arch_spin_lock(arch_spinlock_t *lock) in arch_spin_lock() argument 62 prefetchw(&lock->slock); in arch_spin_lock() 70 : "r" (&lock->slock), "I" (1 << TICKET_SHIFT) in arch_spin_lock() 75 lockval.tickets.owner = READ_ONCE(lock->tickets.owner); in arch_spin_lock() 81 static inline int arch_spin_trylock(arch_spinlock_t *lock) in arch_spin_trylock() argument 86 prefetchw(&lock->slock); in arch_spin_trylock() 95 : "r" (&lock->slock), "I" (1 << TICKET_SHIFT) in arch_spin_trylock() 107 static inline void arch_spin_unlock(arch_spinlock_t *lock) in arch_spin_unlock() argument 110 lock->tickets.owner++; in arch_spin_unlock() 114 static inline int arch_spin_value_unlocked(arch_spinlock_t lock) in arch_spin_value_unlocked() argument [all …]
|
| /linux/tools/perf/tests/shell/ |
| H A D | lock_contention.sh | 36 if ! perf list tracepoint | grep -q lock:contention_begin; then 53 perf lock record -o ${perfdata} -- perf bench sched messaging -p > /dev/null 2>&1 55 perf lock contention -i ${perfdata} -E 1 -q 2> ${result} 67 if ! perf lock con -b true > /dev/null 2>&1 ; then 73 perf lock con -a -b -E 1 -q -- perf bench sched messaging -p > /dev/null 2> ${result} 84 perf lock record -o- -- perf bench sched messaging -p 2> ${errout} | \ 85 perf lock contention -i- -E 1 -q 2> ${result} 98 perf lock contention -i ${perfdata} -t -E 1 -q 2> ${result} 105 if ! perf lock con -b true > /dev/null 2>&1 ; then 110 perf lock con -a -b -t -E 1 -q -- perf bench sched messaging -p > /dev/null 2> ${result} [all …]
|
| /linux/tools/virtio/linux/ |
| H A D | spinlock.h | 8 static inline void spin_lock_init(spinlock_t *lock) in spin_lock_init() argument 10 int r = pthread_spin_init(lock, 0); in spin_lock_init() 14 static inline void spin_lock(spinlock_t *lock) in spin_lock() argument 16 int ret = pthread_spin_lock(lock); in spin_lock() 20 static inline void spin_unlock(spinlock_t *lock) in spin_unlock() argument 22 int ret = pthread_spin_unlock(lock); in spin_unlock() 26 static inline void spin_lock_bh(spinlock_t *lock) in spin_lock_bh() argument 28 spin_lock(lock); in spin_lock_bh() 31 static inline void spin_unlock_bh(spinlock_t *lock) in spin_unlock_bh() argument 33 spin_unlock(lock); in spin_unlock_bh() [all …]
|
| /linux/include/asm-generic/ |
| H A D | qrwlock.h | 36 extern void queued_read_lock_slowpath(struct qrwlock *lock); 37 extern void queued_write_lock_slowpath(struct qrwlock *lock); 44 static inline int queued_read_trylock(struct qrwlock *lock) in queued_read_trylock() argument 48 cnts = atomic_read(&lock->cnts); in queued_read_trylock() 50 cnts = (u32)atomic_add_return_acquire(_QR_BIAS, &lock->cnts); in queued_read_trylock() 53 atomic_sub(_QR_BIAS, &lock->cnts); in queued_read_trylock() 63 static inline int queued_write_trylock(struct qrwlock *lock) in queued_write_trylock() argument 67 cnts = atomic_read(&lock->cnts); in queued_write_trylock() 71 return likely(atomic_try_cmpxchg_acquire(&lock->cnts, &cnts, in queued_write_trylock() 78 static inline void queued_read_lock(struct qrwlock *lock) in queued_read_lock() argument [all …]
|
| /linux/fs/btrfs/ |
| H A D | locking.h | 104 #define btrfs_might_wait_for_event(owner, lock) \ argument 106 rwsem_acquire(&owner->lock##_map, 0, 0, _THIS_IP_); \ 107 rwsem_release(&owner->lock##_map, _THIS_IP_); \ 121 #define btrfs_lockdep_acquire(owner, lock) \ argument 122 rwsem_acquire_read(&owner->lock##_map, 0, 0, _THIS_IP_) 128 #define btrfs_lockdep_release(owner, lock) \ argument 129 rwsem_release(&owner->lock##_map, _THIS_IP_) 135 #define btrfs_lockdep_inode_acquire(owner, lock) \ argument 136 rwsem_acquire_read(&owner->vfs_inode.lock.dep_map, 0, 0, _THIS_IP_) 138 #define btrfs_lockdep_inode_release(owner, lock) \ argument [all …]
|
| /linux/arch/sh/include/asm/ |
| H A D | spinlock-cas.h | 26 #define arch_spin_is_locked(x) ((x)->lock <= 0) 28 static inline void arch_spin_lock(arch_spinlock_t *lock) in arch_spin_lock() argument 30 while (!__sl_cas(&lock->lock, 1, 0)); in arch_spin_lock() 33 static inline void arch_spin_unlock(arch_spinlock_t *lock) in arch_spin_unlock() argument 35 __sl_cas(&lock->lock, 0, 1); in arch_spin_unlock() 38 static inline int arch_spin_trylock(arch_spinlock_t *lock) in arch_spin_trylock() argument 40 return __sl_cas(&lock->lock, 1, 0); in arch_spin_trylock() 55 do old = rw->lock; in arch_read_lock() 56 while (!old || __sl_cas(&rw->lock, old, old-1) != old); in arch_read_lock() 62 do old = rw->lock; in arch_read_unlock() [all …]
|