Lines Matching refs:waiter
171 static inline bool __mutex_waiter_is_first(struct mutex *lock, struct mutex_waiter *waiter) in __mutex_waiter_is_first() argument
173 return list_first_entry(&lock->wait_list, struct mutex_waiter, list) == waiter; in __mutex_waiter_is_first()
181 __mutex_add_waiter(struct mutex *lock, struct mutex_waiter *waiter, in __mutex_add_waiter() argument
184 debug_mutex_add_waiter(lock, waiter, current); in __mutex_add_waiter()
186 list_add_tail(&waiter->list, list); in __mutex_add_waiter()
187 if (__mutex_waiter_is_first(lock, waiter)) in __mutex_add_waiter()
340 __ww_mutex_die(struct mutex *lock, struct mutex_waiter *waiter, in __ww_mutex_die() argument
346 if (waiter->ww_ctx->acquired > 0 && in __ww_mutex_die()
347 __ww_ctx_stamp_after(waiter->ww_ctx, ww_ctx)) { in __ww_mutex_die()
348 debug_mutex_wake_waiter(lock, waiter); in __ww_mutex_die()
349 wake_up_process(waiter->task); in __ww_mutex_die()
476 struct mutex_waiter *waiter) in ww_mutex_spin_on_owner() argument
503 if (!waiter && (atomic_long_read(&lock->owner) & MUTEX_FLAG_WAITERS)) in ww_mutex_spin_on_owner()
510 if (waiter && !__mutex_waiter_is_first(lock, waiter)) in ww_mutex_spin_on_owner()
524 struct ww_acquire_ctx *ww_ctx, struct mutex_waiter *waiter) in mutex_spin_on_owner() argument
547 if (ww_ctx && !ww_mutex_spin_on_owner(lock, ww_ctx, waiter)) { in mutex_spin_on_owner()
612 const bool use_ww_ctx, struct mutex_waiter *waiter) in mutex_optimistic_spin() argument
614 if (!waiter) { in mutex_optimistic_spin()
646 if (!mutex_spin_on_owner(lock, owner, ww_ctx, waiter)) in mutex_optimistic_spin()
658 if (!waiter) in mutex_optimistic_spin()
665 if (!waiter) in mutex_optimistic_spin()
688 const bool use_ww_ctx, struct mutex_waiter *waiter) in mutex_optimistic_spin() argument
778 __ww_mutex_check_kill(struct mutex *lock, struct mutex_waiter *waiter, in __ww_mutex_check_kill() argument
802 cur = waiter; in __ww_mutex_check_kill()
825 __ww_mutex_add_waiter(struct mutex_waiter *waiter, in __ww_mutex_add_waiter() argument
834 __mutex_add_waiter(lock, waiter, &lock->wait_list); in __ww_mutex_add_waiter()
874 __mutex_add_waiter(lock, waiter, pos); in __ww_mutex_add_waiter()
903 struct mutex_waiter waiter; in __mutex_lock_common() local
948 debug_mutex_lock_common(lock, &waiter); in __mutex_lock_common()
954 __mutex_add_waiter(lock, &waiter, &lock->wait_list); in __mutex_lock_common()
958 waiter.ww_ctx = MUTEX_POISON_WW_CTX; in __mutex_lock_common()
965 ret = __ww_mutex_add_waiter(&waiter, lock, ww_ctx); in __mutex_lock_common()
969 waiter.ww_ctx = ww_ctx; in __mutex_lock_common()
972 waiter.task = current; in __mutex_lock_common()
996 ret = __ww_mutex_check_kill(lock, &waiter, ww_ctx); in __mutex_lock_common()
1009 first = __mutex_waiter_is_first(lock, &waiter); in __mutex_lock_common()
1021 (first && mutex_optimistic_spin(lock, ww_ctx, use_ww_ctx, &waiter))) in __mutex_lock_common()
1036 !__mutex_waiter_is_first(lock, &waiter)) in __mutex_lock_common()
1040 mutex_remove_waiter(lock, &waiter, current); in __mutex_lock_common()
1044 debug_mutex_free_waiter(&waiter); in __mutex_lock_common()
1059 mutex_remove_waiter(lock, &waiter, current); in __mutex_lock_common()
1062 debug_mutex_free_waiter(&waiter); in __mutex_lock_common()
1234 struct mutex_waiter *waiter = in __mutex_unlock_slowpath() local
1238 next = waiter->task; in __mutex_unlock_slowpath()
1240 debug_mutex_wake_waiter(lock, waiter); in __mutex_unlock_slowpath()