| 函数逻辑报告 | 
| Source Code: mm\gup.c | Create Date:2022-07-27 16:00:10 | 
| Last Modify:2020-03-12 14:18:49 | Copyright©Brick | 
| 首页 | 函数Tree | 
| 注解内核,赢得工具 | 下载SCCT | English | 
函数名称:follow_pmd_mask
函数原型:static struct page *follow_pmd_mask(struct vm_area_struct *vma, unsigned long address, pud_t *pudp, unsigned int flags, struct follow_page_context *ctx)
返回类型:struct page
参数:
| 类型 | 参数 | 名称 | 
|---|---|---|
| struct vm_area_struct * | vma | |
| unsigned long | address | |
| pud_t * | pudp | |
| unsigned int | flags | |
| struct follow_page_context * | ctx | 
| 318 | pmd等于pmd_offset(pudp, address) | 
| 324 | 如果pmd_none(pmdval)则返回:no_page_table(vma, flags) | 
| 326 | 如果pmd_huge(pmdval)且Flags, see mm.h. 按位与Huge TLB Page VM 则 | 
| 330 | 返回:no_page_table(vma, flags) | 
| 338 | 返回:no_page_table(vma, flags) | 
| 340 | retry : | 
| 341 | 如果非pmd_present(pmdval)则 | 
| 342 | 如果此条件成立可能性大(为编译器优化)(!(flags & wait for page to replace migration entry ))则返回:no_page_table(vma, flags) | 
| 344 | VM_BUG_ON(thp_migration_supported() && !is_pmd_migration_entry(pmdval)) | 
| 353 | 如果pmd_none(pmdval)则返回:no_page_table(vma, flags) | 
| 355 | 转到:retry | 
| 357 | 如果pmd_devmap(pmdval)则 | 
| 360 | 自旋锁解锁 | 
| 364 | 如果此条件成立可能性大(为编译器优化)(!pmd_trans_huge(pmdval))则返回:follow_page_pte(vma, address, pmd, flags, & pgmap) | 
| 367 | 如果flags按位与rce NUMA hinting page fault 且pmd_protnone(pmdval)则返回:no_page_table(vma, flags) | 
| 370 | retry_locked : | 
| 372 | 如果此条件成立可能性小(为编译器优化)(pmd_none( * pmd))则 | 
| 373 | 自旋锁解锁 | 
| 374 | 返回:no_page_table(vma, flags) | 
| 376 | 如果此条件成立可能性小(为编译器优化)(!pmd_present( * pmd))则 | 
| 377 | 自旋锁解锁 | 
| 378 | 如果此条件成立可能性大(为编译器优化)(!(flags & wait for page to replace migration entry ))则返回:no_page_table(vma, flags) | 
| 380 | pmd_migration_entry_wait(mm, pmd) | 
| 381 | 转到:retry_locked | 
| 383 | 如果此条件成立可能性小(为编译器优化)(!pmd_trans_huge( * pmd))则 | 
| 389 | page等于Currently stuck as a macro due to indirect forward reference to* linux/mmzone.h's __section_mem_map_addr() definition:( * pmd) | 
| 390 | 如果is_huge_zero_page(page)则 | 
| 396 | 否则如果flags按位与don't return transhuge pages, split them 则 | 
| 397 | 如果此条件成立可能性小(为编译器优化)(!try_get_page(page))则 | 
| 401 | 自旋锁解锁 | 
| 403 | ret等于split_huge_page(page) | 
| 406 | 如果pmd_none( * pmd)则返回:no_page_table(vma, flags) | 
| 408 | 否则 | 
| 418 | 自旋锁解锁 | 
| 419 | page_mask等于HPAGE_PMD_NR减1 | 
| 420 | 返回:page | 
| 名称 | 描述 | 
|---|---|
| follow_pud_mask | 
| 源代码转换工具 开放的插件接口 | X | 
|---|---|
| 支持:c/c++/esqlc/java Oracle/Informix/Mysql 插件可实现:逻辑报告 代码生成和批量转换代码 |