體系結構頁表輔助函式¶
通用 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/