函数逻辑报告 |
Source Code:fs\userfaultfd.c |
Create Date:2022-07-29 10:52:35 |
Last Modify:2020-03-12 14:18:49 | Copyright©Brick |
首页 | 函数Tree |
注解内核,赢得工具 | 下载SCCT | English |
函数名称:userfaultfd_ctx_read
函数原型:static ssize_t userfaultfd_ctx_read(struct userfaultfd_ctx *ctx, int no_wait, struct uffd_msg *msg)
返回类型:ssize_t
参数:
类型 | 参数 | 名称 |
---|---|---|
struct userfaultfd_ctx * | ctx | |
int | no_wait | |
struct uffd_msg * | msg |
1039 | DECLARE_WAITQUEUE(wait, 当前进程) |
1048 | LIST_HEAD(fork_event) |
1049 | struct userfaultfd_ctx * fork_nctx = NULL |
1052 | spin_lock_irq( & lock) |
1054 | 循环 |
1055 | set_current_state(睡眠态) |
1056 | 加自旋锁 |
1057 | uwq等于find_userfault(ctx) |
1058 | 如果uwq则 |
1089 | 删除链表项 |
1090 | add_wait_queue( & waitqueue head for the userfaults , & wq) |
1096 | 自旋锁解锁 |
1097 | ret等于0 |
1098 | 退出 |
1100 | 自旋锁解锁 |
1102 | 加自旋锁 |
1103 | uwq等于find_userfault_evt(ctx) |
1104 | 如果uwq则 |
1107 | 如果event恒等于UFFD_EVENT_FORK则 |
1123 | userfaultfd_event_complete(ctx, uwq) |
1124 | 自旋锁解锁 |
1125 | ret等于0 |
1126 | 退出 |
1128 | 自旋锁解锁 |
1130 | 如果signal_pending(当前进程)则 |
1132 | 退出 |
1134 | 如果no_wait则 |
1138 | spin_unlock_irq( & lock) |
1139 | 进程调度 |
1140 | spin_lock_irq( & lock) |
1144 | spin_unlock_irq( & lock) |
1146 | 如果非ret且event恒等于UFFD_EVENT_FORK则 |
1147 | ret等于resolve_userfault_fork(ctx, fork_nctx, msg) |
1148 | spin_lock_irq( & lock) |
1149 | 如果非链表为空则 |
1169 | 删除链表项 |
1170 | __add_wait_queue( & waitqueue head for events , & wq) |
1177 | 如果此条件成立可能性大(为编译器优化)(!ret)则userfaultfd_event_complete(ctx, uwq) |
1179 | 否则 |
1194 | spin_unlock_irq( & lock) |
1197 | 返回:ret |
名称 | 描述 |
---|---|
userfaultfd_read |
源代码转换工具 开放的插件接口 | X |
---|---|
支持:c/c++/esqlc/java Oracle/Informix/Mysql 插件可实现:逻辑报告 代码生成和批量转换代码 |