x86, mm: limit MAXMEM on 64-bit
authorIngo Molnar <mingo@elte.hu>
Tue, 16 Dec 2008 18:23:36 +0000 (19:23 +0100)
committerIngo Molnar <mingo@elte.hu>
Tue, 16 Dec 2008 18:31:52 +0000 (19:31 +0100)
on 64-bit x86 the physical memory limit is controlled by the sparsemem
bits - which are 44 bits right now. But MAXMEM (the max pfn number
e820 parsing will allow to enter our sizing routines) is set to
0x00003fffffffffff, i.e. 46 bits - that's too large because it overlaps
into the vmalloc range.

So couple MAXMEM to MAX_PHYSMEM_BITS, and add a comment that the
maximum of MAX_PHYSMEM_BITS is 45 bits.

Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/include/asm/pgtable_64.h
arch/x86/include/asm/sparsemem.h

index 65b6be6677c74205129f3d59554958881a6e6413..c54ba69608bdbec7914dba9f2803835a86b309ea 100644 (file)
@@ -146,7 +146,7 @@ static inline void native_pgd_clear(pgd_t *pgd)
 #define PGDIR_MASK     (~(PGDIR_SIZE - 1))
 
 
-#define MAXMEM          _AC(0x00003fffffffffff, UL)
+#define MAXMEM          _AC(__AC(1, UL) << MAX_PHYSMEM_BITS, UL)
 #define VMALLOC_START    _AC(0xffffc20000000000, UL)
 #define VMALLOC_END      _AC(0xffffe1ffffffffff, UL)
 #define VMEMMAP_START   _AC(0xffffe20000000000, UL)
index be44f7dab395ad87492e0021cbf7adb99cadb1d2..e3cc3c063ec5e77683c088fd80906de90fbf9bd2 100644 (file)
@@ -27,7 +27,7 @@
 #else /* CONFIG_X86_32 */
 # define SECTION_SIZE_BITS     27 /* matt - 128 is convenient right now */
 # define MAX_PHYSADDR_BITS     44
-# define MAX_PHYSMEM_BITS      44
+# define MAX_PHYSMEM_BITS      44 /* Can be max 45 bits */
 #endif
 
 #endif /* CONFIG_SPARSEMEM */