函数逻辑报告 |
Source Code:mm\huge_memory.c |
Create Date:2022-07-27 17:36:10 |
Last Modify:2020-03-12 14:18:49 | Copyright©Brick |
首页 | 函数Tree |
注解内核,赢得工具 | 下载SCCT | English |
函数名称:NUMA hinting page fault entry point for trans huge pmds
函数原型:vm_fault_t do_huge_pmd_numa_page(struct vm_fault *vmf, pmd_t pmd)
返回类型:vm_fault_t
参数:
类型 | 参数 | 名称 |
---|---|---|
struct vm_fault * | vmf | |
pmd_t | pmd |
1537 | vma等于Target VMA |
1540 | haddr等于Faulting virtual address 按位与HPAGE_PMD_MASK |
1542 | last_cpupid等于负1 |
1544 | bool migrated = false |
1546 | flags等于0 |
1548 | Page table lock.* Protects pte page table if 'pte'* is not NULL, otherwise pmd.等于pmd_lock(The address space we belong to. , Pointer to pmd entry matching* the 'address' ) |
1549 | 如果此条件成立可能性小(为编译器优化)(!pmd_same(pmd, * Pointer to pmd entry matching* the 'address' ))则转到:out_unlock |
1558 | page等于Currently stuck as a macro due to indirect forward reference to* linux/mmzone.h's __section_mem_map_addr() definition:( * Pointer to pmd entry matching* the 'address' ) |
1561 | 自旋锁解锁 |
1563 | 转到:out |
1566 | page等于Currently stuck as a macro due to indirect forward reference to* linux/mmzone.h's __section_mem_map_addr() definition:(pmd) |
1567 | BUG_ON(is_huge_zero_page(page)) |
1568 | page_nid等于page_to_nid(page) |
1569 | last_cpupid等于page_cpupid_last(page) |
1573 | flags或等于TNF_FAULT_LOCAL |
1577 | 如果非pmd_savedwrite(pmd)则flags或等于TNF_NO_GROUP |
1586 | 如果target_nid恒等于NUMA_NO_NODE则 |
1588 | 如果page_locked则转到:clear_pmdnuma |
1593 | 如果非page_locked则 |
1594 | page_nid等于NUMA_NO_NODE |
1597 | 自旋锁解锁 |
1599 | 转到:out |
1607 | 自旋锁解锁 |
1611 | 加自旋锁 |
1612 | 如果此条件成立可能性小(为编译器优化)(!pmd_same(pmd, * Pointer to pmd entry matching* the 'address' ))则 |
1615 | page_nid等于NUMA_NO_NODE |
1616 | 转到:out_unlock |
1620 | 如果此条件成立可能性小(为编译器优化)(!anon_vma)则 |
1622 | page_nid等于NUMA_NO_NODE |
1623 | 转到:clear_pmdnuma |
1638 | flush_tlb_range(vma, haddr, haddr + HPAGE_PMD_SIZE) |
1656 | 自旋锁解锁 |
1658 | migrated等于migrate_misplaced_transhuge_page(The address space we belong to. , vma, Pointer to pmd entry matching* the 'address' , pmd, Faulting virtual address , page, target_nid) |
1660 | 如果migrated则 |
1661 | flags或等于TNF_MIGRATED |
1662 | page_nid等于target_nid |
1663 | 否则flags或等于TNF_MIGRATE_FAIL |
1666 | 转到:out |
1667 | clear_pmdnuma : |
1668 | BUG_ON(!PageLocked(page)) |
1669 | was_writable等于pmd_savedwrite(pmd) |
1670 | pmd等于pmd_modify(pmd, Access permissions of this VMA. ) |
1671 | pmd等于pmd_mkyoung(pmd) |
1672 | 如果was_writable则pmd等于pmd_mkwrite(pmd) |
1674 | set_pmd_at(The address space we belong to. , haddr, Pointer to pmd entry matching* the 'address' , pmd) |
1675 | update_mmu_cache_pmd(vma, Faulting virtual address , Pointer to pmd entry matching* the 'address' ) |
1677 | out_unlock : |
1678 | 自旋锁解锁 |
1680 | out : |
1684 | 如果page_nid不等于NUMA_NO_NODE则task_numa_fault(last_cpupid, page_nid, HPAGE_PMD_NR, flags) |
1688 | 返回:0 |
名称 | 描述 |
---|---|
__handle_mm_fault | By the time we get here, we already hold the mm semaphore* The mmap_sem may have been released depending on flags and our* return value. See filemap_fault() and __lock_page_or_retry(). |
源代码转换工具 开放的插件接口 | X |
---|---|
支持:c/c++/esqlc/java Oracle/Informix/Mysql 插件可实现:逻辑报告 代码生成和批量转换代码 |