函数逻辑报告 |
Source Code:kernel\locking\rtmutex.c |
Create Date:2022-07-27 10:52:23 |
Last Modify:2020-03-17 14:26:38 | Copyright©Brick |
首页 | 函数Tree |
注解内核,赢得工具 | 下载SCCT | English |
函数名称:Adjust the priority chain
函数原型:static int rt_mutex_adjust_prio_chain(struct task_struct *task, enum rtmutex_chainwalk chwalk, struct rt_mutex *orig_lock, struct rt_mutex *next_lock, struct rt_mutex_waiter *orig_waiter, struct task_struct *top_task)
返回类型:int
参数:
类型 | 参数 | 名称 |
---|---|---|
struct task_struct * | task | |
enum rtmutex_chainwalk | chwalk | |
struct rt_mutex * | orig_lock | |
struct rt_mutex * | next_lock | |
struct rt_mutex_waiter * | orig_waiter | |
struct task_struct * | top_task |
456 | top_waiter等于orig_waiter |
461 | bool requeue = true |
471 | again : |
484 | printk(warning conditions "Maximum lock depth %d reached task: %s (%d)\n", Max number of times we'll walk the boosting chain:, 是否使用FPU, task_pid_nr(top_task)) |
488 | put_task_struct(task) |
490 | 返回:负EDEADLK |
499 | retry : |
503 | 关闭本地中断,获取所要保护的运行队列(runqueue)的自旋锁(spinlock),为查找可运行进程做准备。( & Protection of the PI data structures: ) |
508 | waiter等于pi_blocked_on |
519 | 如果非waiter则转到:out_unlock_pi |
526 | 如果orig_waiter且非rt_mutex_owner(orig_lock)则转到:out_unlock_pi |
538 | 如果next_lock不等于lock则转到:out_unlock_pi |
546 | 如果top_waiter则 |
547 | 如果非task_has_pi_waiters(task)则转到:out_unlock_pi |
555 | 如果top_waiter不等于task_top_pi_waiter(task)则 |
556 | 如果非detect_deadlock则转到:out_unlock_pi |
558 | 否则requeue = false |
571 | 如果非detect_deadlock则转到:out_unlock_pi |
573 | 否则requeue = false |
601 | 如果lock恒等于orig_lock或rt_mutex_owner(lock)恒等于top_task则 |
603 | raw_spin_unlock( & 保护自旋锁) |
605 | 转到:out_unlock_pi |
614 | 如果非requeue则 |
619 | put_task_struct(task) |
625 | 如果非rt_mutex_owner(lock)则 |
626 | raw_spin_unlock_irq( & 保护自旋锁) |
627 | 返回:0 |
631 | task等于get_task_struct(rt_mutex_owner(lock)) |
648 | raw_spin_unlock_irq( & 保护自旋锁) |
651 | 如果非next_lock则转到:out_put_task |
653 | 转到:again |
664 | rt_mutex_dequeue(lock, waiter) |
685 | rt_mutex_enqueue(lock, waiter) |
689 | put_task_struct(task) |
698 | 如果非rt_mutex_owner(lock)则 |
706 | raw_spin_unlock_irq( & 保护自旋锁) |
707 | 返回:0 |
711 | task等于get_task_struct(rt_mutex_owner(lock)) |
715 | 如果waiter恒等于rt_mutex_top_waiter(lock)则 |
723 | rt_mutex_enqueue_pi(task, waiter) |
724 | rt_mutex_adjust_prio(task) |
726 | 否则如果prerequeue_top_waiter恒等于waiter则 |
737 | rt_mutex_dequeue_pi(task, waiter) |
738 | waiter等于rt_mutex_top_waiter(lock) |
739 | rt_mutex_enqueue_pi(task, waiter) |
740 | rt_mutex_adjust_prio(task) |
741 | 否则next_lock等于task_blocked_on_lock(task) |
767 | raw_spin_unlock_irq( & 保护自旋锁) |
776 | 如果非next_lock则转到:out_put_task |
784 | 如果非detect_deadlock且waiter不等于top_waiter则转到:out_put_task |
787 | 转到:again |
789 | out_unlock_pi : |
791 | out_put_task : |
792 | put_task_struct(task) |
794 | 返回:ret |
名称 | 描述 |
---|---|
task_blocks_on_rt_mutex | Task blocks on lock.* Prepare waiter and propagate pi chain* This must be called with lock->wait_lock held and interrupts disabled |
remove_waiter | Remove a waiter from a lock and give up* Must be called with lock->wait_lock held and interrupts disabled. I must* have just failed to try_to_take_rt_mutex(). |
rt_mutex_adjust_pi | Recheck the pi chain, in case we got a priority setting* Called from sched_setscheduler |
源代码转换工具 开放的插件接口 | X |
---|---|
支持:c/c++/esqlc/java Oracle/Informix/Mysql 插件可实现:逻辑报告 代码生成和批量转换代码 |