Lines Matching refs:waiter
180 static inline bool __mutex_waiter_is_first(struct mutex *lock, struct mutex_waiter *waiter) in __mutex_waiter_is_first() argument
182 return list_first_entry(&lock->wait_list, struct mutex_waiter, list) == waiter; in __mutex_waiter_is_first()
190 __mutex_add_waiter(struct mutex *lock, struct mutex_waiter *waiter, in __mutex_add_waiter() argument
196 debug_mutex_add_waiter(lock, waiter, current); in __mutex_add_waiter()
198 list_add_tail(&waiter->list, list); in __mutex_add_waiter()
199 if (__mutex_waiter_is_first(lock, waiter)) in __mutex_add_waiter()
204 __mutex_remove_waiter(struct mutex *lock, struct mutex_waiter *waiter) in __mutex_remove_waiter() argument
206 list_del(&waiter->list); in __mutex_remove_waiter()
210 debug_mutex_remove_waiter(lock, waiter, current); in __mutex_remove_waiter()
296 struct mutex_waiter *waiter) in ww_mutex_spin_on_owner() argument
323 if (!waiter && (atomic_long_read(&lock->owner) & MUTEX_FLAG_WAITERS)) in ww_mutex_spin_on_owner()
330 if (waiter && !__mutex_waiter_is_first(lock, waiter)) in ww_mutex_spin_on_owner()
344 struct ww_acquire_ctx *ww_ctx, struct mutex_waiter *waiter) in mutex_spin_on_owner() argument
369 if (ww_ctx && !ww_mutex_spin_on_owner(lock, ww_ctx, waiter)) { in mutex_spin_on_owner()
433 struct mutex_waiter *waiter) in mutex_optimistic_spin() argument
435 if (!waiter) { in mutex_optimistic_spin()
467 if (!mutex_spin_on_owner(lock, owner, ww_ctx, waiter)) in mutex_optimistic_spin()
479 if (!waiter) in mutex_optimistic_spin()
486 if (!waiter) in mutex_optimistic_spin()
509 struct mutex_waiter *waiter) in mutex_optimistic_spin() argument
570 struct mutex_waiter waiter; in __mutex_lock_common() local
626 debug_mutex_lock_common(lock, &waiter); in __mutex_lock_common()
627 waiter.task = current; in __mutex_lock_common()
629 waiter.ww_ctx = ww_ctx; in __mutex_lock_common()
635 __mutex_add_waiter(lock, &waiter, &lock->wait_list); in __mutex_lock_common()
641 ret = __ww_mutex_add_waiter(&waiter, lock, ww_ctx, &wake_q); in __mutex_lock_common()
671 ret = __ww_mutex_check_kill(lock, &waiter, ww_ctx); in __mutex_lock_common()
680 first = __mutex_waiter_is_first(lock, &waiter); in __mutex_lock_common()
693 if (mutex_optimistic_spin(lock, ww_ctx, &waiter)) in __mutex_lock_common()
710 !__mutex_waiter_is_first(lock, &waiter)) in __mutex_lock_common()
714 __mutex_remove_waiter(lock, &waiter); in __mutex_lock_common()
716 debug_mutex_free_waiter(&waiter); in __mutex_lock_common()
732 __mutex_remove_waiter(lock, &waiter); in __mutex_lock_common()
736 debug_mutex_free_waiter(&waiter); in __mutex_lock_common()
936 struct mutex_waiter *waiter = in __mutex_unlock_slowpath() local
940 next = waiter->task; in __mutex_unlock_slowpath()
942 debug_mutex_wake_waiter(lock, waiter); in __mutex_unlock_slowpath()