This patch adds the 'memmap=' kernel command line option for the x86_64 kernel. Signed-off-by: Hariprasad Nellitheertha --- linux-2.6.12-rc2-hari/Documentation/kernel-parameters.txt | 2 - linux-2.6.12-rc2-hari/arch/x86_64/kernel/e820.c | 25 ++++++++++++++ linux-2.6.12-rc2-hari/arch/x86_64/kernel/setup.c | 3 + linux-2.6.12-rc2-hari/include/asm-x86_64/e820.h | 2 + 4 files changed, 31 insertions(+), 1 deletion(-) diff -puN arch/x86_64/kernel/e820.c~x8664-memmap-command-line-option arch/x86_64/kernel/e820.c --- linux-2.6.12-rc2/arch/x86_64/kernel/e820.c~x8664-memmap-command-line-option 2005-04-15 10:15:04.000000000 +0530 +++ linux-2.6.12-rc2-hari/arch/x86_64/kernel/e820.c 2005-04-15 10:17:23.000000000 +0530 @@ -513,6 +513,31 @@ void __init parse_memopt(char *p, char * end_user_pfn >>= PAGE_SHIFT; } +void __init parse_memmapopt(char *p, char **from) +{ + if (!memcmp(p, "exactmap", 8)) { + p += 8; + e820.nr_map = 0; + } else { + unsigned long long start_at, mem_size; + + mem_size = memparse(p, from); + p = *from; + if (*p == '@') { + start_at = memparse(p+1, from); + add_memory_region(start_at, mem_size, E820_RAM); + } else if (*p == '#') { + start_at = memparse(p+1, from); + add_memory_region(start_at, mem_size, E820_ACPI); + } else if (*p == '$') { + start_at = memparse(p+1, from); + add_memory_region(start_at, mem_size, E820_RESERVED); + } else { + end_user_pfn = (mem_size >> PAGE_SHIFT); + } + } +} + unsigned long pci_mem_start = 0xaeedbabe; /* diff -puN arch/x86_64/kernel/setup.c~x8664-memmap-command-line-option arch/x86_64/kernel/setup.c --- linux-2.6.12-rc2/arch/x86_64/kernel/setup.c~x8664-memmap-command-line-option 2005-04-15 10:15:04.000000000 +0530 +++ linux-2.6.12-rc2-hari/arch/x86_64/kernel/setup.c 2005-04-15 10:15:04.000000000 +0530 @@ -349,6 +349,9 @@ static __init void parse_cmdline_early ( if (!memcmp(from, "mem=", 4)) parse_memopt(from+4, &from); + if (!memcmp(from, "memmap=", 7)) + parse_memmapopt(from+7, &from); + #ifdef CONFIG_DISCONTIGMEM if (!memcmp(from, "numa=", 5)) numa_setup(from+5); diff -puN include/asm-x86_64/e820.h~x8664-memmap-command-line-option include/asm-x86_64/e820.h --- linux-2.6.12-rc2/include/asm-x86_64/e820.h~x8664-memmap-command-line-option 2005-04-15 10:15:04.000000000 +0530 +++ linux-2.6.12-rc2-hari/include/asm-x86_64/e820.h 2005-04-15 10:15:04.000000000 +0530 @@ -54,6 +54,8 @@ extern void e820_setup_gap(void); extern void __init parse_memopt(char *p, char **end); +extern void __init parse_memmapopt(char *p, char **end); + extern struct e820map e820; #endif/*!__ASSEMBLY__*/ diff -puN Documentation/kernel-parameters.txt~x8664-memmap-command-line-option Documentation/kernel-parameters.txt --- linux-2.6.12-rc2/Documentation/kernel-parameters.txt~x8664-memmap-command-line-option 2005-04-15 10:19:37.000000000 +0530 +++ linux-2.6.12-rc2-hari/Documentation/kernel-parameters.txt 2005-04-15 10:19:56.000000000 +0530 @@ -794,7 +794,7 @@ running once the system is up. mem=nopentium [BUGS=IA-32] Disable usage of 4MB pages for kernel memory. - memmap=exactmap [KNL,IA-32] Enable setting of an exact + memmap=exactmap [KNL,IA-32,X86-64] 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 _