函数逻辑报告

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

Source Code:kernel\locking\rtmutex.c Create Date:2022-07-27 10:52:34
Last Modify:2020-03-17 14:26:38 Copyright©Brick
首页 函数Tree
注解内核,赢得工具下载SCCTEnglish

函数名称:__rt_mutex_slowlock() - Perform the wait-wake-try-to-take loop*@lock: the rt_mutex to take*@state: the state the task should block in (TASK_INTERRUPTIBLE* or TASK_UNINTERRUPTIBLE)*@timeout: the pre-initialized and started timer, or NULL for none*@waiter:

函数原型:static int __sched __rt_mutex_slowlock(struct rt_mutex *lock, int state, struct hrtimer_sleeper *timeout, struct rt_mutex_waiter *waiter)

返回类型:int

参数:

类型参数名称
struct rt_mutex *lock
intstate
struct hrtimer_sleeper *timeout
struct rt_mutex_waiter *waiter
1171  ret等于0
1173  循环
1175  如果Try to take an rt-mutex* Must be called with lock->wait_lock held and interrupts disabled*@lock: The lock to be acquired退出
1184  如果signal_pending(当前进程)则ret等于负EINTR
1186  如果timeout且非taskret等于负ETIMEDOUT
1188  如果ret退出
1192  raw_spin_unlock_irq( & 保护自旋锁)
1194  debug_rt_mutex_print_deadlock(waiter)
1196  进程调度
1198  关闭本地中断,获取所要保护的运行队列(runqueue)的自旋锁(spinlock),为查找可运行进程做准备。( & 保护自旋锁)
1199  set_current_state(state)
1202  set_current_state() includes a barrier so that the write of current->state* is correctly serialised wrt the caller's subsequent test of whether to* actually sleep:* for (;;) {* set_current_state(TASK_UNINTERRUPTIBLE);* if (!need_sleep)* break;* (就绪态)
1203  返回:ret
调用者
名称描述
rt_mutex_slowlockSlow path lock function:
rt_mutex_wait_proxy_lock_mutex_wait_proxy_lock() - Wait for lock acquisition*@lock: the rt_mutex we were woken on*@to: the timeout, null if none