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>