體系結構頁表輔助函式

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