Re: [syslinux] SYSLINUX 2.09-pre11
From: H. Peter Anvin
Date: Sun Feb 08 2004 - 14:00:00 EST
Andrea Mazzoleni wrote:
On 02/05, H. Peter Anvin wrote:
Please test it out. Some time over the weekend I'm going to do a sweep
for bug fixes I've forgotten and otherwise I'd like to release 2.09 next
week.
Please consider to compare the behaviour of the SYSLINUX mem= option with
the Linux kernel behaviour. I've rechecked it a lot of time, and I'm sure that
there is a difference.
In the kernel function parse_cmdline_early() in the file arch/i386/kernel/setup.c
the "mem=" option is used to only reducing (and never expanding) the memory map
calling the limit_regions() function. This happen also if E820 is not available.
Instead, SYSLINUX uses the "mem=" option also for expanding the memory map
over the value read from the BIOS.
Please note that this is only true for the simplest format of the "mem=" option
like "mem=512M". Other formats like "mem=512M@512M" have different behaviours
because add_memory_region() is called instead of limit_regions().
Also note that if E820 is not present, a fake E820 memory map is created
in the setup_memory_regions() kernel function in arch/i386/kernel/setup.c.
This is the fake memory map on which the limit_regions() function operates.
That exactly happen is that copy_e820_map() returns -1 because "nr_map" is
set to 0 in the arch/i386/boot/setup.S file if E820 is not present.
This is unfixable, because someone fucked up and re-used a
well-established protocol-defined option for another purpose. E.g.
"mem=512M" has meant exactly that (and was/is widely used to specify
that memory should be added up to 512M).
Since the behaviour you describe is kernel-version-dependent, IT CANNOT
BE FIXED IN THE BOOTLOADER, and whomever thought it was a good idea to
mess with mem= should be taken out and shot.
-hpa
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/