Lines Matching refs:waiter

167 rt_mutex_enqueue(struct rt_mutex *lock, struct rt_mutex_waiter *waiter)  in rt_mutex_enqueue()  argument
177 if (rt_mutex_waiter_less(waiter, entry)) { in rt_mutex_enqueue()
186 lock->waiters_leftmost = &waiter->tree_entry; in rt_mutex_enqueue()
188 rb_link_node(&waiter->tree_entry, parent, link); in rt_mutex_enqueue()
189 rb_insert_color(&waiter->tree_entry, &lock->waiters); in rt_mutex_enqueue()
193 rt_mutex_dequeue(struct rt_mutex *lock, struct rt_mutex_waiter *waiter) in rt_mutex_dequeue() argument
195 if (RB_EMPTY_NODE(&waiter->tree_entry)) in rt_mutex_dequeue()
198 if (lock->waiters_leftmost == &waiter->tree_entry) in rt_mutex_dequeue()
199 lock->waiters_leftmost = rb_next(&waiter->tree_entry); in rt_mutex_dequeue()
201 rb_erase(&waiter->tree_entry, &lock->waiters); in rt_mutex_dequeue()
202 RB_CLEAR_NODE(&waiter->tree_entry); in rt_mutex_dequeue()
206 rt_mutex_enqueue_pi(struct task_struct *task, struct rt_mutex_waiter *waiter) in rt_mutex_enqueue_pi() argument
216 if (rt_mutex_waiter_less(waiter, entry)) { in rt_mutex_enqueue_pi()
225 task->pi_waiters_leftmost = &waiter->pi_tree_entry; in rt_mutex_enqueue_pi()
227 rb_link_node(&waiter->pi_tree_entry, parent, link); in rt_mutex_enqueue_pi()
228 rb_insert_color(&waiter->pi_tree_entry, &task->pi_waiters); in rt_mutex_enqueue_pi()
232 rt_mutex_dequeue_pi(struct task_struct *task, struct rt_mutex_waiter *waiter) in rt_mutex_dequeue_pi() argument
234 if (RB_EMPTY_NODE(&waiter->pi_tree_entry)) in rt_mutex_dequeue_pi()
237 if (task->pi_waiters_leftmost == &waiter->pi_tree_entry) in rt_mutex_dequeue_pi()
238 task->pi_waiters_leftmost = rb_next(&waiter->pi_tree_entry); in rt_mutex_dequeue_pi()
240 rb_erase(&waiter->pi_tree_entry, &task->pi_waiters); in rt_mutex_dequeue_pi()
241 RB_CLEAR_NODE(&waiter->pi_tree_entry); in rt_mutex_dequeue_pi()
325 static bool rt_mutex_cond_detect_deadlock(struct rt_mutex_waiter *waiter, in rt_mutex_cond_detect_deadlock() argument
335 return debug_rt_mutex_detect_deadlock(waiter, chwalk); in rt_mutex_cond_detect_deadlock()
418 struct rt_mutex_waiter *waiter, *top_waiter = orig_waiter; in rt_mutex_adjust_prio_chain() local
471 waiter = task->pi_blocked_on; in rt_mutex_adjust_prio_chain()
482 if (!waiter) in rt_mutex_adjust_prio_chain()
501 if (next_lock != waiter->lock) in rt_mutex_adjust_prio_chain()
533 if (waiter->prio == task->prio) { in rt_mutex_adjust_prio_chain()
543 lock = waiter->lock; in rt_mutex_adjust_prio_chain()
628 rt_mutex_dequeue(lock, waiter); in rt_mutex_adjust_prio_chain()
629 waiter->prio = task->prio; in rt_mutex_adjust_prio_chain()
630 rt_mutex_enqueue(lock, waiter); in rt_mutex_adjust_prio_chain()
661 if (waiter == rt_mutex_top_waiter(lock)) { in rt_mutex_adjust_prio_chain()
669 rt_mutex_enqueue_pi(task, waiter); in rt_mutex_adjust_prio_chain()
672 } else if (prerequeue_top_waiter == waiter) { in rt_mutex_adjust_prio_chain()
683 rt_mutex_dequeue_pi(task, waiter); in rt_mutex_adjust_prio_chain()
684 waiter = rt_mutex_top_waiter(lock); in rt_mutex_adjust_prio_chain()
685 rt_mutex_enqueue_pi(task, waiter); in rt_mutex_adjust_prio_chain()
730 if (!detect_deadlock && waiter != top_waiter) in rt_mutex_adjust_prio_chain()
754 struct rt_mutex_waiter *waiter) in try_to_take_rt_mutex() argument
788 if (waiter) { in try_to_take_rt_mutex()
793 if (waiter != rt_mutex_top_waiter(lock)) in try_to_take_rt_mutex()
800 rt_mutex_dequeue(lock, waiter); in try_to_take_rt_mutex()
876 struct rt_mutex_waiter *waiter, in task_blocks_on_rt_mutex() argument
881 struct rt_mutex_waiter *top_waiter = waiter; in task_blocks_on_rt_mutex()
900 waiter->task = task; in task_blocks_on_rt_mutex()
901 waiter->lock = lock; in task_blocks_on_rt_mutex()
902 waiter->prio = task->prio; in task_blocks_on_rt_mutex()
907 rt_mutex_enqueue(lock, waiter); in task_blocks_on_rt_mutex()
909 task->pi_blocked_on = waiter; in task_blocks_on_rt_mutex()
917 if (waiter == rt_mutex_top_waiter(lock)) { in task_blocks_on_rt_mutex()
919 rt_mutex_enqueue_pi(owner, waiter); in task_blocks_on_rt_mutex()
924 } else if (rt_mutex_cond_detect_deadlock(waiter, chwalk)) { in task_blocks_on_rt_mutex()
950 next_lock, waiter, task); in task_blocks_on_rt_mutex()
967 struct rt_mutex_waiter *waiter; in wakeup_next_waiter() local
972 waiter = rt_mutex_top_waiter(lock); in wakeup_next_waiter()
980 rt_mutex_dequeue_pi(current, waiter); in wakeup_next_waiter()
999 wake_up_process(waiter->task); in wakeup_next_waiter()
1009 struct rt_mutex_waiter *waiter) in remove_waiter() argument
1011 bool is_top_waiter = (waiter == rt_mutex_top_waiter(lock)); in remove_waiter()
1017 rt_mutex_dequeue(lock, waiter); in remove_waiter()
1030 rt_mutex_dequeue_pi(owner, waiter); in remove_waiter()
1067 struct rt_mutex_waiter *waiter; in rt_mutex_adjust_pi() local
1073 waiter = task->pi_blocked_on; in rt_mutex_adjust_pi()
1074 if (!waiter || (waiter->prio == task->prio && in rt_mutex_adjust_pi()
1079 next_lock = waiter->lock; in rt_mutex_adjust_pi()
1102 struct rt_mutex_waiter *waiter) in __rt_mutex_slowlock() argument
1108 if (try_to_take_rt_mutex(lock, current, waiter)) in __rt_mutex_slowlock()
1127 debug_rt_mutex_print_deadlock(waiter); in __rt_mutex_slowlock()
1167 struct rt_mutex_waiter waiter; in rt_mutex_slowlock() local
1170 debug_rt_mutex_init_waiter(&waiter); in rt_mutex_slowlock()
1171 RB_CLEAR_NODE(&waiter.pi_tree_entry); in rt_mutex_slowlock()
1172 RB_CLEAR_NODE(&waiter.tree_entry); in rt_mutex_slowlock()
1191 ret = task_blocks_on_rt_mutex(lock, &waiter, current, chwalk); in rt_mutex_slowlock()
1195 ret = __rt_mutex_slowlock(lock, state, timeout, &waiter); in rt_mutex_slowlock()
1200 remove_waiter(lock, &waiter); in rt_mutex_slowlock()
1201 rt_mutex_handle_deadlock(ret, chwalk, &waiter); in rt_mutex_slowlock()
1216 debug_rt_mutex_free_waiter(&waiter); in rt_mutex_slowlock()
1552 struct rt_mutex_waiter *waiter, in rt_mutex_start_proxy_lock() argument
1565 ret = task_blocks_on_rt_mutex(lock, waiter, task, in rt_mutex_start_proxy_lock()
1579 remove_waiter(lock, waiter); in rt_mutex_start_proxy_lock()
1583 debug_rt_mutex_print_deadlock(waiter); in rt_mutex_start_proxy_lock()
1625 struct rt_mutex_waiter *waiter) in rt_mutex_finish_proxy_lock() argument
1634 ret = __rt_mutex_slowlock(lock, TASK_INTERRUPTIBLE, to, waiter); in rt_mutex_finish_proxy_lock()
1637 remove_waiter(lock, waiter); in rt_mutex_finish_proxy_lock()