Lines Matching refs:waiter
163 struct rt_mutex_waiter *waiter, *top_waiter = orig_waiter; in rt_mutex_adjust_prio_chain() local
200 waiter = task->pi_blocked_on; in rt_mutex_adjust_prio_chain()
206 if (!waiter || !waiter->task) in rt_mutex_adjust_prio_chain()
230 if (!detect_deadlock && waiter->list_entry.prio == task->prio) in rt_mutex_adjust_prio_chain()
233 lock = waiter->lock; in rt_mutex_adjust_prio_chain()
251 plist_del(&waiter->list_entry, &lock->wait_list); in rt_mutex_adjust_prio_chain()
252 waiter->list_entry.prio = task->prio; in rt_mutex_adjust_prio_chain()
253 plist_add(&waiter->list_entry, &lock->wait_list); in rt_mutex_adjust_prio_chain()
264 if (waiter == rt_mutex_top_waiter(lock)) { in rt_mutex_adjust_prio_chain()
267 waiter->pi_list_entry.prio = waiter->list_entry.prio; in rt_mutex_adjust_prio_chain()
268 plist_add(&waiter->pi_list_entry, &task->pi_waiters); in rt_mutex_adjust_prio_chain()
271 } else if (top_waiter == waiter) { in rt_mutex_adjust_prio_chain()
273 plist_del(&waiter->pi_list_entry, &task->pi_waiters); in rt_mutex_adjust_prio_chain()
274 waiter = rt_mutex_top_waiter(lock); in rt_mutex_adjust_prio_chain()
275 waiter->pi_list_entry.prio = waiter->list_entry.prio; in rt_mutex_adjust_prio_chain()
276 plist_add(&waiter->pi_list_entry, &task->pi_waiters); in rt_mutex_adjust_prio_chain()
285 if (!detect_deadlock && waiter != top_waiter) in rt_mutex_adjust_prio_chain()
413 struct rt_mutex_waiter *waiter, in task_blocks_on_rt_mutex() argument
417 struct rt_mutex_waiter *top_waiter = waiter; in task_blocks_on_rt_mutex()
423 waiter->task = current; in task_blocks_on_rt_mutex()
424 waiter->lock = lock; in task_blocks_on_rt_mutex()
425 plist_node_init(&waiter->list_entry, current->prio); in task_blocks_on_rt_mutex()
426 plist_node_init(&waiter->pi_list_entry, current->prio); in task_blocks_on_rt_mutex()
431 plist_add(&waiter->list_entry, &lock->wait_list); in task_blocks_on_rt_mutex()
433 current->pi_blocked_on = waiter; in task_blocks_on_rt_mutex()
437 if (waiter == rt_mutex_top_waiter(lock)) { in task_blocks_on_rt_mutex()
440 plist_add(&waiter->pi_list_entry, &owner->pi_waiters); in task_blocks_on_rt_mutex()
447 else if (debug_rt_mutex_detect_deadlock(waiter, detect_deadlock)) in task_blocks_on_rt_mutex()
462 res = rt_mutex_adjust_prio_chain(owner, detect_deadlock, lock, waiter, in task_blocks_on_rt_mutex()
480 struct rt_mutex_waiter *waiter; in wakeup_next_waiter() local
486 waiter = rt_mutex_top_waiter(lock); in wakeup_next_waiter()
487 plist_del(&waiter->list_entry, &lock->wait_list); in wakeup_next_waiter()
495 plist_del(&waiter->pi_list_entry, ¤t->pi_waiters); in wakeup_next_waiter()
496 pendowner = waiter->task; in wakeup_next_waiter()
497 waiter->task = NULL; in wakeup_next_waiter()
513 WARN_ON(pendowner->pi_blocked_on != waiter); in wakeup_next_waiter()
535 struct rt_mutex_waiter *waiter) in remove_waiter() argument
537 int first = (waiter == rt_mutex_top_waiter(lock)); in remove_waiter()
543 plist_del(&waiter->list_entry, &lock->wait_list); in remove_waiter()
544 waiter->task = NULL; in remove_waiter()
552 plist_del(&waiter->pi_list_entry, &owner->pi_waiters); in remove_waiter()
568 WARN_ON(!plist_node_empty(&waiter->pi_list_entry)); in remove_waiter()
590 struct rt_mutex_waiter *waiter; in rt_mutex_adjust_pi() local
595 waiter = task->pi_blocked_on; in rt_mutex_adjust_pi()
596 if (!waiter || waiter->list_entry.prio == task->prio) { in rt_mutex_adjust_pi()
616 struct rt_mutex_waiter waiter; in rt_mutex_slowlock() local
619 debug_rt_mutex_init_waiter(&waiter); in rt_mutex_slowlock()
620 waiter.task = NULL; in rt_mutex_slowlock()
663 if (!waiter.task) { in rt_mutex_slowlock()
664 ret = task_blocks_on_rt_mutex(lock, &waiter, in rt_mutex_slowlock()
671 if (unlikely(!waiter.task)) { in rt_mutex_slowlock()
687 debug_rt_mutex_print_deadlock(&waiter); in rt_mutex_slowlock()
689 if (waiter.task) in rt_mutex_slowlock()
698 if (unlikely(waiter.task)) in rt_mutex_slowlock()
699 remove_waiter(lock, &waiter); in rt_mutex_slowlock()
721 debug_rt_mutex_free_waiter(&waiter); in rt_mutex_slowlock()