体系结构页表辅助函数

通用 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/