--- arch/x86/kernel/head_64.S | 10 +++++----- include/asm-x86/page_64.h | 4 ++-- include/asm-x86/pgtable_64.h | 6 ++++-- 3 files changed, 11 insertions(+), 9 deletions(-) Index: linux-2.6/include/asm-x86/page_64.h =================================================================== --- linux-2.6.orig/include/asm-x86/page_64.h 2007-11-20 14:46:53.131625507 -0800 +++ linux-2.6/include/asm-x86/page_64.h 2007-11-20 14:47:04.899874974 -0800 @@ -91,7 +91,7 @@ extern unsigned long phys_base; #endif #define __START_KERNEL (__START_KERNEL_map + __PHYSICAL_START) -#define __START_KERNEL_map _AC(0xffffffff80000000, UL) +#define __START_KERNEL_map _AC(0xfffffff080000000, UL) #define __PAGE_OFFSET _AC(0xffff810000000000, UL) /* to align the pointer to the (next) page boundary */ @@ -104,7 +104,7 @@ extern unsigned long phys_base; #define __VIRTUAL_MASK ((_AC(1,UL) << __VIRTUAL_MASK_SHIFT) - 1) #define KERNEL_TEXT_SIZE (40*1024*1024) -#define KERNEL_TEXT_START _AC(0xffffffff80000000, UL) +#define KERNEL_TEXT_START _AC(0xfffffff080000000, UL) #define PAGE_OFFSET __PAGE_OFFSET #ifndef __ASSEMBLY__ Index: linux-2.6/include/asm-x86/pgtable_64.h =================================================================== --- linux-2.6.orig/include/asm-x86/pgtable_64.h 2007-11-20 14:46:53.123625494 -0800 +++ linux-2.6/include/asm-x86/pgtable_64.h 2007-11-20 14:47:04.899874974 -0800 @@ -138,9 +138,11 @@ static inline pte_t ptep_get_and_clear_f #define VMALLOC_START _AC(0xffffc20000000000, UL) #define VMALLOC_END _AC(0xffffe1ffffffffff, UL) #define VMEMMAP_START _AC(0xffffe20000000000, UL) -#define MODULES_VADDR _AC(0xffffffff88000000, UL) -#define MODULES_END _AC(0xfffffffffff00000, UL) +#define MODULES_VADDR _AC(0xfffffff088000000, UL) +#define MODULES_END _AC(0xfffffff0f0000000, UL) #define MODULES_LEN (MODULES_END - MODULES_VADDR) +/* VDSO etc may use use space after this address */ +#define RESERVED_HIGH _AC(0xfffffffff0000000, UL) #define _PAGE_BIT_PRESENT 0 #define _PAGE_BIT_RW 1 Index: linux-2.6/arch/x86/kernel/head_64.S =================================================================== --- linux-2.6.orig/arch/x86/kernel/head_64.S 2007-11-20 14:47:02.403766522 -0800 +++ linux-2.6/arch/x86/kernel/head_64.S 2007-11-20 14:56:05.713056577 -0800 @@ -305,7 +305,7 @@ ENTRY(name) /* * This default setting generates an ident mapping at address 0x100000 * and a mapping for the kernel that precisely maps virtual address - * 0xffffffff80000000 to physical address 0x000000. (always using + * 0xfffffff080000000 to physical address 0x000000. (always using * 2Mbyte large pages provided by PAE mode) */ NEXT_PAGE(init_level4_pgt) @@ -313,7 +313,7 @@ NEXT_PAGE(init_level4_pgt) .fill 257,8,0 .quad level3_ident_pgt - __START_KERNEL_map + _KERNPG_TABLE .fill 252,8,0 - /* (2^48-(2*1024*1024*1024))/(2^39) = 511 */ + /* (2^48-(32*1024*1024*1024))/(2^39) = 511 */ .quad level3_kernel_pgt - __START_KERNEL_map + _PAGE_TABLE NEXT_PAGE(level3_ident_pgt) @@ -321,8 +321,8 @@ NEXT_PAGE(level3_ident_pgt) .fill 511,8,0 NEXT_PAGE(level3_kernel_pgt) - .fill 510,8,0 - /* (2^48-(2*1024*1024*1024)-((2^39)*511))/(2^30) = 510 */ + .fill 480,8,0 + /* (2^48-(32*1024*1024*1024)-((2^39)*511))/(2^30) = 480 */ .quad level2_kernel_pgt - __START_KERNEL_map + _KERNPG_TABLE .quad level2_fixmap_pgt - __START_KERNEL_map + _PAGE_TABLE @@ -344,7 +344,7 @@ NEXT_PAGE(level2_ident_pgt) NEXT_PAGE(level2_kernel_pgt) /* 40MB kernel mapping. The kernel code cannot be bigger than that. When you change this change KERNEL_TEXT_SIZE in page.h too. */ - /* (2^48-(2*1024*1024*1024)-((2^39)*511)-((2^30)*510)) = 0 */ + /* (2^48-(32*1024*1024*1024)-((2^39)*511)-((2^30)*480)) = 0 */ PMDS(0x0000000000000000, __PAGE_KERNEL_LARGE_EXEC|_PAGE_GLOBAL, KERNEL_TEXT_SIZE/PMD_SIZE) /* Module mapping starts here */ .fill (PTRS_PER_PMD - (KERNEL_TEXT_SIZE/PMD_SIZE)),8,0