Lines Matching refs:waiter

189 static inline bool __mutex_waiter_is_first(struct mutex *lock, struct mutex_waiter *waiter)  in __mutex_waiter_is_first()  argument
191 return list_first_entry(&lock->wait_list, struct mutex_waiter, list) == waiter; in __mutex_waiter_is_first()
199 __mutex_add_waiter(struct mutex *lock, struct mutex_waiter *waiter, in __mutex_add_waiter() argument
202 debug_mutex_add_waiter(lock, waiter, current); in __mutex_add_waiter()
204 list_add_tail(&waiter->list, list); in __mutex_add_waiter()
205 if (__mutex_waiter_is_first(lock, waiter)) in __mutex_add_waiter()
210 __mutex_remove_waiter(struct mutex *lock, struct mutex_waiter *waiter) in __mutex_remove_waiter() argument
212 list_del(&waiter->list); in __mutex_remove_waiter()
216 debug_mutex_remove_waiter(lock, waiter, current); in __mutex_remove_waiter()
299 struct mutex_waiter *waiter) in ww_mutex_spin_on_owner() argument
326 if (!waiter && (atomic_long_read(&lock->owner) & MUTEX_FLAG_WAITERS)) in ww_mutex_spin_on_owner()
333 if (waiter && !__mutex_waiter_is_first(lock, waiter)) in ww_mutex_spin_on_owner()
347 struct ww_acquire_ctx *ww_ctx, struct mutex_waiter *waiter) in mutex_spin_on_owner() argument
370 if (ww_ctx && !ww_mutex_spin_on_owner(lock, ww_ctx, waiter)) { in mutex_spin_on_owner()
435 struct mutex_waiter *waiter) in mutex_optimistic_spin() argument
437 if (!waiter) { in mutex_optimistic_spin()
469 if (!mutex_spin_on_owner(lock, owner, ww_ctx, waiter)) in mutex_optimistic_spin()
481 if (!waiter) in mutex_optimistic_spin()
488 if (!waiter) in mutex_optimistic_spin()
511 struct mutex_waiter *waiter) in mutex_optimistic_spin() argument
566 struct mutex_waiter waiter; in __mutex_lock_common() local
619 debug_mutex_lock_common(lock, &waiter); in __mutex_lock_common()
620 waiter.task = current; in __mutex_lock_common()
622 waiter.ww_ctx = ww_ctx; in __mutex_lock_common()
628 __mutex_add_waiter(lock, &waiter, &lock->wait_list); in __mutex_lock_common()
634 ret = __ww_mutex_add_waiter(&waiter, lock, ww_ctx); in __mutex_lock_common()
663 ret = __ww_mutex_check_kill(lock, &waiter, ww_ctx); in __mutex_lock_common()
671 first = __mutex_waiter_is_first(lock, &waiter); in __mutex_lock_common()
680 (first && mutex_optimistic_spin(lock, ww_ctx, &waiter))) in __mutex_lock_common()
695 !__mutex_waiter_is_first(lock, &waiter)) in __mutex_lock_common()
699 __mutex_remove_waiter(lock, &waiter); in __mutex_lock_common()
701 debug_mutex_free_waiter(&waiter); in __mutex_lock_common()
716 __mutex_remove_waiter(lock, &waiter); in __mutex_lock_common()
719 debug_mutex_free_waiter(&waiter); in __mutex_lock_common()
880 struct mutex_waiter *waiter = in __mutex_unlock_slowpath() local
884 next = waiter->task; in __mutex_unlock_slowpath()
886 debug_mutex_wake_waiter(lock, waiter); in __mutex_unlock_slowpath()