Lines Matching refs:waiter
192 static inline bool __mutex_waiter_is_first(struct mutex *lock, struct mutex_waiter *waiter) in __mutex_waiter_is_first() argument
194 return list_first_entry(&lock->wait_list, struct mutex_waiter, list) == waiter; in __mutex_waiter_is_first()
202 __mutex_add_waiter(struct mutex *lock, struct mutex_waiter *waiter, in __mutex_add_waiter() argument
205 debug_mutex_add_waiter(lock, waiter, current); in __mutex_add_waiter()
207 list_add_tail(&waiter->list, list); in __mutex_add_waiter()
208 if (__mutex_waiter_is_first(lock, waiter)) in __mutex_add_waiter()
213 __mutex_remove_waiter(struct mutex *lock, struct mutex_waiter *waiter) in __mutex_remove_waiter() argument
215 list_del(&waiter->list); in __mutex_remove_waiter()
219 debug_mutex_remove_waiter(lock, waiter, current); in __mutex_remove_waiter()
302 struct mutex_waiter *waiter) in ww_mutex_spin_on_owner() argument
329 if (!waiter && (atomic_long_read(&lock->owner) & MUTEX_FLAG_WAITERS)) in ww_mutex_spin_on_owner()
336 if (waiter && !__mutex_waiter_is_first(lock, waiter)) in ww_mutex_spin_on_owner()
350 struct ww_acquire_ctx *ww_ctx, struct mutex_waiter *waiter) in mutex_spin_on_owner() argument
376 if (ww_ctx && !ww_mutex_spin_on_owner(lock, ww_ctx, waiter)) { in mutex_spin_on_owner()
446 struct mutex_waiter *waiter) in mutex_optimistic_spin() argument
448 if (!waiter) { in mutex_optimistic_spin()
480 if (!mutex_spin_on_owner(lock, owner, ww_ctx, waiter)) in mutex_optimistic_spin()
492 if (!waiter) in mutex_optimistic_spin()
499 if (!waiter) in mutex_optimistic_spin()
522 struct mutex_waiter *waiter) in mutex_optimistic_spin() argument
577 struct mutex_waiter waiter; in __mutex_lock_common() local
630 debug_mutex_lock_common(lock, &waiter); in __mutex_lock_common()
631 waiter.task = current; in __mutex_lock_common()
633 waiter.ww_ctx = ww_ctx; in __mutex_lock_common()
639 __mutex_add_waiter(lock, &waiter, &lock->wait_list); in __mutex_lock_common()
645 ret = __ww_mutex_add_waiter(&waiter, lock, ww_ctx); in __mutex_lock_common()
674 ret = __ww_mutex_check_kill(lock, &waiter, ww_ctx); in __mutex_lock_common()
682 first = __mutex_waiter_is_first(lock, &waiter); in __mutex_lock_common()
691 (first && mutex_optimistic_spin(lock, ww_ctx, &waiter))) in __mutex_lock_common()
706 !__mutex_waiter_is_first(lock, &waiter)) in __mutex_lock_common()
710 __mutex_remove_waiter(lock, &waiter); in __mutex_lock_common()
712 debug_mutex_free_waiter(&waiter); in __mutex_lock_common()
727 __mutex_remove_waiter(lock, &waiter); in __mutex_lock_common()
730 debug_mutex_free_waiter(&waiter); in __mutex_lock_common()
929 struct mutex_waiter *waiter = in __mutex_unlock_slowpath() local
933 next = waiter->task; in __mutex_unlock_slowpath()
935 debug_mutex_wake_waiter(lock, waiter); in __mutex_unlock_slowpath()