Lines Matching refs:task
284 rt_mutex_enqueue_pi(struct task_struct *task, struct rt_mutex_waiter *waiter) in rt_mutex_enqueue_pi() argument
286 struct rb_node **link = &task->pi_waiters.rb_node; in rt_mutex_enqueue_pi()
303 task->pi_waiters_leftmost = &waiter->pi_tree_entry; in rt_mutex_enqueue_pi()
306 rb_insert_color(&waiter->pi_tree_entry, &task->pi_waiters); in rt_mutex_enqueue_pi()
310 rt_mutex_dequeue_pi(struct task_struct *task, struct rt_mutex_waiter *waiter) in rt_mutex_dequeue_pi() argument
315 if (task->pi_waiters_leftmost == &waiter->pi_tree_entry) in rt_mutex_dequeue_pi()
316 task->pi_waiters_leftmost = rb_next(&waiter->pi_tree_entry); in rt_mutex_dequeue_pi()
318 rb_erase(&waiter->pi_tree_entry, &task->pi_waiters); in rt_mutex_dequeue_pi()
328 int rt_mutex_getprio(struct task_struct *task) in rt_mutex_getprio() argument
330 if (likely(!task_has_pi_waiters(task))) in rt_mutex_getprio()
331 return task->normal_prio; in rt_mutex_getprio()
333 return min(task_top_pi_waiter(task)->prio, in rt_mutex_getprio()
334 task->normal_prio); in rt_mutex_getprio()
337 struct task_struct *rt_mutex_get_top_task(struct task_struct *task) in rt_mutex_get_top_task() argument
339 if (likely(!task_has_pi_waiters(task))) in rt_mutex_get_top_task()
342 return task_top_pi_waiter(task)->task; in rt_mutex_get_top_task()
349 int rt_mutex_get_effective_prio(struct task_struct *task, int newprio) in rt_mutex_get_effective_prio() argument
351 if (!task_has_pi_waiters(task)) in rt_mutex_get_effective_prio()
354 if (task_top_pi_waiter(task)->task->prio <= newprio) in rt_mutex_get_effective_prio()
355 return task_top_pi_waiter(task)->task->prio; in rt_mutex_get_effective_prio()
364 static void __rt_mutex_adjust_prio(struct task_struct *task) in __rt_mutex_adjust_prio() argument
366 int prio = rt_mutex_getprio(task); in __rt_mutex_adjust_prio()
368 if (task->prio != prio || dl_prio(prio)) in __rt_mutex_adjust_prio()
369 rt_mutex_setprio(task, prio); in __rt_mutex_adjust_prio()
381 void rt_mutex_adjust_prio(struct task_struct *task) in rt_mutex_adjust_prio() argument
385 raw_spin_lock_irqsave(&task->pi_lock, flags); in rt_mutex_adjust_prio()
386 __rt_mutex_adjust_prio(task); in rt_mutex_adjust_prio()
387 raw_spin_unlock_irqrestore(&task->pi_lock, flags); in rt_mutex_adjust_prio()
489 static int rt_mutex_adjust_prio_chain(struct task_struct *task, in rt_mutex_adjust_prio_chain() argument
528 put_task_struct(task); in rt_mutex_adjust_prio_chain()
543 raw_spin_lock_irq(&task->pi_lock); in rt_mutex_adjust_prio_chain()
548 waiter = task->pi_blocked_on; in rt_mutex_adjust_prio_chain()
587 if (!task_has_pi_waiters(task)) in rt_mutex_adjust_prio_chain()
595 if (top_waiter != task_top_pi_waiter(task)) { in rt_mutex_adjust_prio_chain()
610 if (waiter->prio == task->prio) { in rt_mutex_adjust_prio_chain()
627 raw_spin_unlock_irq(&task->pi_lock); in rt_mutex_adjust_prio_chain()
658 raw_spin_unlock(&task->pi_lock); in rt_mutex_adjust_prio_chain()
659 put_task_struct(task); in rt_mutex_adjust_prio_chain()
671 task = rt_mutex_owner(lock); in rt_mutex_adjust_prio_chain()
672 get_task_struct(task); in rt_mutex_adjust_prio_chain()
673 raw_spin_lock(&task->pi_lock); in rt_mutex_adjust_prio_chain()
681 next_lock = task_blocked_on_lock(task); in rt_mutex_adjust_prio_chain()
688 raw_spin_unlock(&task->pi_lock); in rt_mutex_adjust_prio_chain()
723 waiter->prio = task->prio; in rt_mutex_adjust_prio_chain()
724 waiter->deadline = task->dl.deadline; in rt_mutex_adjust_prio_chain()
729 raw_spin_unlock(&task->pi_lock); in rt_mutex_adjust_prio_chain()
730 put_task_struct(task); in rt_mutex_adjust_prio_chain()
746 wake_up_process(rt_mutex_top_waiter(lock)->task); in rt_mutex_adjust_prio_chain()
752 task = rt_mutex_owner(lock); in rt_mutex_adjust_prio_chain()
753 get_task_struct(task); in rt_mutex_adjust_prio_chain()
754 raw_spin_lock(&task->pi_lock); in rt_mutex_adjust_prio_chain()
764 rt_mutex_dequeue_pi(task, prerequeue_top_waiter); in rt_mutex_adjust_prio_chain()
765 rt_mutex_enqueue_pi(task, waiter); in rt_mutex_adjust_prio_chain()
766 __rt_mutex_adjust_prio(task); in rt_mutex_adjust_prio_chain()
779 rt_mutex_dequeue_pi(task, waiter); in rt_mutex_adjust_prio_chain()
781 rt_mutex_enqueue_pi(task, waiter); in rt_mutex_adjust_prio_chain()
782 __rt_mutex_adjust_prio(task); in rt_mutex_adjust_prio_chain()
800 next_lock = task_blocked_on_lock(task); in rt_mutex_adjust_prio_chain()
808 raw_spin_unlock(&task->pi_lock); in rt_mutex_adjust_prio_chain()
832 raw_spin_unlock_irq(&task->pi_lock); in rt_mutex_adjust_prio_chain()
834 put_task_struct(task); in rt_mutex_adjust_prio_chain()
849 static int try_to_take_rt_mutex(struct rt_mutex *lock, struct task_struct *task, in try_to_take_rt_mutex() argument
913 if (task->prio >= rt_mutex_top_waiter(lock)->prio) in try_to_take_rt_mutex()
938 raw_spin_lock(&task->pi_lock); in try_to_take_rt_mutex()
939 task->pi_blocked_on = NULL; in try_to_take_rt_mutex()
946 rt_mutex_enqueue_pi(task, rt_mutex_top_waiter(lock)); in try_to_take_rt_mutex()
947 raw_spin_unlock(&task->pi_lock); in try_to_take_rt_mutex()
957 rt_mutex_set_owner(lock, task); in try_to_take_rt_mutex()
959 rt_mutex_deadlock_account_lock(lock, task); in try_to_take_rt_mutex()
973 struct task_struct *task, in task_blocks_on_rt_mutex() argument
992 if (owner == task) in task_blocks_on_rt_mutex()
995 raw_spin_lock(&task->pi_lock); in task_blocks_on_rt_mutex()
996 __rt_mutex_adjust_prio(task); in task_blocks_on_rt_mutex()
997 waiter->task = task; in task_blocks_on_rt_mutex()
999 waiter->prio = task->prio; in task_blocks_on_rt_mutex()
1000 waiter->deadline = task->dl.deadline; in task_blocks_on_rt_mutex()
1007 task->pi_blocked_on = waiter; in task_blocks_on_rt_mutex()
1009 raw_spin_unlock(&task->pi_lock); in task_blocks_on_rt_mutex()
1048 next_lock, waiter, task); in task_blocks_on_rt_mutex()
1090 wake_q_add(wake_q, waiter->task); in mark_wakeup_next_waiter()
1157 void rt_mutex_adjust_pi(struct task_struct *task) in rt_mutex_adjust_pi() argument
1163 raw_spin_lock_irqsave(&task->pi_lock, flags); in rt_mutex_adjust_pi()
1165 waiter = task->pi_blocked_on; in rt_mutex_adjust_pi()
1166 if (!waiter || (waiter->prio == task->prio && in rt_mutex_adjust_pi()
1167 !dl_prio(task->prio))) { in rt_mutex_adjust_pi()
1168 raw_spin_unlock_irqrestore(&task->pi_lock, flags); in rt_mutex_adjust_pi()
1172 raw_spin_unlock_irqrestore(&task->pi_lock, flags); in rt_mutex_adjust_pi()
1175 get_task_struct(task); in rt_mutex_adjust_pi()
1177 rt_mutex_adjust_prio_chain(task, RT_MUTEX_MIN_CHAINWALK, NULL, in rt_mutex_adjust_pi()
1178 next_lock, NULL, task); in rt_mutex_adjust_pi()
1211 if (timeout && !timeout->task) in __rt_mutex_slowlock()
1693 struct task_struct *task) in rt_mutex_start_proxy_lock() argument
1699 if (try_to_take_rt_mutex(lock, task, NULL)) { in rt_mutex_start_proxy_lock()
1705 ret = task_blocks_on_rt_mutex(lock, waiter, task, in rt_mutex_start_proxy_lock()
1745 return rt_mutex_top_waiter(lock)->task; in rt_mutex_next_owner()