体系结构页表辅助函数¶
通用 MM 期望具有 MMU 的体系结构提供辅助函数,以创建、访问和修改不同内存功能的各个级别的页表条目。这些页表辅助函数需要在各平台之间符合通用的语义。下表描述了预期的语义,这些语义也可以在启动期间通过 CONFIG_DEBUG_VM_PGTABLE 选项进行测试。此处或调试测试中的所有未来更改都需要同步。
PTE 页表辅助函数¶
pte_same |
测试两个 PTE 条目是否相同 |
pte_present |
测试有效的映射 PTE |
pte_young |
测试 young PTE |
pte_dirty |
测试 dirty PTE |
pte_write |
测试可写 PTE |
pte_special |
测试特殊 PTE |
pte_protnone |
测试 PROT_NONE PTE |
pte_devmap |
测试 ZONE_DEVICE 映射的 PTE |
pte_soft_dirty |
测试软 dirty PTE |
pte_swp_soft_dirty |
测试软 dirty 交换的 PTE |
pte_mkyoung |
创建 young PTE |
pte_mkold |
创建 old PTE |
pte_mkdirty |
创建 dirty PTE |
pte_mkclean |
创建 clean PTE |
pte_mkwrite |
创建由 VMA 指定类型的可写 PTE。 |
pte_mkwrite_novma |
创建可写 PTE,采用传统的写入类型。 |
pte_wrprotect |
创建写保护 PTE |
pte_mkspecial |
创建特殊 PTE |
pte_mkdevmap |
创建 ZONE_DEVICE 映射的 PTE |
pte_mksoft_dirty |
创建软 dirty PTE |
pte_clear_soft_dirty |
清除软 dirty PTE |
pte_swp_mksoft_dirty |
创建软 dirty 交换的 PTE |
pte_swp_clear_soft_dirty |
清除软 dirty 交换的 PTE |
pte_mknotpresent |
使映射的 PTE 无效 |
ptep_clear |
清除 PTE |
ptep_get_and_clear |
清除并返回 PTE |
ptep_get_and_clear_full |
清除并返回 PTE(批量 PTE 取消映射) |
ptep_test_and_clear_young |
从 PTE 中清除 young |
ptep_set_wrprotect |
转换为写保护 PTE |
ptep_set_access_flags |
转换为更宽松的 PTE |
PMD 页表辅助函数¶
pmd_same |
测试两个 PMD 条目是否相同 |
pmd_bad |
测试非表映射的 PMD |
pmd_leaf |
测试叶映射的 PMD |
pmd_trans_huge |
测试 PMD 处的透明大页 (THP) |
pmd_present |
测试 pmd_page() 是否指向有效内存 |
pmd_young |
测试 young PMD |
pmd_dirty |
测试 dirty PMD |
pmd_write |
测试可写 PMD |
pmd_special |
测试特殊 PMD |
pmd_protnone |
测试 PROT_NONE PMD |
pmd_devmap |
测试 ZONE_DEVICE 映射的 PMD |
pmd_soft_dirty |
测试软 dirty PMD |
pmd_swp_soft_dirty |
测试软 dirty 交换的 PMD |
pmd_mkyoung |
创建 young PMD |
pmd_mkold |
创建 old PMD |
pmd_mkdirty |
创建 dirty PMD |
pmd_mkclean |
创建 clean PMD |
pmd_mkwrite |
创建由 VMA 指定类型的可写 PMD。 |
pmd_mkwrite_novma |
创建可写 PMD,采用传统的写入类型。 |
pmd_wrprotect |
创建写保护 PMD |
pmd_mkspecial |
创建特殊 PMD |
pmd_mkdevmap |
创建 ZONE_DEVICE 映射的 PMD |
pmd_mksoft_dirty |
创建软 dirty PMD |
pmd_clear_soft_dirty |
清除软 dirty PMD |
pmd_swp_mksoft_dirty |
创建软 dirty 交换的 PMD |
pmd_swp_clear_soft_dirty |
清除软 dirty 交换的 PMD |
pmd_mkinvalid |
使存在的 PMD 无效;不要为不存在的 PMD 调用 [1] |
pmd_set_huge |
创建 PMD 大页面映射 |
pmd_clear_huge |
清除 PMD 大页面映射 |
pmdp_get_and_clear |
清除 PMD |
pmdp_get_and_clear_full |
清除 PMD |
pmdp_test_and_clear_young |
从 PMD 中清除 young |
pmdp_set_wrprotect |
转换为写保护 PMD |
pmdp_set_access_flags |
转换为更宽松的 PMD |
PUD 页表辅助函数¶
pud_same |
测试两个 PUD 条目是否相同 |
pud_bad |
测试非表映射的 PUD |
pud_leaf |
测试叶映射的 PUD |
pud_trans_huge |
测试 PUD 处的透明大页 (THP) |
pud_present |
测试有效的映射 PUD |
pud_young |
测试 young PUD |
pud_dirty |
测试 dirty PUD |
pud_write |
测试可写 PUD |
pud_devmap |
测试 ZONE_DEVICE 映射的 PUD |
pud_mkyoung |
创建 young PUD |
pud_mkold |
创建 old PUD |
pud_mkdirty |
创建 dirty PUD |
pud_mkclean |
创建 clean PUD |
pud_mkwrite |
创建可写 PUD |
pud_wrprotect |
创建写保护 PUD |
pud_mkdevmap |
创建 ZONE_DEVICE 映射的 PUD |
pud_mkinvalid |
使存在的 PUD 无效;不要为不存在的 PUD 调用 [1] |
pud_set_huge |
创建 PUD 大页面映射 |
pud_clear_huge |
清除 PUD 大页面映射 |
pudp_get_and_clear |
清除 PUD |
pudp_get_and_clear_full |
清除 PUD |
pudp_test_and_clear_young |
从 PUD 中清除 young |
pudp_set_wrprotect |
转换为写保护 PUD |
pudp_set_access_flags |
转换为更宽松的 PUD |
HugeTLB 页表辅助函数¶
pte_huge |
测试 HugeTLB |
arch_make_huge_pte |
创建 HugeTLB |
huge_pte_dirty |
测试 dirty HugeTLB |
huge_pte_write |
测试可写 HugeTLB |
huge_pte_mkdirty |
创建 dirty HugeTLB |
huge_pte_mkwrite |
创建可写 HugeTLB |
huge_pte_wrprotect |
创建写保护 HugeTLB |
huge_ptep_get_and_clear |
清除 HugeTLB |
huge_ptep_set_wrprotect |
转换为写保护 HugeTLB |
huge_ptep_set_access_flags | 转换为更宽松的 HugeTLB |
SWAP 页表辅助函数¶
__pte_to_swp_entry |
从映射的 PTE 创建交换条目(arch) |
|
__swp_to_pte_entry |
从交换条目(arch)创建映射的 PTE |
|
__pmd_to_swp_entry |
从映射的 PMD 创建交换条目(arch) |
|
__swp_to_pmd_entry |
从交换条目(arch)创建映射的 PMD |
|
is_migration_entry | 测试迁移(读取或写入)交换条目 |
||
is_writable_migration_entry |
测试写入迁移交换条目 |
|
make_readable_migration_entry |
创建读取迁移交换条目 |
|
make_writable_migration_entry |
创建写入迁移交换条目 |
[1] https://lore.kernel.org/linux-mm/20181017020930.GN30832@redhat.com/