···3333/* 44=32+12, the limit we can fit into an unsigned long pfn */3434#define __PHYSICAL_MASK_SHIFT 443535#define __VIRTUAL_MASK_SHIFT 323636-#define PAGETABLE_LEVELS 337363837#else /* !CONFIG_X86_PAE */3938#define __PHYSICAL_MASK_SHIFT 324039#define __VIRTUAL_MASK_SHIFT 324141-#define PAGETABLE_LEVELS 24240#endif /* CONFIG_X86_PAE */43414442#ifndef __ASSEMBLY__
···1616 (ie, 32-bit PAE). */1717#define PHYSICAL_PAGE_MASK (((signed long)PAGE_MASK) & __PHYSICAL_MASK)18181919-/* PTE_PFN_MASK extracts the PFN from a (pte|pmd|pud|pgd)val_t */2020-#define PTE_PFN_MASK ((pteval_t)PHYSICAL_PAGE_MASK)2121-2222-/* PTE_FLAGS_MASK extracts the flags from a (pte|pmd|pud|pgd)val_t */2323-#define PTE_FLAGS_MASK (~PTE_PFN_MASK)2424-2519#define PMD_PAGE_SIZE (_AC(1, UL) << PMD_SHIFT)2620#define PMD_PAGE_MASK (~(PMD_PAGE_SIZE-1))2721
+2
arch/x86/include/asm/pgtable-2level_types.h
···1717#endif /* !__ASSEMBLY__ */18181919#define SHARED_KERNEL_PMD 02020+#define PAGETABLE_LEVELS 220212122/*2223 * traditional i386 two-level paging structure:···25242625#define PGDIR_SHIFT 222726#define PTRS_PER_PGD 10242727+28282929/*3030 * the i386 is two-level, so we don't really have any
+2
arch/x86/include/asm/pgtable-3level_types.h
···2424#define SHARED_KERNEL_PMD 12525#endif26262727+#define PAGETABLE_LEVELS 32828+2729/*2830 * PGDIR_SHIFT determines what a top-level page table entry can map2931 */
+1
arch/x86/include/asm/pgtable_64_types.h
···1818#endif /* !__ASSEMBLY__ */19192020#define SHARED_KERNEL_PMD 02121+#define PAGETABLE_LEVELS 421222223/*2324 * PGDIR_SHIFT determines what a top-level page table entry can map
+6
arch/x86/include/asm/pgtable_types.h
···173173174174#include <linux/types.h>175175176176+/* PTE_PFN_MASK extracts the PFN from a (pte|pmd|pud|pgd)val_t */177177+#define PTE_PFN_MASK ((pteval_t)PHYSICAL_PAGE_MASK)178178+179179+/* PTE_FLAGS_MASK extracts the flags from a (pte|pmd|pud|pgd)val_t */180180+#define PTE_FLAGS_MASK (~PTE_PFN_MASK)181181+176182typedef struct pgprot { pgprotval_t pgprot; } pgprot_t;177183178184typedef struct { pgdval_t pgd; } pgd_t;