• Y
    x86: check range in reserve_early() · 46cb27f5
    Yinghai Lu 提交于
    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: NYinghai Lu <yinghai@kernel.org>
    Cc: nickpiggin@yahoo.com.au
    Cc: ink@jurassic.park.msu.ru
    Signed-off-by: NIngo Molnar <mingo@elte.hu>
    46cb27f5
e820.c 34.8 KB