架构页表助手

通用 MM 期望具有 MMU 的架构提供助手,以便为不同的内存功能在各个级别创建、访问和修改页表项。这些页表助手需要符合跨平台的通用语义。下表描述了预期的语义,也可以在启动时通过 CONFIG_DEBUG_VM_PGTABLE 选项进行测试。此处或调试测试中的所有未来更改都需要保持同步。

PTE 页表助手

pte_same

测试两个 PTE 项是否相同

pte_present

测试有效的已映射 PTE

pte_young

测试年轻的 PTE

pte_dirty

测试脏的 PTE

pte_write

测试可写的 PTE

pte_special

测试特殊的 PTE

pte_protnone

测试 PROT_NONE PTE

pte_devmap

测试 ZONE_DEVICE 映射的 PTE

pte_soft_dirty

测试软脏 PTE

pte_swp_soft_dirty

测试软脏交换 PTE

pte_mkyoung

创建年轻的 PTE

pte_mkold

创建旧的 PTE

pte_mkdirty

创建脏的 PTE

pte_mkclean

创建干净的 PTE

pte_mkwrite

创建 VMA 指定类型的可写 PTE。

pte_mkwrite_novma

创建可写的 PTE,具有传统的写类型。

pte_wrprotect

创建写保护的 PTE

pte_mkspecial

创建特殊的 PTE

pte_mkdevmap

创建 ZONE_DEVICE 映射的 PTE

pte_mksoft_dirty

创建软脏 PTE

pte_clear_soft_dirty

清除软脏 PTE

pte_swp_mksoft_dirty

创建软脏交换 PTE

pte_swp_clear_soft_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

测试年轻的 PMD

pmd_dirty

测试脏的 PMD

pmd_write

测试可写的 PMD

pmd_special

测试特殊的 PMD

pmd_protnone

测试 PROT_NONE PMD

pmd_devmap

测试 ZONE_DEVICE 映射的 PMD

pmd_soft_dirty

测试软脏 PMD

pmd_swp_soft_dirty

测试软脏交换 PMD

pmd_mkyoung

创建年轻的 PMD

pmd_mkold

创建旧的 PMD

pmd_mkdirty

创建脏的 PMD

pmd_mkclean

创建干净的 PMD

pmd_mkwrite

创建 VMA 指定类型的可写 PMD。

pmd_mkwrite_novma

创建可写的 PMD,具有传统的写类型。

pmd_wrprotect

创建写保护的 PMD

pmd_mkspecial

创建特殊的 PMD

pmd_mkdevmap

创建 ZONE_DEVICE 映射的 PMD

pmd_mksoft_dirty

创建软脏 PMD

pmd_clear_soft_dirty

清除软脏 PMD

pmd_swp_mksoft_dirty

创建软脏交换 PMD

pmd_swp_clear_soft_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

测试年轻的 PUD

pud_dirty

测试脏的 PUD

pud_write

测试可写的 PUD

pud_devmap

测试 ZONE_DEVICE 映射的 PUD

pud_mkyoung

创建年轻的 PUD

pud_mkold

创建旧的 PUD

pud_mkdirty

创建脏的 PUD

pud_mkclean

创建干净的 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

测试脏的 HugeTLB

huge_pte_write

测试可写的 HugeTLB

huge_pte_mkdirty

创建脏的 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 创建交换项(架构)

__swp_to_pte_entry

从交换项(架构)创建映射的 PTE

__pmd_to_swp_entry

从映射的 PMD 创建交换项(架构)

__swp_to_pmd_entry

从交换项(架构)创建映射的 PMD

is_migration_entry | 测试迁移(读取或写入)交换项

is_writable_migration_entry

测试写入迁移交换项

make_readable_migration_entry

创建读取迁移交换项

make_writable_migration_entry

创建写入迁移交换项

[1] https://lore.kernel.org/linux-mm/[email protected]/