aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-x86_64/pgtable.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-x86_64/pgtable.h')
-rw-r--r--include/asm-x86_64/pgtable.h33
1 files changed, 21 insertions, 12 deletions
diff --git a/include/asm-x86_64/pgtable.h b/include/asm-x86_64/pgtable.h
index 5957361782fe..c514deb658a3 100644
--- a/include/asm-x86_64/pgtable.h
+++ b/include/asm-x86_64/pgtable.h
@@ -1,6 +1,9 @@
1#ifndef _X86_64_PGTABLE_H 1#ifndef _X86_64_PGTABLE_H
2#define _X86_64_PGTABLE_H 2#define _X86_64_PGTABLE_H
3 3
4#include <asm/const.h>
5#ifndef __ASSEMBLY__
6
4/* 7/*
5 * This file contains the functions and defines necessary to modify and use 8 * This file contains the functions and defines necessary to modify and use
6 * the x86-64 page table tree. 9 * the x86-64 page table tree.
@@ -30,6 +33,8 @@ extern void clear_kernel_mapping(unsigned long addr, unsigned long size);
30extern unsigned long empty_zero_page[PAGE_SIZE/sizeof(unsigned long)]; 33extern unsigned long empty_zero_page[PAGE_SIZE/sizeof(unsigned long)];
31#define ZERO_PAGE(vaddr) (virt_to_page(empty_zero_page)) 34#define ZERO_PAGE(vaddr) (virt_to_page(empty_zero_page))
32 35
36#endif /* !__ASSEMBLY__ */
37
33/* 38/*
34 * PGDIR_SHIFT determines what a top-level page table entry can map 39 * PGDIR_SHIFT determines what a top-level page table entry can map
35 */ 40 */
@@ -54,6 +59,8 @@ extern unsigned long empty_zero_page[PAGE_SIZE/sizeof(unsigned long)];
54 */ 59 */
55#define PTRS_PER_PTE 512 60#define PTRS_PER_PTE 512
56 61
62#ifndef __ASSEMBLY__
63
57#define pte_ERROR(e) \ 64#define pte_ERROR(e) \
58 printk("%s:%d: bad pte %p(%016lx).\n", __FILE__, __LINE__, &(e), pte_val(e)) 65 printk("%s:%d: bad pte %p(%016lx).\n", __FILE__, __LINE__, &(e), pte_val(e))
59#define pmd_ERROR(e) \ 66#define pmd_ERROR(e) \
@@ -117,22 +124,23 @@ static inline pte_t ptep_get_and_clear_full(struct mm_struct *mm, unsigned long
117 124
118#define pte_pgprot(a) (__pgprot((a).pte & ~PHYSICAL_PAGE_MASK)) 125#define pte_pgprot(a) (__pgprot((a).pte & ~PHYSICAL_PAGE_MASK))
119 126
120#define PMD_SIZE (1UL << PMD_SHIFT) 127#endif /* !__ASSEMBLY__ */
128
129#define PMD_SIZE (_AC(1,UL) << PMD_SHIFT)
121#define PMD_MASK (~(PMD_SIZE-1)) 130#define PMD_MASK (~(PMD_SIZE-1))
122#define PUD_SIZE (1UL << PUD_SHIFT) 131#define PUD_SIZE (_AC(1,UL) << PUD_SHIFT)
123#define PUD_MASK (~(PUD_SIZE-1)) 132#define PUD_MASK (~(PUD_SIZE-1))
124#define PGDIR_SIZE (1UL << PGDIR_SHIFT) 133#define PGDIR_SIZE (_AC(1,UL) << PGDIR_SHIFT)
125#define PGDIR_MASK (~(PGDIR_SIZE-1)) 134#define PGDIR_MASK (~(PGDIR_SIZE-1))
126 135
127#define USER_PTRS_PER_PGD ((TASK_SIZE-1)/PGDIR_SIZE+1) 136#define USER_PTRS_PER_PGD ((TASK_SIZE-1)/PGDIR_SIZE+1)
128#define FIRST_USER_ADDRESS 0 137#define FIRST_USER_ADDRESS 0
129 138
130#ifndef __ASSEMBLY__ 139#define MAXMEM 0x3fffffffffff
131#define MAXMEM 0x3fffffffffffUL 140#define VMALLOC_START 0xffffc20000000000
132#define VMALLOC_START 0xffffc20000000000UL 141#define VMALLOC_END 0xffffe1ffffffffff
133#define VMALLOC_END 0xffffe1ffffffffffUL 142#define MODULES_VADDR 0xffffffff88000000
134#define MODULES_VADDR 0xffffffff88000000UL 143#define MODULES_END 0xfffffffffff00000
135#define MODULES_END 0xfffffffffff00000UL
136#define MODULES_LEN (MODULES_END - MODULES_VADDR) 144#define MODULES_LEN (MODULES_END - MODULES_VADDR)
137 145
138#define _PAGE_BIT_PRESENT 0 146#define _PAGE_BIT_PRESENT 0
@@ -158,7 +166,7 @@ static inline pte_t ptep_get_and_clear_full(struct mm_struct *mm, unsigned long
158#define _PAGE_GLOBAL 0x100 /* Global TLB entry */ 166#define _PAGE_GLOBAL 0x100 /* Global TLB entry */
159 167
160#define _PAGE_PROTNONE 0x080 /* If not present */ 168#define _PAGE_PROTNONE 0x080 /* If not present */
161#define _PAGE_NX (1UL<<_PAGE_BIT_NX) 169#define _PAGE_NX (_AC(1,UL)<<_PAGE_BIT_NX)
162 170
163#define _PAGE_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED | _PAGE_DIRTY) 171#define _PAGE_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED | _PAGE_DIRTY)
164#define _KERNPG_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | _PAGE_DIRTY) 172#define _KERNPG_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | _PAGE_DIRTY)
@@ -220,6 +228,8 @@ static inline pte_t ptep_get_and_clear_full(struct mm_struct *mm, unsigned long
220#define __S110 PAGE_SHARED_EXEC 228#define __S110 PAGE_SHARED_EXEC
221#define __S111 PAGE_SHARED_EXEC 229#define __S111 PAGE_SHARED_EXEC
222 230
231#ifndef __ASSEMBLY__
232
223static inline unsigned long pgd_bad(pgd_t pgd) 233static inline unsigned long pgd_bad(pgd_t pgd)
224{ 234{
225 return pgd_val(pgd) & ~(PTE_MASK | _KERNPG_TABLE | _PAGE_USER); 235 return pgd_val(pgd) & ~(PTE_MASK | _KERNPG_TABLE | _PAGE_USER);
@@ -405,8 +415,6 @@ extern spinlock_t pgd_lock;
405extern struct page *pgd_list; 415extern struct page *pgd_list;
406void vmalloc_sync_all(void); 416void vmalloc_sync_all(void);
407 417
408#endif /* !__ASSEMBLY__ */
409
410extern int kern_addr_valid(unsigned long addr); 418extern int kern_addr_valid(unsigned long addr);
411 419
412#define io_remap_pfn_range(vma, vaddr, pfn, size, prot) \ 420#define io_remap_pfn_range(vma, vaddr, pfn, size, prot) \
@@ -436,5 +444,6 @@ extern int kern_addr_valid(unsigned long addr);
436#define __HAVE_ARCH_PTEP_SET_WRPROTECT 444#define __HAVE_ARCH_PTEP_SET_WRPROTECT
437#define __HAVE_ARCH_PTE_SAME 445#define __HAVE_ARCH_PTE_SAME
438#include <asm-generic/pgtable.h> 446#include <asm-generic/pgtable.h>
447#endif /* !__ASSEMBLY__ */
439 448
440#endif /* _X86_64_PGTABLE_H */ 449#endif /* _X86_64_PGTABLE_H */