brintos

brintos / linux-shallow public Read only

0
0
Text · 18.5 KiB · af24516 Raw
263 lines · plain
1.. SPDX-License-Identifier: GPL-2.02 3===============================4Architecture Page Table Helpers5===============================6 7Generic MM expects architectures (with MMU) to provide helpers to create, access8and modify page table entries at various level for different memory functions.9These page table helpers need to conform to a common semantics across platforms.10Following tables describe the expected semantics which can also be tested during11boot via CONFIG_DEBUG_VM_PGTABLE option. All future changes in here or the debug12test need to be in sync.13 14 15PTE Page Table Helpers16======================17 18+---------------------------+--------------------------------------------------+19| pte_same                  | Tests whether both PTE entries are the same      |20+---------------------------+--------------------------------------------------+21| pte_present               | Tests a valid mapped PTE                         |22+---------------------------+--------------------------------------------------+23| pte_young                 | Tests a young PTE                                |24+---------------------------+--------------------------------------------------+25| pte_dirty                 | Tests a dirty PTE                                |26+---------------------------+--------------------------------------------------+27| pte_write                 | Tests a writable PTE                             |28+---------------------------+--------------------------------------------------+29| pte_special               | Tests a special PTE                              |30+---------------------------+--------------------------------------------------+31| pte_protnone              | Tests a PROT_NONE PTE                            |32+---------------------------+--------------------------------------------------+33| pte_devmap                | Tests a ZONE_DEVICE mapped PTE                   |34+---------------------------+--------------------------------------------------+35| pte_soft_dirty            | Tests a soft dirty PTE                           |36+---------------------------+--------------------------------------------------+37| pte_swp_soft_dirty        | Tests a soft dirty swapped PTE                   |38+---------------------------+--------------------------------------------------+39| pte_mkyoung               | Creates a young PTE                              |40+---------------------------+--------------------------------------------------+41| pte_mkold                 | Creates an old PTE                               |42+---------------------------+--------------------------------------------------+43| pte_mkdirty               | Creates a dirty PTE                              |44+---------------------------+--------------------------------------------------+45| pte_mkclean               | Creates a clean PTE                              |46+---------------------------+--------------------------------------------------+47| pte_mkwrite               | Creates a writable PTE of the type specified by  |48|                           | the VMA.                                         |49+---------------------------+--------------------------------------------------+50| pte_mkwrite_novma         | Creates a writable PTE, of the conventional type |51|                           | of writable.                                     |52+---------------------------+--------------------------------------------------+53| pte_wrprotect             | Creates a write protected PTE                    |54+---------------------------+--------------------------------------------------+55| pte_mkspecial             | Creates a special PTE                            |56+---------------------------+--------------------------------------------------+57| pte_mkdevmap              | Creates a ZONE_DEVICE mapped PTE                 |58+---------------------------+--------------------------------------------------+59| pte_mksoft_dirty          | Creates a soft dirty PTE                         |60+---------------------------+--------------------------------------------------+61| pte_clear_soft_dirty      | Clears a soft dirty PTE                          |62+---------------------------+--------------------------------------------------+63| pte_swp_mksoft_dirty      | Creates a soft dirty swapped PTE                 |64+---------------------------+--------------------------------------------------+65| pte_swp_clear_soft_dirty  | Clears a soft dirty swapped PTE                  |66+---------------------------+--------------------------------------------------+67| pte_mknotpresent          | Invalidates a mapped PTE                         |68+---------------------------+--------------------------------------------------+69| ptep_clear                | Clears a PTE                                     |70+---------------------------+--------------------------------------------------+71| ptep_get_and_clear        | Clears and returns PTE                           |72+---------------------------+--------------------------------------------------+73| ptep_get_and_clear_full   | Clears and returns PTE (batched PTE unmap)       |74+---------------------------+--------------------------------------------------+75| ptep_test_and_clear_young | Clears young from a PTE                          |76+---------------------------+--------------------------------------------------+77| ptep_set_wrprotect        | Converts into a write protected PTE              |78+---------------------------+--------------------------------------------------+79| ptep_set_access_flags     | Converts into a more permissive PTE              |80+---------------------------+--------------------------------------------------+81 82 83PMD Page Table Helpers84======================85 86+---------------------------+--------------------------------------------------+87| pmd_same                  | Tests whether both PMD entries are the same      |88+---------------------------+--------------------------------------------------+89| pmd_bad                   | Tests a non-table mapped PMD                     |90+---------------------------+--------------------------------------------------+91| pmd_leaf                  | Tests a leaf mapped PMD                          |92+---------------------------+--------------------------------------------------+93| pmd_trans_huge            | Tests a Transparent Huge Page (THP) at PMD       |94+---------------------------+--------------------------------------------------+95| pmd_present               | Tests whether pmd_page() points to valid memory  |96+---------------------------+--------------------------------------------------+97| pmd_young                 | Tests a young PMD                                |98+---------------------------+--------------------------------------------------+99| pmd_dirty                 | Tests a dirty PMD                                |100+---------------------------+--------------------------------------------------+101| pmd_write                 | Tests a writable PMD                             |102+---------------------------+--------------------------------------------------+103| pmd_special               | Tests a special PMD                              |104+---------------------------+--------------------------------------------------+105| pmd_protnone              | Tests a PROT_NONE PMD                            |106+---------------------------+--------------------------------------------------+107| pmd_devmap                | Tests a ZONE_DEVICE mapped PMD                   |108+---------------------------+--------------------------------------------------+109| pmd_soft_dirty            | Tests a soft dirty PMD                           |110+---------------------------+--------------------------------------------------+111| pmd_swp_soft_dirty        | Tests a soft dirty swapped PMD                   |112+---------------------------+--------------------------------------------------+113| pmd_mkyoung               | Creates a young PMD                              |114+---------------------------+--------------------------------------------------+115| pmd_mkold                 | Creates an old PMD                               |116+---------------------------+--------------------------------------------------+117| pmd_mkdirty               | Creates a dirty PMD                              |118+---------------------------+--------------------------------------------------+119| pmd_mkclean               | Creates a clean PMD                              |120+---------------------------+--------------------------------------------------+121| pmd_mkwrite               | Creates a writable PMD of the type specified by  |122|                           | the VMA.                                         |123+---------------------------+--------------------------------------------------+124| pmd_mkwrite_novma         | Creates a writable PMD, of the conventional type |125|                           | of writable.                                     |126+---------------------------+--------------------------------------------------+127| pmd_wrprotect             | Creates a write protected PMD                    |128+---------------------------+--------------------------------------------------+129| pmd_mkspecial             | Creates a special PMD                            |130+---------------------------+--------------------------------------------------+131| pmd_mkdevmap              | Creates a ZONE_DEVICE mapped PMD                 |132+---------------------------+--------------------------------------------------+133| pmd_mksoft_dirty          | Creates a soft dirty PMD                         |134+---------------------------+--------------------------------------------------+135| pmd_clear_soft_dirty      | Clears a soft dirty PMD                          |136+---------------------------+--------------------------------------------------+137| pmd_swp_mksoft_dirty      | Creates a soft dirty swapped PMD                 |138+---------------------------+--------------------------------------------------+139| pmd_swp_clear_soft_dirty  | Clears a soft dirty swapped PMD                  |140+---------------------------+--------------------------------------------------+141| pmd_mkinvalid             | Invalidates a present PMD; do not call for       |142|                           | non-present PMD [1]                              |143+---------------------------+--------------------------------------------------+144| pmd_set_huge              | Creates a PMD huge mapping                       |145+---------------------------+--------------------------------------------------+146| pmd_clear_huge            | Clears a PMD huge mapping                        |147+---------------------------+--------------------------------------------------+148| pmdp_get_and_clear        | Clears a PMD                                     |149+---------------------------+--------------------------------------------------+150| pmdp_get_and_clear_full   | Clears a PMD                                     |151+---------------------------+--------------------------------------------------+152| pmdp_test_and_clear_young | Clears young from a PMD                          |153+---------------------------+--------------------------------------------------+154| pmdp_set_wrprotect        | Converts into a write protected PMD              |155+---------------------------+--------------------------------------------------+156| pmdp_set_access_flags     | Converts into a more permissive PMD              |157+---------------------------+--------------------------------------------------+158 159 160PUD Page Table Helpers161======================162 163+---------------------------+--------------------------------------------------+164| pud_same                  | Tests whether both PUD entries are the same      |165+---------------------------+--------------------------------------------------+166| pud_bad                   | Tests a non-table mapped PUD                     |167+---------------------------+--------------------------------------------------+168| pud_leaf                  | Tests a leaf mapped PUD                          |169+---------------------------+--------------------------------------------------+170| pud_trans_huge            | Tests a Transparent Huge Page (THP) at PUD       |171+---------------------------+--------------------------------------------------+172| pud_present               | Tests a valid mapped PUD                         |173+---------------------------+--------------------------------------------------+174| pud_young                 | Tests a young PUD                                |175+---------------------------+--------------------------------------------------+176| pud_dirty                 | Tests a dirty PUD                                |177+---------------------------+--------------------------------------------------+178| pud_write                 | Tests a writable PUD                             |179+---------------------------+--------------------------------------------------+180| pud_devmap                | Tests a ZONE_DEVICE mapped PUD                   |181+---------------------------+--------------------------------------------------+182| pud_mkyoung               | Creates a young PUD                              |183+---------------------------+--------------------------------------------------+184| pud_mkold                 | Creates an old PUD                               |185+---------------------------+--------------------------------------------------+186| pud_mkdirty               | Creates a dirty PUD                              |187+---------------------------+--------------------------------------------------+188| pud_mkclean               | Creates a clean PUD                              |189+---------------------------+--------------------------------------------------+190| pud_mkwrite               | Creates a writable PUD                           |191+---------------------------+--------------------------------------------------+192| pud_wrprotect             | Creates a write protected PUD                    |193+---------------------------+--------------------------------------------------+194| pud_mkdevmap              | Creates a ZONE_DEVICE mapped PUD                 |195+---------------------------+--------------------------------------------------+196| pud_mkinvalid             | Invalidates a present PUD; do not call for       |197|                           | non-present PUD [1]                              |198+---------------------------+--------------------------------------------------+199| pud_set_huge              | Creates a PUD huge mapping                       |200+---------------------------+--------------------------------------------------+201| pud_clear_huge            | Clears a PUD huge mapping                        |202+---------------------------+--------------------------------------------------+203| pudp_get_and_clear        | Clears a PUD                                     |204+---------------------------+--------------------------------------------------+205| pudp_get_and_clear_full   | Clears a PUD                                     |206+---------------------------+--------------------------------------------------+207| pudp_test_and_clear_young | Clears young from a PUD                          |208+---------------------------+--------------------------------------------------+209| pudp_set_wrprotect        | Converts into a write protected PUD              |210+---------------------------+--------------------------------------------------+211| pudp_set_access_flags     | Converts into a more permissive PUD              |212+---------------------------+--------------------------------------------------+213 214 215HugeTLB Page Table Helpers216==========================217 218+---------------------------+--------------------------------------------------+219| pte_huge                  | Tests a HugeTLB                                  |220+---------------------------+--------------------------------------------------+221| arch_make_huge_pte        | Creates a HugeTLB                                |222+---------------------------+--------------------------------------------------+223| huge_pte_dirty            | Tests a dirty HugeTLB                            |224+---------------------------+--------------------------------------------------+225| huge_pte_write            | Tests a writable HugeTLB                         |226+---------------------------+--------------------------------------------------+227| huge_pte_mkdirty          | Creates a dirty HugeTLB                          |228+---------------------------+--------------------------------------------------+229| huge_pte_mkwrite          | Creates a writable HugeTLB                       |230+---------------------------+--------------------------------------------------+231| huge_pte_wrprotect        | Creates a write protected HugeTLB                |232+---------------------------+--------------------------------------------------+233| huge_ptep_get_and_clear   | Clears a HugeTLB                                 |234+---------------------------+--------------------------------------------------+235| huge_ptep_set_wrprotect   | Converts into a write protected HugeTLB          |236+---------------------------+--------------------------------------------------+237| huge_ptep_set_access_flags  | Converts into a more permissive HugeTLB        |238+---------------------------+--------------------------------------------------+239 240 241SWAP Page Table Helpers242========================243 244+---------------------------+--------------------------------------------------+245| __pte_to_swp_entry        | Creates a swapped entry (arch) from a mapped PTE |246+---------------------------+--------------------------------------------------+247| __swp_to_pte_entry        | Creates a mapped PTE from a swapped entry (arch) |248+---------------------------+--------------------------------------------------+249| __pmd_to_swp_entry        | Creates a swapped entry (arch) from a mapped PMD |250+---------------------------+--------------------------------------------------+251| __swp_to_pmd_entry        | Creates a mapped PMD from a swapped entry (arch) |252+---------------------------+--------------------------------------------------+253| is_migration_entry        | Tests a migration (read or write) swapped entry  |254+-------------------------------+----------------------------------------------+255| is_writable_migration_entry   | Tests a write migration swapped entry        |256+-------------------------------+----------------------------------------------+257| make_readable_migration_entry | Creates a read migration swapped entry       |258+-------------------------------+----------------------------------------------+259| make_writable_migration_entry | Creates a write migration swapped entry      |260+-------------------------------+----------------------------------------------+261 262[1] https://lore.kernel.org/linux-mm/20181017020930.GN30832@redhat.com/263