|
@@ -1,6 +1,9 @@
|
|
|
#ifndef _X86_64_PGTABLE_H
|
|
|
#define _X86_64_PGTABLE_H
|
|
|
|
|
|
+#include <asm/const.h>
|
|
|
+#ifndef __ASSEMBLY__
|
|
|
+
|
|
|
/*
|
|
|
* This file contains the functions and defines necessary to modify and use
|
|
|
* the x86-64 page table tree.
|
|
@@ -30,6 +33,8 @@ extern void clear_kernel_mapping(unsigned long addr, unsigned long size);
|
|
|
extern unsigned long empty_zero_page[PAGE_SIZE/sizeof(unsigned long)];
|
|
|
#define ZERO_PAGE(vaddr) (virt_to_page(empty_zero_page))
|
|
|
|
|
|
+#endif /* !__ASSEMBLY__ */
|
|
|
+
|
|
|
/*
|
|
|
* PGDIR_SHIFT determines what a top-level page table entry can map
|
|
|
*/
|
|
@@ -54,6 +59,8 @@ extern unsigned long empty_zero_page[PAGE_SIZE/sizeof(unsigned long)];
|
|
|
*/
|
|
|
#define PTRS_PER_PTE 512
|
|
|
|
|
|
+#ifndef __ASSEMBLY__
|
|
|
+
|
|
|
#define pte_ERROR(e) \
|
|
|
printk("%s:%d: bad pte %p(%016lx).\n", __FILE__, __LINE__, &(e), pte_val(e))
|
|
|
#define pmd_ERROR(e) \
|
|
@@ -117,22 +124,23 @@ static inline pte_t ptep_get_and_clear_full(struct mm_struct *mm, unsigned long
|
|
|
|
|
|
#define pte_pgprot(a) (__pgprot((a).pte & ~PHYSICAL_PAGE_MASK))
|
|
|
|
|
|
-#define PMD_SIZE (1UL << PMD_SHIFT)
|
|
|
+#endif /* !__ASSEMBLY__ */
|
|
|
+
|
|
|
+#define PMD_SIZE (_AC(1,UL) << PMD_SHIFT)
|
|
|
#define PMD_MASK (~(PMD_SIZE-1))
|
|
|
-#define PUD_SIZE (1UL << PUD_SHIFT)
|
|
|
+#define PUD_SIZE (_AC(1,UL) << PUD_SHIFT)
|
|
|
#define PUD_MASK (~(PUD_SIZE-1))
|
|
|
-#define PGDIR_SIZE (1UL << PGDIR_SHIFT)
|
|
|
+#define PGDIR_SIZE (_AC(1,UL) << PGDIR_SHIFT)
|
|
|
#define PGDIR_MASK (~(PGDIR_SIZE-1))
|
|
|
|
|
|
#define USER_PTRS_PER_PGD ((TASK_SIZE-1)/PGDIR_SIZE+1)
|
|
|
#define FIRST_USER_ADDRESS 0
|
|
|
|
|
|
-#ifndef __ASSEMBLY__
|
|
|
-#define MAXMEM 0x3fffffffffffUL
|
|
|
-#define VMALLOC_START 0xffffc20000000000UL
|
|
|
-#define VMALLOC_END 0xffffe1ffffffffffUL
|
|
|
-#define MODULES_VADDR 0xffffffff88000000UL
|
|
|
-#define MODULES_END 0xfffffffffff00000UL
|
|
|
+#define MAXMEM 0x3fffffffffff
|
|
|
+#define VMALLOC_START 0xffffc20000000000
|
|
|
+#define VMALLOC_END 0xffffe1ffffffffff
|
|
|
+#define MODULES_VADDR 0xffffffff88000000
|
|
|
+#define MODULES_END 0xfffffffffff00000
|
|
|
#define MODULES_LEN (MODULES_END - MODULES_VADDR)
|
|
|
|
|
|
#define _PAGE_BIT_PRESENT 0
|
|
@@ -158,7 +166,7 @@ static inline pte_t ptep_get_and_clear_full(struct mm_struct *mm, unsigned long
|
|
|
#define _PAGE_GLOBAL 0x100 /* Global TLB entry */
|
|
|
|
|
|
#define _PAGE_PROTNONE 0x080 /* If not present */
|
|
|
-#define _PAGE_NX (1UL<<_PAGE_BIT_NX)
|
|
|
+#define _PAGE_NX (_AC(1,UL)<<_PAGE_BIT_NX)
|
|
|
|
|
|
#define _PAGE_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED | _PAGE_DIRTY)
|
|
|
#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
|
|
|
#define __S110 PAGE_SHARED_EXEC
|
|
|
#define __S111 PAGE_SHARED_EXEC
|
|
|
|
|
|
+#ifndef __ASSEMBLY__
|
|
|
+
|
|
|
static inline unsigned long pgd_bad(pgd_t pgd)
|
|
|
{
|
|
|
return pgd_val(pgd) & ~(PTE_MASK | _KERNPG_TABLE | _PAGE_USER);
|
|
@@ -405,8 +415,6 @@ extern spinlock_t pgd_lock;
|
|
|
extern struct page *pgd_list;
|
|
|
void vmalloc_sync_all(void);
|
|
|
|
|
|
-#endif /* !__ASSEMBLY__ */
|
|
|
-
|
|
|
extern int kern_addr_valid(unsigned long addr);
|
|
|
|
|
|
#define io_remap_pfn_range(vma, vaddr, pfn, size, prot) \
|
|
@@ -436,5 +444,6 @@ extern int kern_addr_valid(unsigned long addr);
|
|
|
#define __HAVE_ARCH_PTEP_SET_WRPROTECT
|
|
|
#define __HAVE_ARCH_PTE_SAME
|
|
|
#include <asm-generic/pgtable.h>
|
|
|
+#endif /* !__ASSEMBLY__ */
|
|
|
|
|
|
#endif /* _X86_64_PGTABLE_H */
|