Lines Matching refs:waiter

201  * Add @waiter to the @lock wait_list and set the FLAG_WAITERS flag if it's
202 * the first waiter.
204 * When @pos, @waiter is added before the waiter indicated by @pos. Otherwise
205 * @waiter will be added to the tail of the list.
208 __mutex_add_waiter(struct mutex *lock, struct mutex_waiter *waiter,
215 debug_mutex_add_waiter(lock, waiter, current);
219 * Insert @waiter before @pos.
221 list_add_tail(&waiter->list, &pos->list);
223 * If @pos == @first, then @waiter will be the new first.
226 lock->first_waiter = waiter;
231 list_add_tail(&waiter->list, &first->list);
235 INIT_LIST_HEAD(&waiter->list);
236 lock->first_waiter = waiter;
241 __mutex_remove_waiter(struct mutex *lock, struct mutex_waiter *waiter)
244 if (list_empty(&waiter->list)) {
248 if (lock->first_waiter == waiter)
249 lock->first_waiter = list_next_entry(waiter, list);
250 list_del(&waiter->list);
253 debug_mutex_remove_waiter(lock, waiter, current);
338 struct mutex_waiter *waiter)
361 * lock from a waiter with an earlier stamp, since the
365 if (!waiter && (atomic_long_read(&lock->owner) & MUTEX_FLAG_WAITERS))
370 * first waiter.
372 if (waiter && data_race(lock->first_waiter != waiter))
386 struct ww_acquire_ctx *ww_ctx, struct mutex_waiter *waiter)
411 if (ww_ctx && !ww_mutex_spin_on_owner(lock, ww_ctx, waiter)) {
468 * The waiter flag is set to true if the spinner is a waiter in the wait
469 * queue. The waiter-spinner will spin on the lock directly and concurrently
475 struct mutex_waiter *waiter)
477 if (!waiter) {
481 * in case spinning isn't possible. As a waiter-spinner
509 if (!mutex_spin_on_owner(lock, owner, ww_ctx, waiter))
521 if (!waiter)
528 if (!waiter)
551 struct mutex_waiter *waiter)
615 struct mutex_waiter waiter;
671 debug_mutex_lock_common(lock, &waiter);
672 waiter.task = current;
674 waiter.ww_ctx = ww_ctx;
680 __mutex_add_waiter(lock, &waiter, NULL);
686 ret = __ww_mutex_add_waiter(&waiter, lock, ww_ctx, &wake_q);
719 ret = __ww_mutex_check_kill(lock, &waiter, ww_ctx);
728 first = lock->first_waiter == &waiter;
761 opt_acquired = mutex_optimistic_spin(lock, ww_ctx, &waiter);
782 if (!ww_ctx->is_wait_die && lock->first_waiter != &waiter)
786 __mutex_remove_waiter(lock, &waiter);
788 debug_mutex_free_waiter(&waiter);
805 __mutex_remove_waiter(lock, &waiter);
810 debug_mutex_free_waiter(&waiter);
985 struct mutex_waiter *waiter;
1005 * but instead set it to the top waiter.
1037 * is the highest waiter, as selected by the scheduling function.
1057 waiter = lock->first_waiter;
1058 if (!next && waiter) {
1059 next = get_task_struct(waiter->task);
1062 debug_mutex_wake_waiter(lock, waiter);
1068 if (trace_contended_release_enabled() && waiter)