linux/arch/x86/boot
H. Peter Anvin 829157be59 x86: handle BIOSes which terminate e820 with CF=1 and no SMAP
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: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
2008-02-26 12:55:52 +01:00
..
compressed x86: rename LARGE_PAGE_SIZE to PMD_PAGE_SIZE 2008-02-04 16:48:08 +01:00
tools i386: move boot 2007-10-11 11:16:41 +02:00
.gitignore Update arch/x86/boot/.gitignore with new auto-generated files 2008-02-09 23:27:01 -08:00
Makefile x86 setup: print missing CPU features in cleartext 2008-02-04 16:48:00 +01:00
a20.c i386: move boot 2007-10-11 11:16:45 +02:00
apm.c x86: compile apm and voyager module only when selected in Kconfig 2008-01-30 13:32:49 +01:00
bitops.h i386: move boot 2007-10-11 11:16:45 +02:00
boot.h x86 setup: add missing prototype; formatting fix 2008-01-30 13:33:03 +01:00
cmdline.c x86 setup: add missing prototype; formatting fix 2008-01-30 13:33:03 +01:00
code16gcc.h i386: move boot 2007-10-11 11:16:45 +02:00
copy.S i386: move boot 2007-10-11 11:16:45 +02:00
cpu.c x86 setup: print missing CPU features in cleartext 2008-02-04 16:48:00 +01:00
cpucheck.c x86: arch/x86/Kconfig.cpu unification 2007-11-12 21:02:19 +01:00
edd.c x86 setup: add note to use edd=off on EDD probing hangs 2008-01-30 13:33:03 +01:00
header.S i386: handle an initrd in highmem (version 2) 2008-01-30 13:32:51 +01:00
install.sh i386: move boot 2007-10-11 11:16:45 +02:00
main.c x86 setup: guard the heap against invalid stack setups 2008-01-30 13:33:04 +01:00
mca.c i386: move boot 2007-10-11 11:16:45 +02:00
memory.c x86: handle BIOSes which terminate e820 with CF=1 and no SMAP 2008-02-26 12:55:52 +01:00
mkcpustr.c x86 setup: print missing CPU features in cleartext 2008-02-04 16:48:00 +01:00
mtools.conf.in i386: move boot 2007-10-11 11:16:45 +02:00
pm.c x86 setup: correct the base in the GDT_ENTRY() macro 2008-01-30 13:33:04 +01:00
pmjump.S x86 setup: use X86_CR0_PE macro instead of hard-coded constant 2008-01-30 13:33:02 +01:00
printf.c x86: trivial printk optimizations 2008-02-09 23:24:09 +01:00
setup.ld i386: move boot 2007-10-11 11:16:45 +02:00
string.c i386: move boot 2007-10-11 11:16:45 +02:00
tty.c i386: move boot 2007-10-11 11:16:45 +02:00
version.c i386: move boot 2007-10-11 11:16:45 +02:00
vesa.h i386: move boot 2007-10-11 11:16:45 +02:00
video-bios.c x86 setup: display VESA graphics modes in vga=ask menu 2008-01-30 13:33:02 +01:00
video-vesa.c x86 setup: display VESA graphics modes in vga=ask menu 2008-01-30 13:33:02 +01:00
video-vga.c x86 setup: display VESA graphics modes in vga=ask menu 2008-01-30 13:33:02 +01:00
video.c x86 setup: display VESA graphics modes in vga=ask menu 2008-01-30 13:33:02 +01:00
video.h x86 setup: display VESA graphics modes in vga=ask menu 2008-01-30 13:33:02 +01:00
voyager.c x86: compile apm and voyager module only when selected in Kconfig 2008-01-30 13:32:49 +01:00