• Home
  • Raw
  • Download

Lines Matching refs:waiter

273 rt_mutex_enqueue(struct rt_mutex *lock, struct rt_mutex_waiter *waiter)  in rt_mutex_enqueue()  argument
283 if (rt_mutex_waiter_less(waiter, entry)) { in rt_mutex_enqueue()
291 rb_link_node(&waiter->tree_entry, parent, link); in rt_mutex_enqueue()
292 rb_insert_color_cached(&waiter->tree_entry, &lock->waiters, leftmost); in rt_mutex_enqueue()
296 rt_mutex_dequeue(struct rt_mutex *lock, struct rt_mutex_waiter *waiter) in rt_mutex_dequeue() argument
298 if (RB_EMPTY_NODE(&waiter->tree_entry)) in rt_mutex_dequeue()
301 rb_erase_cached(&waiter->tree_entry, &lock->waiters); in rt_mutex_dequeue()
302 RB_CLEAR_NODE(&waiter->tree_entry); in rt_mutex_dequeue()
306 rt_mutex_enqueue_pi(struct task_struct *task, struct rt_mutex_waiter *waiter) in rt_mutex_enqueue_pi() argument
316 if (rt_mutex_waiter_less(waiter, entry)) { in rt_mutex_enqueue_pi()
324 rb_link_node(&waiter->pi_tree_entry, parent, link); in rt_mutex_enqueue_pi()
325 rb_insert_color_cached(&waiter->pi_tree_entry, &task->pi_waiters, leftmost); in rt_mutex_enqueue_pi()
329 rt_mutex_dequeue_pi(struct task_struct *task, struct rt_mutex_waiter *waiter) in rt_mutex_dequeue_pi() argument
331 if (RB_EMPTY_NODE(&waiter->pi_tree_entry)) in rt_mutex_dequeue_pi()
334 rb_erase_cached(&waiter->pi_tree_entry, &task->pi_waiters); in rt_mutex_dequeue_pi()
335 RB_CLEAR_NODE(&waiter->pi_tree_entry); in rt_mutex_dequeue_pi()
363 static bool rt_mutex_cond_detect_deadlock(struct rt_mutex_waiter *waiter, in rt_mutex_cond_detect_deadlock() argument
373 return debug_rt_mutex_detect_deadlock(waiter, chwalk); in rt_mutex_cond_detect_deadlock()
456 struct rt_mutex_waiter *waiter, *top_waiter = orig_waiter; in rt_mutex_adjust_prio_chain() local
508 waiter = task->pi_blocked_on; in rt_mutex_adjust_prio_chain()
519 if (!waiter) in rt_mutex_adjust_prio_chain()
538 if (next_lock != waiter->lock) in rt_mutex_adjust_prio_chain()
570 if (rt_mutex_waiter_equal(waiter, task_to_waiter(task))) { in rt_mutex_adjust_prio_chain()
580 lock = waiter->lock; in rt_mutex_adjust_prio_chain()
664 rt_mutex_dequeue(lock, waiter); in rt_mutex_adjust_prio_chain()
682 waiter->prio = task->prio; in rt_mutex_adjust_prio_chain()
683 waiter->deadline = task->dl.deadline; in rt_mutex_adjust_prio_chain()
685 rt_mutex_enqueue(lock, waiter); in rt_mutex_adjust_prio_chain()
715 if (waiter == rt_mutex_top_waiter(lock)) { in rt_mutex_adjust_prio_chain()
723 rt_mutex_enqueue_pi(task, waiter); in rt_mutex_adjust_prio_chain()
726 } else if (prerequeue_top_waiter == waiter) { in rt_mutex_adjust_prio_chain()
737 rt_mutex_dequeue_pi(task, waiter); in rt_mutex_adjust_prio_chain()
738 waiter = rt_mutex_top_waiter(lock); in rt_mutex_adjust_prio_chain()
739 rt_mutex_enqueue_pi(task, waiter); in rt_mutex_adjust_prio_chain()
784 if (!detect_deadlock && waiter != top_waiter) in rt_mutex_adjust_prio_chain()
808 struct rt_mutex_waiter *waiter) in try_to_take_rt_mutex() argument
842 if (waiter) { in try_to_take_rt_mutex()
847 if (waiter != rt_mutex_top_waiter(lock)) in try_to_take_rt_mutex()
854 rt_mutex_dequeue(lock, waiter); in try_to_take_rt_mutex()
929 struct rt_mutex_waiter *waiter, in task_blocks_on_rt_mutex() argument
934 struct rt_mutex_waiter *top_waiter = waiter; in task_blocks_on_rt_mutex()
953 waiter->task = task; in task_blocks_on_rt_mutex()
954 waiter->lock = lock; in task_blocks_on_rt_mutex()
955 waiter->prio = task->prio; in task_blocks_on_rt_mutex()
956 waiter->deadline = task->dl.deadline; in task_blocks_on_rt_mutex()
961 rt_mutex_enqueue(lock, waiter); in task_blocks_on_rt_mutex()
963 task->pi_blocked_on = waiter; in task_blocks_on_rt_mutex()
971 if (waiter == rt_mutex_top_waiter(lock)) { in task_blocks_on_rt_mutex()
973 rt_mutex_enqueue_pi(owner, waiter); in task_blocks_on_rt_mutex()
978 } else if (rt_mutex_cond_detect_deadlock(waiter, chwalk)) { in task_blocks_on_rt_mutex()
1004 next_lock, waiter, task); in task_blocks_on_rt_mutex()
1020 struct rt_mutex_waiter *waiter; in mark_wakeup_next_waiter() local
1024 waiter = rt_mutex_top_waiter(lock); in mark_wakeup_next_waiter()
1033 rt_mutex_dequeue_pi(current, waiter); in mark_wakeup_next_waiter()
1057 wake_q_add(wake_q, waiter->task); in mark_wakeup_next_waiter()
1068 struct rt_mutex_waiter *waiter) in remove_waiter() argument
1070 bool is_top_waiter = (waiter == rt_mutex_top_waiter(lock)); in remove_waiter()
1077 rt_mutex_dequeue(lock, waiter); in remove_waiter()
1090 rt_mutex_dequeue_pi(owner, waiter); in remove_waiter()
1127 struct rt_mutex_waiter *waiter; in rt_mutex_adjust_pi() local
1133 waiter = task->pi_blocked_on; in rt_mutex_adjust_pi()
1134 if (!waiter || rt_mutex_waiter_equal(waiter, task_to_waiter(task))) { in rt_mutex_adjust_pi()
1138 next_lock = waiter->lock; in rt_mutex_adjust_pi()
1148 void rt_mutex_init_waiter(struct rt_mutex_waiter *waiter) in rt_mutex_init_waiter() argument
1150 debug_rt_mutex_init_waiter(waiter); in rt_mutex_init_waiter()
1151 RB_CLEAR_NODE(&waiter->pi_tree_entry); in rt_mutex_init_waiter()
1152 RB_CLEAR_NODE(&waiter->tree_entry); in rt_mutex_init_waiter()
1153 waiter->task = NULL; in rt_mutex_init_waiter()
1169 struct rt_mutex_waiter *waiter) in __rt_mutex_slowlock() argument
1175 if (try_to_take_rt_mutex(lock, current, waiter)) in __rt_mutex_slowlock()
1194 debug_rt_mutex_print_deadlock(waiter); in __rt_mutex_slowlock()
1234 struct rt_mutex_waiter waiter; in rt_mutex_slowlock() local
1238 rt_mutex_init_waiter(&waiter); in rt_mutex_slowlock()
1262 ret = task_blocks_on_rt_mutex(lock, &waiter, current, chwalk); in rt_mutex_slowlock()
1266 ret = __rt_mutex_slowlock(lock, state, timeout, &waiter); in rt_mutex_slowlock()
1270 remove_waiter(lock, &waiter); in rt_mutex_slowlock()
1271 rt_mutex_handle_deadlock(ret, chwalk, &waiter); in rt_mutex_slowlock()
1286 debug_rt_mutex_free_waiter(&waiter); in rt_mutex_slowlock()
1747 struct rt_mutex_waiter *waiter, in __rt_mutex_start_proxy_lock() argument
1758 ret = task_blocks_on_rt_mutex(lock, waiter, task, in __rt_mutex_start_proxy_lock()
1771 debug_rt_mutex_print_deadlock(waiter); in __rt_mutex_start_proxy_lock()
1796 struct rt_mutex_waiter *waiter, in rt_mutex_start_proxy_lock() argument
1802 ret = __rt_mutex_start_proxy_lock(lock, waiter, task); in rt_mutex_start_proxy_lock()
1804 remove_waiter(lock, waiter); in rt_mutex_start_proxy_lock()
1849 struct rt_mutex_waiter *waiter) in rt_mutex_wait_proxy_lock() argument
1856 ret = __rt_mutex_slowlock(lock, TASK_INTERRUPTIBLE, to, waiter); in rt_mutex_wait_proxy_lock()
1888 struct rt_mutex_waiter *waiter) in rt_mutex_cleanup_proxy_lock() argument
1904 try_to_take_rt_mutex(lock, current, waiter); in rt_mutex_cleanup_proxy_lock()
1910 remove_waiter(lock, waiter); in rt_mutex_cleanup_proxy_lock()