| 函数逻辑报告 | 
| Source Code: kernel\futex.c | Create Date:2022-07-27 11:54:49 | 
| Last Modify:2020-03-17 15:28:32 | Copyright©Brick | 
| 首页 | 函数Tree | 
| 注解内核,赢得工具 | 下载SCCT | English | 
函数名称:Userspace attempted a TID -> 0 atomic transition, and failed.* This is the in-kernel slowpath: we look up the PI state (if any),* and do the rt-mutex unlock.
函数原型:static int futex_unlock_pi(unsigned int __user *uaddr, unsigned int flags)
返回类型:int
参数:
| 类型 | 参数 | 名称 | 
|---|---|---|
| unsigned int __user * | uaddr | |
| unsigned int | flags | 
| 3070 | curval等于curval, vpid等于task_pid_vnr(当前进程) | 
| 3071 | key等于FUTEX_KEY_INIT | 
| 3076 | 如果非IS_ENABLED(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'y' or 'm',* 0 otherwise.(CONFIG_FUTEX_PI)则返回:负ENOSYS | 
| 3079 | retry : | 
| 3080 | 如果Careful: we have to cast the result to the type of the pointer* for sign reasons(uval, uaddr)则返回:负EFAULT | 
| 3085 | 如果uval按位与The rest of the robust-futex field is for the TID:的值不等于vpid则返回:负EPERM | 
| 3093 | 加自旋锁 | 
| 3101 | 如果top_waiter则 | 
| 3105 | 如果非pi_state则转到:out_unlock | 
| 3112 | 如果owner不等于当前进程则转到:out_unlock | 
| 3115 | get_pi_state(pi_state) | 
| 3127 | 自旋锁解锁 | 
| 3132 | Drops a reference to the pi_state object and frees or caches it* when the last reference is gone. | 
| 3137 | 如果非ret则转到:out_putkey | 
| 3143 | 如果ret恒等于负EFAULT则转到:pi_faulted | 
| 3155 | 转到:out_putkey | 
| 3165 | 如果ret等于cmpxchg_futex_value_locked( & curval, uaddr, uval, 0)则 | 
| 3185 | out_unlock : | 
| 3186 | 自旋锁解锁 | 
| 3187 | out_putkey : | 
| 3188 | put_futex_key( & key) | 
| 3189 | 返回:ret | 
| 3191 | pi_retry : | 
| 3192 | put_futex_key( & key) | 
| 3193 | cond_resched() | 
| 3194 | 转到:retry | 
| 3196 | pi_faulted : | 
| 3197 | put_futex_key( & key) | 
| 3203 | 返回:ret | 
| 名称 | 描述 | 
|---|---|
| do_futex | 
| 源代码转换工具 开放的插件接口 | X | 
|---|---|
| 支持:c/c++/esqlc/java Oracle/Informix/Mysql 插件可实现:逻辑报告 代码生成和批量转换代码 |