• Y
    x86: Make e820_remove_range to handle all covered case · 9f3a5f52
    Yinghai Lu 提交于
    Rusty found on lguest with trim_bios_range, max_pfn is not right anymore, and
    looks e820_remove_range does not work right.
    
    [    0.000000] BIOS-provided physical RAM map:
    [    0.000000]  LGUEST: 0000000000000000 - 0000000004000000 (usable)
    [    0.000000] Notice: NX (Execute Disable) protection missing in CPU or disabled in BIOS!
    [    0.000000] DMI not present or invalid.
    [    0.000000] last_pfn = 0x3fa0 max_arch_pfn = 0x100000
    [    0.000000] init_memory_mapping: 0000000000000000-0000000003fa0000
    
    root cause is: the e820_remove_range doesn't handle the all covered
    case.  e820_remove_range(BIOS_START, BIOS_END - BIOS_START, ...)
    produces a bogus range as a result.
    
    Make it match e820_update_range() by handling that case too.
    Reported-by: NRusty Russell <rusty@rustcorp.com.au>
    Signed-off-by: NYinghai Lu <yinghai@kernel.org>
    Tested-by: NRusty Russell <rusty@rustcorp.com.au>
    LKML-Reference: <4BB18E55.6090903@kernel.org>
    Signed-off-by: NH. Peter Anvin <hpa@zytor.com>
    9f3a5f52
e820.c 29.8 KB