Lines Matching refs:waiter
198 static inline bool __mutex_waiter_is_first(struct mutex *lock, struct mutex_waiter *waiter) in __mutex_waiter_is_first() argument
200 return list_first_entry(&lock->wait_list, struct mutex_waiter, list) == waiter; in __mutex_waiter_is_first()
208 __mutex_add_waiter(struct mutex *lock, struct mutex_waiter *waiter, in __mutex_add_waiter() argument
211 debug_mutex_add_waiter(lock, waiter, current); in __mutex_add_waiter()
213 list_add_tail(&waiter->list, list); in __mutex_add_waiter()
214 if (__mutex_waiter_is_first(lock, waiter)) in __mutex_add_waiter()
367 __ww_mutex_die(struct mutex *lock, struct mutex_waiter *waiter, in __ww_mutex_die() argument
373 if (waiter->ww_ctx->acquired > 0 && in __ww_mutex_die()
374 __ww_ctx_stamp_after(waiter->ww_ctx, ww_ctx)) { in __ww_mutex_die()
375 debug_mutex_wake_waiter(lock, waiter); in __ww_mutex_die()
376 wake_up_process(waiter->task); in __ww_mutex_die()
503 struct mutex_waiter *waiter) in ww_mutex_spin_on_owner() argument
530 if (!waiter && (atomic_long_read(&lock->owner) & MUTEX_FLAG_WAITERS)) in ww_mutex_spin_on_owner()
537 if (waiter && !__mutex_waiter_is_first(lock, waiter)) in ww_mutex_spin_on_owner()
551 struct ww_acquire_ctx *ww_ctx, struct mutex_waiter *waiter) in mutex_spin_on_owner() argument
574 if (ww_ctx && !ww_mutex_spin_on_owner(lock, ww_ctx, waiter)) { in mutex_spin_on_owner()
639 const bool use_ww_ctx, struct mutex_waiter *waiter) in mutex_optimistic_spin() argument
641 if (!waiter) { in mutex_optimistic_spin()
673 if (!mutex_spin_on_owner(lock, owner, ww_ctx, waiter)) in mutex_optimistic_spin()
685 if (!waiter) in mutex_optimistic_spin()
692 if (!waiter) in mutex_optimistic_spin()
715 const bool use_ww_ctx, struct mutex_waiter *waiter) in mutex_optimistic_spin() argument
805 __ww_mutex_check_kill(struct mutex *lock, struct mutex_waiter *waiter, in __ww_mutex_check_kill() argument
829 cur = waiter; in __ww_mutex_check_kill()
852 __ww_mutex_add_waiter(struct mutex_waiter *waiter, in __ww_mutex_add_waiter() argument
861 __mutex_add_waiter(lock, waiter, &lock->wait_list); in __ww_mutex_add_waiter()
901 __mutex_add_waiter(lock, waiter, pos); in __ww_mutex_add_waiter()
930 struct mutex_waiter waiter; in __mutex_lock_common() local
979 debug_mutex_lock_common(lock, &waiter); in __mutex_lock_common()
985 __mutex_add_waiter(lock, &waiter, &lock->wait_list); in __mutex_lock_common()
989 waiter.ww_ctx = MUTEX_POISON_WW_CTX; in __mutex_lock_common()
996 ret = __ww_mutex_add_waiter(&waiter, lock, ww_ctx); in __mutex_lock_common()
1000 waiter.ww_ctx = ww_ctx; in __mutex_lock_common()
1003 waiter.task = current; in __mutex_lock_common()
1027 ret = __ww_mutex_check_kill(lock, &waiter, ww_ctx); in __mutex_lock_common()
1040 first = __mutex_waiter_is_first(lock, &waiter); in __mutex_lock_common()
1052 (first && mutex_optimistic_spin(lock, ww_ctx, use_ww_ctx, &waiter))) in __mutex_lock_common()
1067 !__mutex_waiter_is_first(lock, &waiter)) in __mutex_lock_common()
1071 mutex_remove_waiter(lock, &waiter, current); in __mutex_lock_common()
1075 debug_mutex_free_waiter(&waiter); in __mutex_lock_common()
1090 mutex_remove_waiter(lock, &waiter, current); in __mutex_lock_common()
1093 debug_mutex_free_waiter(&waiter); in __mutex_lock_common()
1265 struct mutex_waiter *waiter = in __mutex_unlock_slowpath() local
1269 next = waiter->task; in __mutex_unlock_slowpath()
1271 debug_mutex_wake_waiter(lock, waiter); in __mutex_unlock_slowpath()