• H. Peter Anvin's avatar
    x86: handle BIOSes which terminate e820 with CF=1 and no SMAP · 829157be
    H. Peter Anvin authored
    The proper way to terminate the e820 chain is with %ebx == 0 on the
    last legitimate memory block.  However, several BIOSes don't do that
    and instead return error (CF = 1) when trying to read off the end of
    the list.  For this error return, %eax doesn't necessarily return the
    SMAP signature -- correctly so, since %ah should contain an error code
    in this case.
    
    To deal with some particularly broken BIOSes, we clear the entire e820
    chain if the SMAP signature is missing in the middle, indicating a
    plain insane e820 implementation.  However, we need to make the test
    for CF = 1 before the SMAP check.
    
    This fixes at least one HP laptop (nc6400) for which none of the
    memory-probing methods (e820, e801, 88) functioned fully according to
    spec.
    Signed-off-by: default avatarH. Peter Anvin <hpa@zytor.com>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    829157be
memory.c 2.53 KB