Lines Matching refs:waiter
200 static inline bool __mutex_waiter_is_first(struct mutex *lock, struct mutex_waiter *waiter) in __mutex_waiter_is_first() argument
202 return list_first_entry(&lock->wait_list, struct mutex_waiter, list) == waiter; in __mutex_waiter_is_first()
210 __mutex_add_waiter(struct mutex *lock, struct mutex_waiter *waiter, in __mutex_add_waiter() argument
213 debug_mutex_add_waiter(lock, waiter, current); in __mutex_add_waiter()
215 list_add_tail(&waiter->list, list); in __mutex_add_waiter()
216 if (__mutex_waiter_is_first(lock, waiter)) in __mutex_add_waiter()
221 __mutex_remove_waiter(struct mutex *lock, struct mutex_waiter *waiter) in __mutex_remove_waiter() argument
223 list_del(&waiter->list); in __mutex_remove_waiter()
227 debug_mutex_remove_waiter(lock, waiter, current); in __mutex_remove_waiter()
379 __ww_mutex_die(struct mutex *lock, struct mutex_waiter *waiter, in __ww_mutex_die() argument
385 if (waiter->ww_ctx->acquired > 0 && in __ww_mutex_die()
386 __ww_ctx_stamp_after(waiter->ww_ctx, ww_ctx)) { in __ww_mutex_die()
387 debug_mutex_wake_waiter(lock, waiter); in __ww_mutex_die()
388 wake_up_process(waiter->task); in __ww_mutex_die()
515 struct mutex_waiter *waiter) in ww_mutex_spin_on_owner() argument
542 if (!waiter && (atomic_long_read(&lock->owner) & MUTEX_FLAG_WAITERS)) in ww_mutex_spin_on_owner()
549 if (waiter && !__mutex_waiter_is_first(lock, waiter)) in ww_mutex_spin_on_owner()
563 struct ww_acquire_ctx *ww_ctx, struct mutex_waiter *waiter) in mutex_spin_on_owner() argument
586 if (ww_ctx && !ww_mutex_spin_on_owner(lock, ww_ctx, waiter)) { in mutex_spin_on_owner()
651 struct mutex_waiter *waiter) in mutex_optimistic_spin() argument
653 if (!waiter) { in mutex_optimistic_spin()
685 if (!mutex_spin_on_owner(lock, owner, ww_ctx, waiter)) in mutex_optimistic_spin()
697 if (!waiter) in mutex_optimistic_spin()
704 if (!waiter) in mutex_optimistic_spin()
727 struct mutex_waiter *waiter) in mutex_optimistic_spin() argument
817 __ww_mutex_check_kill(struct mutex *lock, struct mutex_waiter *waiter, in __ww_mutex_check_kill() argument
841 cur = waiter; in __ww_mutex_check_kill()
864 __ww_mutex_add_waiter(struct mutex_waiter *waiter, in __ww_mutex_add_waiter() argument
873 __mutex_add_waiter(lock, waiter, &lock->wait_list); in __ww_mutex_add_waiter()
913 __mutex_add_waiter(lock, waiter, pos); in __ww_mutex_add_waiter()
942 struct mutex_waiter waiter; in __mutex_lock_common() local
993 debug_mutex_lock_common(lock, &waiter); in __mutex_lock_common()
999 __mutex_add_waiter(lock, &waiter, &lock->wait_list); in __mutex_lock_common()
1003 waiter.ww_ctx = MUTEX_POISON_WW_CTX; in __mutex_lock_common()
1010 ret = __ww_mutex_add_waiter(&waiter, lock, ww_ctx); in __mutex_lock_common()
1014 waiter.ww_ctx = ww_ctx; in __mutex_lock_common()
1017 waiter.task = current; in __mutex_lock_common()
1044 ret = __ww_mutex_check_kill(lock, &waiter, ww_ctx); in __mutex_lock_common()
1052 first = __mutex_waiter_is_first(lock, &waiter); in __mutex_lock_common()
1063 (first && mutex_optimistic_spin(lock, ww_ctx, &waiter))) in __mutex_lock_common()
1079 !__mutex_waiter_is_first(lock, &waiter)) in __mutex_lock_common()
1083 __mutex_remove_waiter(lock, &waiter); in __mutex_lock_common()
1085 debug_mutex_free_waiter(&waiter); in __mutex_lock_common()
1101 __mutex_remove_waiter(lock, &waiter); in __mutex_lock_common()
1104 debug_mutex_free_waiter(&waiter); in __mutex_lock_common()
1276 struct mutex_waiter *waiter = in __mutex_unlock_slowpath() local
1280 next = waiter->task; in __mutex_unlock_slowpath()
1282 debug_mutex_wake_waiter(lock, waiter); in __mutex_unlock_slowpath()