Re: [PATCH v6 9/9] x86: Pass memory range via E820 for kdump

Dave Young
2014-04-17T05:28:07Z

On 04/14/14 at 10:55pm, WANG Chao wrote:
> command line size is restricted by kernel, sometimes memmap=exactmap has
> too many memory ranges to pass to cmdline. And also memmap=exactmap and
> kASLR doesn't work together.
>
> A better approach, to pass the memory ranges for crash kernel to boot
> into, is filling the memory ranges into E820.
>
> boot_params only got 128 slots for E820 map to fit in, when the number of
> memory map exceeds 128, use setup_data to pass the rest as extended E820
> memory map.
>
> kexec boot could also benefit from setup_data in case E820 memory map
> exceeds 128.
>
> Now this new approach becomes default instead of memmap=exactmap.
> saved_max_pfn users can specify --pass-memmap-cmdline to use the
> exactmap approach.
>
> Signed-off-by: WANG Chao <chaowang@redhat.com>
> Tested-by: Linn Crosetto <linn@hp.com>
> Reviewed-by: Linn Crosetto <linn@hp.com>
> ---
> kexec/arch/i386/crashdump-x86.c | 6 +-
> kexec/arch/i386/x86-linux-setup.c | 149 +++++++++++++++++++++++++-------------
> kexec/arch/i386/x86-linux-setup.h | 1 +
> 3 files changed, 103 insertions(+), 53 deletions(-)
>
> diff --git a/kexec/arch/i386/crashdump-x86.c b/kexec/arch/i386/crashdump-x86.c
> index 7b618a6..4a1491b 100644
> --- a/kexec/arch/i386/crashdump-x86.c
> +++ b/kexec/arch/i386/crashdump-x86.c
> @@ -979,7 +979,8 @@ int load_crashdump_segments(struct kexec_info *info, char* mod_cmdline,
> dbgprintf("Created elf header segment at 0x%lx\n", elfcorehdr);
> if (delete_memmap(memmap_p, &nr_memmap, elfcorehdr, memsz) < 0)
> return -1;
> - cmdline_add_memmap(mod_cmdline, memmap_p);
> + if (arch_options.pass_memmap_cmdline)
> + cmdline_add_memmap(mod_cmdline, memmap_p);
> if (!bzImage_support_efi_boot)
> cmdline_add_efi(mod_cmdline);
> cmdline_add_elfcorehdr(mod_cmdline, elfcorehdr);
> @@ -995,7 +996,8 @@ int load_crashdump_segments(struct kexec_info *info, char* mod_cmdline,
> type = mem_range[i].type;
> size = end - start + 1;
> add_memmap(memmap_p, &nr_memmap, start, size, type);
> - cmdline_add_memmap_acpi(mod_cmdline, start, end);
> + if (arch_options.pass_memmap_cmdline)
> + cmdline_add_memmap_acpi(mod_cmdline, start, end);

Seems memmap_p contains the acpi ranges as well, so cmdline_add_memmap_acpi is
not necessary anymore, just improve cmdline_add_memmap to add both RAM and ACPI
ranges is enough.

Thanks
Dave