]> git.neil.brown.name Git - history.git/commitdiff
[PATCH] Fix mem= options
authorAndrew Morton <akpm@digeo.com>
Sun, 16 Mar 2003 15:22:16 +0000 (07:22 -0800)
committerDave Jones <davej@codemonkey.org.uk>
Sun, 16 Mar 2003 15:22:16 +0000 (07:22 -0800)
Patch from "Randy.Dunlap" <rddunlap@osdl.org>

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.

Documentation/kernel-parameters.txt
arch/i386/kernel/setup.c

index eb5c056ad26c72d39f58e1e1d38fa4572fc8a1b1..a7057428743dbedd55832f4eb27192c515f3c712 100644 (file)
@@ -71,6 +71,8 @@ In addition, the following text indicates that the option:
 
 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 <Documentation/i386/boot.txt>.
 
 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: <first>,<last>
                        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]
 
index e629e6bc44f1ce7820c8f196651b242531579ffb..c3fb8f0602cd1504148d109c3e6478a2a8a5db2a 100644 (file)
@@ -525,8 +525,11 @@ static void __init parse_cmdline_early (char ** cmdline_p)
                 * "mem=nopentium" disables the 4MB page tables.
                 * "mem=XXX[kKmM]" defines a memory region from HIGH_MEM
                 * to <mem>, overriding the bios size.
-                * "mem=XXX[KkmM]@XXX[KkmM]" defines a memory region from
+                * "memmap=XXX[KkmM]@XXX[KkmM]" defines a memory region from
                 * <start> to <start>+<mem>, 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 (char ** cmdline_p)
                                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 (char ** cmdline_p)
                                 */
                                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);