架构页表助手¶
通用 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 |
创建写入迁移交换项 |