--- arch/x86/kernel/e820.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) 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 @@ -845,7 +845,7 @@ static int __init parse_memmap_one(char if (!p) return -EINVAL; - if (!strncmp(p, "exactmap", 8)) { + if (!strncmp(p, "exactmap", 8) || !strncmp(p, "resetusablemap", 14)) { if (exactmap_parsed) return 0; @@ -858,7 +858,11 @@ static int __init parse_memmap_one(char */ saved_max_pfn = e820_end_of_ram_pfn(); #endif - e820.nr_map = 0; + if (!strncmp(p, "resetusablemap", 14)) { + /* remove all old E820_RAM ranges */ + e820_remove_range(0, ULLONG_MAX, E820_RAM, 1); + } else + e820.nr_map = 0; userdef = 1; return 0; } @@ -890,6 +894,11 @@ static int __init parse_memmap_opt(char p = strstr(p, "exactmap"); if (p) parse_memmap_one("exactmap"); + else { + p = strstr(boot_command_line, "resetusablemap"); + if (p) + parse_memmap_one("resetusablemap"); + } while (str) { char *k = strchr(str, ',');