diff options
author | Yinghai Lu <yinghai@kernel.org> | 2009-02-24 13:12:43 -0800 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-02-24 22:43:15 +0100 |
commit | 46cb27f5169d37be38be8e5729b9a0100e989fa8 (patch) | |
tree | 54ddcf7a013fc91e66ee0f2addbcb7c109f7bb19 /arch | |
parent | b319eed0aa0a6d710887350a3cb734c572aa64c4 (diff) |
x86: check range in reserve_early()
Impact: cleanup
one 32-bit system reports:
BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 000000000009fc00 (usable)
BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 000000001c000000 (usable)
BIOS-e820: 00000000ffff0000 - 0000000100000000 (reserved)
DMI 2.0 present.
last_pfn = 0x1c000 max_arch_pfn = 0x100000
kernel direct mapping tables up to 1c000000 @ 7000-c000
..
RAMDISK: 1bc69000 - 1bfef4fa
..
0MB HIGHMEM available.
448MB LOWMEM available.
mapped low ram: 0 - 1c000000
low ram: 00000000 - 1c000000
bootmap 00002000 - 00005800
(9 early reservations) ==> bootmem [0000000000 - 001c000000]
#0 [0000000000 - 0000001000] BIOS data page ==> [0000000000 - 0000001000]
#1 [0000001000 - 0000002000] EX TRAMPOLINE ==> [0000001000 - 0000002000]
#2 [0000006000 - 0000007000] TRAMPOLINE ==> [0000006000 - 0000007000]
#3 [0000400000 - 00009ed14c] TEXT DATA BSS ==> [0000400000 - 00009ed14c]
#4 [001bc69000 - 001bfef4fa] RAMDISK ==> [001bc69000 - 001bfef4fa]
#5 [00009ee000 - 00009f2000] INIT_PG_TABLE ==> [00009ee000 - 00009f2000]
#6 [000009f400 - 0000100000] BIOS reserved ==> [000009f400 - 0000100000]
#7 [0000007000 - 0000007000] PGTABLE
#8 [0000002000 - 0000006000] BOOTMAP ==> [0000002000 - 0000006000]
Notice the strange blank PGTABLE entry.
The reason is init_pg_table is big enough, and zero range is called
with init_memory_mapping/reserve_early().
So try to check the range in reserve_early()
v2: fix the reversed compare
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Cc: nickpiggin@yahoo.com.au
Cc: ink@jurassic.park.msu.ru
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86/kernel/e820.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/arch/x86/kernel/e820.c b/arch/x86/kernel/e820.c index e85826829cf..508bec1cee2 100644 --- a/arch/x86/kernel/e820.c +++ b/arch/x86/kernel/e820.c @@ -858,6 +858,9 @@ void __init reserve_early_overlap_ok(u64 start, u64 end, char *name) */ void __init reserve_early(u64 start, u64 end, char *name) { + if (start >= end) + return; + drop_overlaps_that_are_ok(start, end); __reserve_early(start, end, name, 0); } |