Once again, what is "wrong" about this... the semantics are consistent, and breaking them when long established makes no sense. Thomas Renninger <trenn at suse.de> wrote: >From: Yinghai Lu <yinghai at kernel.org> > >memmap=exactmap will throw away all original, but also until then >user defined (through other provided memmap= parameters) areas. >That means all memmap= boot parameters passed before a memmap=exactmap >parameter are not recognized. >Without this fix: >memmap=x at y memmap=exactmap memmap=i#k >only i#k would get recognized. > >This is wrong, this fix will only throw away all original e820 areas >once >when memmap=exactmap is found in the whole boot command line and before >any other memmap= option is parsed. > >Signed-off-by: Yinghai Lu <yinghai at kernel.org> >Reviewed-by: Thomas Renninger <trenn at suse.de> >--- > arch/x86/kernel/e820.c | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > >Index: linux-2.6/arch/x86/kernel/e820.c >=================================================================== >--- linux-2.6.orig/arch/x86/kernel/e820.c >+++ linux-2.6/arch/x86/kernel/e820.c >@@ -835,6 +835,8 @@ static int __init parse_memopt(char *p) > } > early_param("mem", parse_memopt); > >+static bool __initdata exactmap_parsed; >+ > static int __init parse_memmap_one(char *p) > { > char *oldp; >@@ -844,6 +846,10 @@ static int __init parse_memmap_one(char > return -EINVAL; > > if (!strncmp(p, "exactmap", 8)) { >+ if (exactmap_parsed) >+ return 0; >+ >+ exactmap_parsed = true; > #ifdef CONFIG_CRASH_DUMP > /* > * If we are doing a crash dump, we still need to know >@@ -879,6 +885,12 @@ static int __init parse_memmap_one(char > } > static int __init parse_memmap_opt(char *str) > { >+ char *p = boot_command_line; >+ >+ p = strstr(p, "exactmap"); >+ if (p) >+ parse_memmap_one("exactmap"); >+ > while (str) { > char *k = strchr(str, ','); > -- Sent from my mobile phone. Please excuse brevity and lack of formatting.