direct-io.hg

changeset 8385:3dc1c23dd508

Slight fix to BIOS e820 bug workaround. Remove the check
for whether e820 list is below 1MB: all bootloaders place
it below 1MB so teh check is ineffective and, in any case,
SYSLINUX has the same issue as GRUB (does not pre-initialize
the memory area that e820 function writes to).

Signed-off-by: Keir Fraser <keir@xensource.com>
author kaf24@firebug.cl.cam.ac.uk
date Fri Dec 16 04:57:27 2005 +0100 (2005-12-16)
parents 47d947e07205
children 3f3d53c3b327
files xen/arch/x86/setup.c
line diff
     1.1 --- a/xen/arch/x86/setup.c	Fri Dec 16 04:11:41 2005 +0100
     1.2 +++ b/xen/arch/x86/setup.c	Fri Dec 16 04:57:27 2005 +0100
     1.3 @@ -315,19 +315,15 @@ void __init __start_xen(multiboot_info_t
     1.4              memory_map_t *map = __va(mbi->mmap_addr + bytes);
     1.5  
     1.6              /*
     1.7 -             * This is a gross workaround for a BIOS/GRUB bug. GRUB does
     1.8 +             * This is a gross workaround for a BIOS bug. Some bootloaders do
     1.9               * not write e820 map entries into pre-zeroed memory. This is
    1.10               * okay if the BIOS fills in all fields of the map entry, but
    1.11               * some broken BIOSes do not bother to write the high word of
    1.12               * the length field if the length is smaller than 4GB. We
    1.13               * detect and fix this by flagging sections below 4GB that
    1.14 -             * appear to be larger than 4GB in size. We disable this check
    1.15 -             * for mbootpack and syslinux (which we can detect because they
    1.16 -             * place the mmap_addr list above 1MB in memory).
    1.17 +             * appear to be larger than 4GB in size.
    1.18               */
    1.19 -            if ( (mbi->mmap_addr < 0x100000) &&
    1.20 -                 (map->base_addr_high == 0) &&
    1.21 -                 (map->length_high != 0) )
    1.22 +            if ( (map->base_addr_high == 0) && (map->length_high != 0) )
    1.23              {
    1.24                  e820_warn = 1;
    1.25                  map->length_high = 0;