---
 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