Patch from "Randy.Dunlap" Reverts the recent alteration of the format of the `mem=' option. This is because `mem=' is interpreted by bootloaders and may not be freely changed. Instead, the new functionality to set specific memory region usages is provided via the new "memmap=" option. The documentation for memmap= is added, and the documentation for mem= is updated. 25-akpm/Documentation/kernel-parameters.txt | 32 ++++++++++++++-------------- 25-akpm/arch/i386/kernel/setup.c | 29 +++++++++++++++++++++---- 2 files changed, 42 insertions(+), 19 deletions(-) diff -puN arch/i386/kernel/setup.c~fix-mem-equals arch/i386/kernel/setup.c --- 25/arch/i386/kernel/setup.c~fix-mem-equals Mon Mar 10 14:19:02 2003 +++ 25-akpm/arch/i386/kernel/setup.c Mon Mar 10 14:19:02 2003 @@ -525,8 +525,11 @@ static void __init parse_cmdline_early ( * "mem=nopentium" disables the 4MB page tables. * "mem=XXX[kKmM]" defines a memory region from HIGH_MEM * to , overriding the bios size. - * "mem=XXX[KkmM]@XXX[KkmM]" defines a memory region from + * "memmap=XXX[KkmM]@XXX[KkmM]" defines a memory region from * to +, overriding the bios size. + * + * HPA tells me bootloaders need to parse mem=, so no new + * option should be mem= [also see Documentation/i386/boot.txt] */ if (c == ' ' && !memcmp(from, "mem=", 4)) { if (to != command_line) @@ -535,8 +538,26 @@ static void __init parse_cmdline_early ( from += 9+4; clear_bit(X86_FEATURE_PSE, boot_cpu_data.x86_capability); disable_pse = 1; - } else if (!memcmp(from+4, "exactmap", 8)) { - from += 8+4; + } else { + /* If the user specifies memory size, we + * limit the BIOS-provided memory map to + * that size. exactmap can be used to specify + * the exact map. mem=number can be used to + * trim the existing memory map. + */ + unsigned long long mem_size; + + mem_size = memparse(from+4, &from); + limit_regions(mem_size); + userdef=1; + } + } + + if (c == ' ' && !memcmp(from, "memmap=", 7)) { + if (to != command_line) + to--; + if (!memcmp(from+7, "exactmap", 8)) { + from += 8+7; e820.nr_map = 0; userdef = 1; } else { @@ -548,7 +569,7 @@ static void __init parse_cmdline_early ( */ unsigned long long start_at, mem_size; - mem_size = memparse(from+4, &from); + mem_size = memparse(from+7, &from); if (*from == '@') { start_at = memparse(from+1, &from); add_memory_region(start_at, mem_size, E820_RAM); diff -puN Documentation/kernel-parameters.txt~fix-mem-equals Documentation/kernel-parameters.txt --- 25/Documentation/kernel-parameters.txt~fix-mem-equals Mon Mar 10 14:19:02 2003 +++ 25-akpm/Documentation/kernel-parameters.txt Mon Mar 10 14:19:02 2003 @@ -71,6 +71,8 @@ In addition, the following text indicate Parameters denoted with BOOT are actually interpreted by the boot loader, and have no meaning to the kernel directly. +Do not modify the syntax of boot loader parameters without extreme +need or coordination with . Note that ALL kernel parameters listed below are CASE SENSITIVE, and that a trailing = on the name of any parameter states that that parameter will @@ -502,30 +504,30 @@ running once the system is up. Format: , Specifies range of consoles to be captured by the MDA. - mem=exactmap [KNL,BOOT,IA-32] Enable setting of an exact - E820 memory map, as specified by the user. - Such mem=exactmap lines can be constructed based on - BIOS output or other requirements. See the mem=nn@ss - option description. - mem=nn[KMG] [KNL,BOOT] Force usage of a specific amount of memory Amount of memory to be used when the kernel is not able to see the whole system memory or for test. - mem=nn[KMG]@ss[KMG] - [KNL,BOOT] Force usage of a specific region of memory - Region of memory to be used, from ss to ss+nn. + mem=nopentium [BUGS=IA-32] Disable usage of 4MB pages for kernel + memory. - mem=nn[KMG]#ss[KMG] - [KNL,BOOT,ACPI] Mark specific memory as ACPI data. + memmap=exactmap [KNL,IA-32] Enable setting of an exact + E820 memory map, as specified by the user. + Such memmap=exactmap lines can be constructed based on + BIOS output or other requirements. See the memmap=nn@ss + option description. + + memmap=nn[KMG]@ss[KMG] + [KNL] Force usage of a specific region of memory Region of memory to be used, from ss to ss+nn. - mem=nn[KMG]$ss[KMG] - [KNL,BOOT,ACPI] Mark specific memory as reserved. + memmap=nn[KMG]#ss[KMG] + [KNL,ACPI] Mark specific memory as ACPI data. Region of memory to be used, from ss to ss+nn. - mem=nopentium [BUGS=IA-32] Disable usage of 4MB pages for kernel - memory. + memmap=nn[KMG]$ss[KMG] + [KNL,ACPI] Mark specific memory as reserved. + Region of memory to be used, from ss to ss+nn. memfrac= [KNL] _