···11#ifndef _ASM_X86_PAGE_H22#define _ASM_X86_PAGE_H3344-#include <linux/const.h>55-66-/* PAGE_SHIFT determines the page size */77-#define PAGE_SHIFT 1288-#define PAGE_SIZE (_AC(1,UL) << PAGE_SHIFT)99-#define PAGE_MASK (~(PAGE_SIZE-1))1010-114#ifdef __KERNEL__1251313-#define __PHYSICAL_MASK ((phys_addr_t)(1ULL << __PHYSICAL_MASK_SHIFT) - 1)1414-#define __VIRTUAL_MASK ((1UL << __VIRTUAL_MASK_SHIFT) - 1)1515-1616-/* Cast PAGE_MASK to a signed type so that it is sign-extended if1717- virtual addresses are 32-bits but physical addresses are larger1818- (ie, 32-bit PAE). */1919-#define PHYSICAL_PAGE_MASK (((signed long)PAGE_MASK) & __PHYSICAL_MASK)2020-2121-/* PTE_PFN_MASK extracts the PFN from a (pte|pmd|pud|pgd)val_t */2222-#define PTE_PFN_MASK ((pteval_t)PHYSICAL_PAGE_MASK)2323-2424-/* PTE_FLAGS_MASK extracts the flags from a (pte|pmd|pud|pgd)val_t */2525-#define PTE_FLAGS_MASK (~PTE_PFN_MASK)2626-2727-#define PMD_PAGE_SIZE (_AC(1, UL) << PMD_SHIFT)2828-#define PMD_PAGE_MASK (~(PMD_PAGE_SIZE-1))2929-3030-#define HPAGE_SHIFT PMD_SHIFT3131-#define HPAGE_SIZE (_AC(1,UL) << HPAGE_SHIFT)3232-#define HPAGE_MASK (~(HPAGE_SIZE - 1))3333-#define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT)3434-3535-#define HUGE_MAX_HSTATE 23636-3737-#ifndef __ASSEMBLY__3838-#include <linux/types.h>3939-#endif66+#include <asm/page_types.h>407418#ifdef CONFIG_X86_64429#include <asm/page_64.h>···1144#include <asm/page_32.h>1245#endif /* CONFIG_X86_64 */13461414-#define PAGE_OFFSET ((unsigned long)__PAGE_OFFSET)1515-1616-#define VM_DATA_DEFAULT_FLAGS \1717- (((current->personality & READ_IMPLIES_EXEC) ? VM_EXEC : 0 ) | \1818- VM_READ | VM_WRITE | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)1919-2020-2147#ifndef __ASSEMBLY__2222-2323-typedef struct { pgdval_t pgd; } pgd_t;2424-typedef struct { pgprotval_t pgprot; } pgprot_t;2525-2626-extern int page_is_ram(unsigned long pagenr);2727-extern int pagerange_is_ram(unsigned long start, unsigned long end);2828-extern int devmem_is_allowed(unsigned long pagenr);2929-extern void map_devmem(unsigned long pfn, unsigned long size,3030- pgprot_t vma_prot);3131-extern void unmap_devmem(unsigned long pfn, unsigned long size,3232- pgprot_t vma_prot);3333-3434-extern unsigned long max_low_pfn_mapped;3535-extern unsigned long max_pfn_mapped;36483749struct page;38503951static inline void clear_user_page(void *page, unsigned long vaddr,4040- struct page *pg)5252+ struct page *pg)4153{4254 clear_page(page);4355}44564557static inline void copy_user_page(void *to, void *from, unsigned long vaddr,4646- struct page *topage)5858+ struct page *topage)4759{4860 copy_page(to, from);4961}···4810249103#if PAGETABLE_LEVELS >= 350104#if PAGETABLE_LEVELS == 45151-typedef struct { pudval_t pud; } pud_t;5252-53105static inline pud_t native_make_pud(pmdval_t val)54106{55107 return (pud_t) { val };···70126{71127 return native_pud_val(pud) & PTE_FLAGS_MASK;72128}7373-7474-typedef struct { pmdval_t pmd; } pmd_t;7512976130static inline pmd_t native_make_pmd(pmdval_t val)77131{
+2-87
arch/x86/include/asm/page_32.h
···11#ifndef _ASM_X86_PAGE_32_H22#define _ASM_X86_PAGE_32_H3344-/*55- * This handles the memory map.66- *77- * A __PAGE_OFFSET of 0xC0000000 means that the kernel has88- * a virtual address space of one gigabyte, which limits the99- * amount of physical memory you can use to about 950MB.1010- *1111- * If you want more physical memory than this then see the CONFIG_HIGHMEM4G1212- * and CONFIG_HIGHMEM64G options in the kernel configuration.1313- */1414-#define __PAGE_OFFSET _AC(CONFIG_PAGE_OFFSET, UL)1515-1616-#ifdef CONFIG_4KSTACKS1717-#define THREAD_ORDER 01818-#else1919-#define THREAD_ORDER 12020-#endif2121-#define THREAD_SIZE (PAGE_SIZE << THREAD_ORDER)2222-2323-#define STACKFAULT_STACK 02424-#define DOUBLEFAULT_STACK 12525-#define NMI_STACK 02626-#define DEBUG_STACK 02727-#define MCE_STACK 02828-#define N_EXCEPTION_STACKS 12929-3030-#ifdef CONFIG_X86_PAE3131-/* 44=32+12, the limit we can fit into an unsigned long pfn */3232-#define __PHYSICAL_MASK_SHIFT 443333-#define __VIRTUAL_MASK_SHIFT 323434-#define PAGETABLE_LEVELS 33535-3636-#ifndef __ASSEMBLY__3737-typedef u64 pteval_t;3838-typedef u64 pmdval_t;3939-typedef u64 pudval_t;4040-typedef u64 pgdval_t;4141-typedef u64 pgprotval_t;4242-4343-typedef union {4444- struct {4545- unsigned long pte_low, pte_high;4646- };4747- pteval_t pte;4848-} pte_t;4949-#endif /* __ASSEMBLY__5050- */5151-#else /* !CONFIG_X86_PAE */5252-#define __PHYSICAL_MASK_SHIFT 325353-#define __VIRTUAL_MASK_SHIFT 325454-#define PAGETABLE_LEVELS 25555-5656-#ifndef __ASSEMBLY__5757-typedef unsigned long pteval_t;5858-typedef unsigned long pmdval_t;5959-typedef unsigned long pudval_t;6060-typedef unsigned long pgdval_t;6161-typedef unsigned long pgprotval_t;6262-6363-typedef union {6464- pteval_t pte;6565- pteval_t pte_low;6666-} pte_t;6767-6868-#endif /* __ASSEMBLY__ */6969-#endif /* CONFIG_X86_PAE */7070-7171-#ifndef __ASSEMBLY__7272-typedef struct page *pgtable_t;7373-#endif44+#include <asm/page_32_types.h>745756#ifdef CONFIG_HUGETLB_PAGE767#define HAVE_ARCH_HUGETLB_UNMAPPED_AREA778#endif7897979-#ifndef __ASSEMBLY__8010#define __phys_addr_nodebug(x) ((x) - PAGE_OFFSET)8111#ifdef CONFIG_DEBUG_VIRTUAL8212extern unsigned long __phys_addr(unsigned long);···1989#define pfn_valid(pfn) ((pfn) < max_mapnr)2090#endif /* CONFIG_FLATMEM */21912222-extern int nx_enabled;2323-2424-/*2525- * This much address space is reserved for vmalloc() and iomap()2626- * as well as fixmap mappings.2727- */2828-extern unsigned int __VMALLOC_RESERVE;2929-extern int sysctl_legacy_va_layout;3030-3131-extern void find_low_pfn_range(void);3232-extern unsigned long init_memory_mapping(unsigned long start,3333- unsigned long end);3434-extern void initmem_init(unsigned long, unsigned long);3535-extern void free_initmem(void);3636-extern void setup_bootmem_allocator(void);3737-9292+#ifndef __ASSEMBLY__38933994#ifdef CONFIG_X86_USE_3DNOW4095#include <asm/mmx.h>
+90
arch/x86/include/asm/page_32_types.h
···11+#ifndef _ASM_X86_PAGE_32_DEFS_H22+#define _ASM_X86_PAGE_32_DEFS_H33+44+#include <linux/const.h>55+66+/*77+ * This handles the memory map.88+ *99+ * A __PAGE_OFFSET of 0xC0000000 means that the kernel has1010+ * a virtual address space of one gigabyte, which limits the1111+ * amount of physical memory you can use to about 950MB.1212+ *1313+ * If you want more physical memory than this then see the CONFIG_HIGHMEM4G1414+ * and CONFIG_HIGHMEM64G options in the kernel configuration.1515+ */1616+#define __PAGE_OFFSET _AC(CONFIG_PAGE_OFFSET, UL)1717+1818+#ifdef CONFIG_4KSTACKS1919+#define THREAD_ORDER 02020+#else2121+#define THREAD_ORDER 12222+#endif2323+#define THREAD_SIZE (PAGE_SIZE << THREAD_ORDER)2424+2525+#define STACKFAULT_STACK 02626+#define DOUBLEFAULT_STACK 12727+#define NMI_STACK 02828+#define DEBUG_STACK 02929+#define MCE_STACK 03030+#define N_EXCEPTION_STACKS 13131+3232+#ifdef CONFIG_X86_PAE3333+/* 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 33737+3838+#else /* !CONFIG_X86_PAE */3939+#define __PHYSICAL_MASK_SHIFT 324040+#define __VIRTUAL_MASK_SHIFT 324141+#define PAGETABLE_LEVELS 24242+#endif /* CONFIG_X86_PAE */4343+4444+#ifndef __ASSEMBLY__4545+4646+#ifdef CONFIG_X86_PAE4747+typedef u64 pteval_t;4848+typedef u64 pmdval_t;4949+typedef u64 pudval_t;5050+typedef u64 pgdval_t;5151+typedef u64 pgprotval_t;5252+5353+typedef union {5454+ struct {5555+ unsigned long pte_low, pte_high;5656+ };5757+ pteval_t pte;5858+} pte_t;5959+#else /* !CONFIG_X86_PAE */6060+typedef unsigned long pteval_t;6161+typedef unsigned long pmdval_t;6262+typedef unsigned long pudval_t;6363+typedef unsigned long pgdval_t;6464+typedef unsigned long pgprotval_t;6565+6666+typedef union {6767+ pteval_t pte;6868+ pteval_t pte_low;6969+} pte_t;7070+#endif /* CONFIG_X86_PAE */7171+7272+extern int nx_enabled;7373+7474+/*7575+ * This much address space is reserved for vmalloc() and iomap()7676+ * as well as fixmap mappings.7777+ */7878+extern unsigned int __VMALLOC_RESERVE;7979+extern int sysctl_legacy_va_layout;8080+8181+extern void find_low_pfn_range(void);8282+extern unsigned long init_memory_mapping(unsigned long start,8383+ unsigned long end);8484+extern void initmem_init(unsigned long, unsigned long);8585+extern void free_initmem(void);8686+extern void setup_bootmem_allocator(void);8787+8888+#endif /* !__ASSEMBLY__ */8989+9090+#endif /* _ASM_X86_PAGE_32_DEFS_H */
+1-100
arch/x86/include/asm/page_64.h
···11#ifndef _ASM_X86_PAGE_64_H22#define _ASM_X86_PAGE_64_H3344-#define PAGETABLE_LEVELS 455-66-#define THREAD_ORDER 177-#define THREAD_SIZE (PAGE_SIZE << THREAD_ORDER)88-#define CURRENT_MASK (~(THREAD_SIZE - 1))99-1010-#define EXCEPTION_STACK_ORDER 01111-#define EXCEPTION_STKSZ (PAGE_SIZE << EXCEPTION_STACK_ORDER)1212-1313-#define DEBUG_STACK_ORDER (EXCEPTION_STACK_ORDER + 1)1414-#define DEBUG_STKSZ (PAGE_SIZE << DEBUG_STACK_ORDER)1515-1616-#define IRQ_STACK_ORDER 21717-#define IRQ_STACK_SIZE (PAGE_SIZE << IRQ_STACK_ORDER)1818-1919-#define STACKFAULT_STACK 12020-#define DOUBLEFAULT_STACK 22121-#define NMI_STACK 32222-#define DEBUG_STACK 42323-#define MCE_STACK 52424-#define N_EXCEPTION_STACKS 5 /* hw limit: 7 */2525-2626-#define PUD_PAGE_SIZE (_AC(1, UL) << PUD_SHIFT)2727-#define PUD_PAGE_MASK (~(PUD_PAGE_SIZE-1))2828-2929-/*3030- * Set __PAGE_OFFSET to the most negative possible address +3131- * PGDIR_SIZE*16 (pgd slot 272). The gap is to allow a space for a3232- * hypervisor to fit. Choosing 16 slots here is arbitrary, but it's3333- * what Xen requires.3434- */3535-#define __PAGE_OFFSET _AC(0xffff880000000000, UL)3636-3737-#define __PHYSICAL_START CONFIG_PHYSICAL_START3838-#define __KERNEL_ALIGN 0x2000003939-4040-/*4141- * Make sure kernel is aligned to 2MB address. Catching it at compile4242- * time is better. Change your config file and compile the kernel4343- * for a 2MB aligned address (CONFIG_PHYSICAL_START)4444- */4545-#if (CONFIG_PHYSICAL_START % __KERNEL_ALIGN) != 04646-#error "CONFIG_PHYSICAL_START must be a multiple of 2MB"4747-#endif4848-4949-#define __START_KERNEL (__START_KERNEL_map + __PHYSICAL_START)5050-#define __START_KERNEL_map _AC(0xffffffff80000000, UL)5151-5252-/* See Documentation/x86_64/mm.txt for a description of the memory map. */5353-#define __PHYSICAL_MASK_SHIFT 465454-#define __VIRTUAL_MASK_SHIFT 485555-5656-/*5757- * Kernel image size is limited to 512 MB (see level2_kernel_pgt in5858- * arch/x86/kernel/head_64.S), and it is mapped here:5959- */6060-#define KERNEL_IMAGE_SIZE (512 * 1024 * 1024)6161-#define KERNEL_IMAGE_START _AC(0xffffffff80000000, UL)6262-6363-#ifndef __ASSEMBLY__6464-void clear_page(void *page);6565-void copy_page(void *to, void *from);6666-6767-/* duplicated to the one in bootmem.h */6868-extern unsigned long max_pfn;6969-extern unsigned long phys_base;7070-7171-extern unsigned long __phys_addr(unsigned long);7272-#define __phys_reloc_hide(x) (x)7373-7474-/*7575- * These are used to make use of C type-checking..7676- */7777-typedef unsigned long pteval_t;7878-typedef unsigned long pmdval_t;7979-typedef unsigned long pudval_t;8080-typedef unsigned long pgdval_t;8181-typedef unsigned long pgprotval_t;8282-8383-typedef struct page *pgtable_t;8484-8585-typedef struct { pteval_t pte; } pte_t;8686-8787-#define vmemmap ((struct page *)VMEMMAP_START)8888-8989-extern unsigned long init_memory_mapping(unsigned long start,9090- unsigned long end);9191-9292-extern void initmem_init(unsigned long start_pfn, unsigned long end_pfn);9393-extern void free_initmem(void);9494-9595-extern void init_extra_mapping_uc(unsigned long phys, unsigned long size);9696-extern void init_extra_mapping_wb(unsigned long phys, unsigned long size);9797-9898-#endif /* !__ASSEMBLY__ */9999-100100-#ifdef CONFIG_FLATMEM101101-#define pfn_valid(pfn) ((pfn) < max_pfn)102102-#endif103103-44+#include <asm/page_64_types.h>10451056#endif /* _ASM_X86_PAGE_64_H */
+114
arch/x86/include/asm/page_64.h.rej
···11+***************22+*** 1,105 ****33+ #ifndef _ASM_X86_PAGE_64_H44+ #define _ASM_X86_PAGE_64_H55+66+- #define PAGETABLE_LEVELS 477+- 88+- #define THREAD_ORDER 199+- #define THREAD_SIZE (PAGE_SIZE << THREAD_ORDER)1010+- #define CURRENT_MASK (~(THREAD_SIZE - 1))1111+- 1212+- #define EXCEPTION_STACK_ORDER 01313+- #define EXCEPTION_STKSZ (PAGE_SIZE << EXCEPTION_STACK_ORDER)1414+- 1515+- #define DEBUG_STACK_ORDER (EXCEPTION_STACK_ORDER + 1)1616+- #define DEBUG_STKSZ (PAGE_SIZE << DEBUG_STACK_ORDER)1717+- 1818+- #define IRQSTACK_ORDER 21919+- #define IRQSTACKSIZE (PAGE_SIZE << IRQSTACK_ORDER)2020+- 2121+- #define STACKFAULT_STACK 12222+- #define DOUBLEFAULT_STACK 22323+- #define NMI_STACK 32424+- #define DEBUG_STACK 42525+- #define MCE_STACK 52626+- #define N_EXCEPTION_STACKS 5 /* hw limit: 7 */2727+- 2828+- #define PUD_PAGE_SIZE (_AC(1, UL) << PUD_SHIFT)2929+- #define PUD_PAGE_MASK (~(PUD_PAGE_SIZE-1))3030+- 3131+- /*3232+- * Set __PAGE_OFFSET to the most negative possible address +3333+- * PGDIR_SIZE*16 (pgd slot 272). The gap is to allow a space for a3434+- * hypervisor to fit. Choosing 16 slots here is arbitrary, but it's3535+- * what Xen requires.3636+- */3737+- #define __PAGE_OFFSET _AC(0xffff880000000000, UL)3838+- 3939+- #define __PHYSICAL_START CONFIG_PHYSICAL_START4040+- #define __KERNEL_ALIGN 0x2000004141+- 4242+- /*4343+- * Make sure kernel is aligned to 2MB address. Catching it at compile4444+- * time is better. Change your config file and compile the kernel4545+- * for a 2MB aligned address (CONFIG_PHYSICAL_START)4646+- */4747+- #if (CONFIG_PHYSICAL_START % __KERNEL_ALIGN) != 04848+- #error "CONFIG_PHYSICAL_START must be a multiple of 2MB"4949+- #endif5050+- 5151+- #define __START_KERNEL (__START_KERNEL_map + __PHYSICAL_START)5252+- #define __START_KERNEL_map _AC(0xffffffff80000000, UL)5353+- 5454+- /* See Documentation/x86_64/mm.txt for a description of the memory map. */5555+- #define __PHYSICAL_MASK_SHIFT 465656+- #define __VIRTUAL_MASK_SHIFT 485757+- 5858+- /*5959+- * Kernel image size is limited to 512 MB (see level2_kernel_pgt in6060+- * arch/x86/kernel/head_64.S), and it is mapped here:6161+- */6262+- #define KERNEL_IMAGE_SIZE (512 * 1024 * 1024)6363+- #define KERNEL_IMAGE_START _AC(0xffffffff80000000, UL)6464+- 6565+- #ifndef __ASSEMBLY__6666+- void clear_page(void *page);6767+- void copy_page(void *to, void *from);6868+- 6969+- /* duplicated to the one in bootmem.h */7070+- extern unsigned long max_pfn;7171+- extern unsigned long phys_base;7272+- 7373+- extern unsigned long __phys_addr(unsigned long);7474+- #define __phys_reloc_hide(x) (x)7575+- 7676+- /*7777+- * These are used to make use of C type-checking..7878+- */7979+- typedef unsigned long pteval_t;8080+- typedef unsigned long pmdval_t;8181+- typedef unsigned long pudval_t;8282+- typedef unsigned long pgdval_t;8383+- typedef unsigned long pgprotval_t;8484+- 8585+- typedef struct page *pgtable_t;8686+- 8787+- typedef struct { pteval_t pte; } pte_t;8888+- 8989+- #define vmemmap ((struct page *)VMEMMAP_START)9090+- 9191+- extern unsigned long init_memory_mapping(unsigned long start,9292+- unsigned long end);9393+- 9494+- extern void initmem_init(unsigned long start_pfn, unsigned long end_pfn);9595+- extern void free_initmem(void);9696+- 9797+- extern void init_extra_mapping_uc(unsigned long phys, unsigned long size);9898+- extern void init_extra_mapping_wb(unsigned long phys, unsigned long size);9999+- 100100+- #endif /* !__ASSEMBLY__ */101101+- 102102+- #ifdef CONFIG_FLATMEM103103+- #define pfn_valid(pfn) ((pfn) < max_pfn)104104+- #endif105105+- 106106+107107+ #endif /* _ASM_X86_PAGE_64_H */108108+--- 1,6 ----109109+ #ifndef _ASM_X86_PAGE_64_H110110+ #define _ASM_X86_PAGE_64_H111111+112112++ #include <asm/page_64_types.h>113113+114114+ #endif /* _ASM_X86_PAGE_64_H */
+102
arch/x86/include/asm/page_64_types.h
···11+#ifndef _ASM_X86_PAGE_64_DEFS_H22+#define _ASM_X86_PAGE_64_DEFS_H33+44+#define PAGETABLE_LEVELS 455+66+#define THREAD_ORDER 177+#define THREAD_SIZE (PAGE_SIZE << THREAD_ORDER)88+#define CURRENT_MASK (~(THREAD_SIZE - 1))99+1010+#define EXCEPTION_STACK_ORDER 01111+#define EXCEPTION_STKSZ (PAGE_SIZE << EXCEPTION_STACK_ORDER)1212+1313+#define DEBUG_STACK_ORDER (EXCEPTION_STACK_ORDER + 1)1414+#define DEBUG_STKSZ (PAGE_SIZE << DEBUG_STACK_ORDER)1515+1616+#define IRQ_STACK_ORDER 21717+#define IRQ_STACK_SIZE (PAGE_SIZE << IRQ_STACK_ORDER)1818+1919+#define STACKFAULT_STACK 12020+#define DOUBLEFAULT_STACK 22121+#define NMI_STACK 32222+#define DEBUG_STACK 42323+#define MCE_STACK 52424+#define N_EXCEPTION_STACKS 5 /* hw limit: 7 */2525+2626+#define PUD_PAGE_SIZE (_AC(1, UL) << PUD_SHIFT)2727+#define PUD_PAGE_MASK (~(PUD_PAGE_SIZE-1))2828+2929+/*3030+ * Set __PAGE_OFFSET to the most negative possible address +3131+ * PGDIR_SIZE*16 (pgd slot 272). The gap is to allow a space for a3232+ * hypervisor to fit. Choosing 16 slots here is arbitrary, but it's3333+ * what Xen requires.3434+ */3535+#define __PAGE_OFFSET _AC(0xffff880000000000, UL)3636+3737+#define __PHYSICAL_START CONFIG_PHYSICAL_START3838+#define __KERNEL_ALIGN 0x2000003939+4040+/*4141+ * Make sure kernel is aligned to 2MB address. Catching it at compile4242+ * time is better. Change your config file and compile the kernel4343+ * for a 2MB aligned address (CONFIG_PHYSICAL_START)4444+ */4545+#if (CONFIG_PHYSICAL_START % __KERNEL_ALIGN) != 04646+#error "CONFIG_PHYSICAL_START must be a multiple of 2MB"4747+#endif4848+4949+#define __START_KERNEL (__START_KERNEL_map + __PHYSICAL_START)5050+#define __START_KERNEL_map _AC(0xffffffff80000000, UL)5151+5252+/* See Documentation/x86_64/mm.txt for a description of the memory map. */5353+#define __PHYSICAL_MASK_SHIFT 465454+#define __VIRTUAL_MASK_SHIFT 485555+5656+/*5757+ * Kernel image size is limited to 512 MB (see level2_kernel_pgt in5858+ * arch/x86/kernel/head_64.S), and it is mapped here:5959+ */6060+#define KERNEL_IMAGE_SIZE (512 * 1024 * 1024)6161+#define KERNEL_IMAGE_START _AC(0xffffffff80000000, UL)6262+6363+#ifndef __ASSEMBLY__6464+void clear_page(void *page);6565+void copy_page(void *to, void *from);6666+6767+/* duplicated to the one in bootmem.h */6868+extern unsigned long max_pfn;6969+extern unsigned long phys_base;7070+7171+extern unsigned long __phys_addr(unsigned long);7272+#define __phys_reloc_hide(x) (x)7373+7474+/*7575+ * These are used to make use of C type-checking..7676+ */7777+typedef unsigned long pteval_t;7878+typedef unsigned long pmdval_t;7979+typedef unsigned long pudval_t;8080+typedef unsigned long pgdval_t;8181+typedef unsigned long pgprotval_t;8282+8383+typedef struct { pteval_t pte; } pte_t;8484+8585+#define vmemmap ((struct page *)VMEMMAP_START)8686+8787+extern unsigned long init_memory_mapping(unsigned long start,8888+ unsigned long end);8989+9090+extern void initmem_init(unsigned long start_pfn, unsigned long end_pfn);9191+extern void free_initmem(void);9292+9393+extern void init_extra_mapping_uc(unsigned long phys, unsigned long size);9494+extern void init_extra_mapping_wb(unsigned long phys, unsigned long size);9595+9696+#endif /* !__ASSEMBLY__ */9797+9898+#ifdef CONFIG_FLATMEM9999+#define pfn_valid(pfn) ((pfn) < max_pfn)100100+#endif101101+102102+#endif /* _ASM_X86_PAGE_64_DEFS_H */
+77
arch/x86/include/asm/page_types.h
···11+#ifndef _ASM_X86_PAGE_DEFS_H22+#define _ASM_X86_PAGE_DEFS_H33+44+#include <linux/const.h>55+66+/* PAGE_SHIFT determines the page size */77+#define PAGE_SHIFT 1288+#define PAGE_SIZE (_AC(1,UL) << PAGE_SHIFT)99+#define PAGE_MASK (~(PAGE_SIZE-1))1010+1111+#define __PHYSICAL_MASK ((phys_addr_t)(1ULL << __PHYSICAL_MASK_SHIFT) - 1)1212+#define __VIRTUAL_MASK ((1UL << __VIRTUAL_MASK_SHIFT) - 1)1313+1414+/* Cast PAGE_MASK to a signed type so that it is sign-extended if1515+ virtual addresses are 32-bits but physical addresses are larger1616+ (ie, 32-bit PAE). */1717+#define PHYSICAL_PAGE_MASK (((signed long)PAGE_MASK) & __PHYSICAL_MASK)1818+1919+/* 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+2525+#define PMD_PAGE_SIZE (_AC(1, UL) << PMD_SHIFT)2626+#define PMD_PAGE_MASK (~(PMD_PAGE_SIZE-1))2727+2828+#define HPAGE_SHIFT PMD_SHIFT2929+#define HPAGE_SIZE (_AC(1,UL) << HPAGE_SHIFT)3030+#define HPAGE_MASK (~(HPAGE_SIZE - 1))3131+#define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT)3232+3333+#define HUGE_MAX_HSTATE 23434+3535+#define PAGE_OFFSET ((unsigned long)__PAGE_OFFSET)3636+3737+#define VM_DATA_DEFAULT_FLAGS \3838+ (((current->personality & READ_IMPLIES_EXEC) ? VM_EXEC : 0 ) | \3939+ VM_READ | VM_WRITE | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)4040+4141+#ifdef CONFIG_X86_644242+#include <asm/page_64_types.h>4343+#else4444+#include <asm/page_32_types.h>4545+#endif /* CONFIG_X86_64 */4646+4747+#ifndef __ASSEMBLY__4848+4949+#include <linux/types.h>5050+5151+typedef struct { pgdval_t pgd; } pgd_t;5252+typedef struct { pgprotval_t pgprot; } pgprot_t;5353+5454+#if PAGETABLE_LEVELS > 35555+typedef struct { pudval_t pud; } pud_t;5656+#endif5757+5858+#if PAGETABLE_LEVELS > 25959+typedef struct { pmdval_t pmd; } pmd_t;6060+#endif6161+6262+typedef struct page *pgtable_t;6363+6464+extern int page_is_ram(unsigned long pagenr);6565+extern int pagerange_is_ram(unsigned long start, unsigned long end);6666+extern int devmem_is_allowed(unsigned long pagenr);6767+extern void map_devmem(unsigned long pfn, unsigned long size,6868+ pgprot_t vma_prot);6969+extern void unmap_devmem(unsigned long pfn, unsigned long size,7070+ pgprot_t vma_prot);7171+7272+extern unsigned long max_low_pfn_mapped;7373+extern unsigned long max_pfn_mapped;7474+7575+#endif /* !__ASSEMBLY__ */7676+7777+#endif /* _ASM_X86_PAGE_DEFS_H */