Re: [patch v2 03/10] kdump: Add size to elfcorehdr kernel parameter

Vivek Goyal
2011-08-01T20:36:24Z

On Wed, Jul 27, 2011 at 02:55:07PM +0200, Michael Holzheu wrote:
> From: Michael Holzheu <holzheu@linux.vnet.ibm.com>
>
> Currently only the address of the pre-allocated ELF header is passed with
> the elfcorehdr= kernel parameter. In order to reserve memory for the header
> in the 2nd kernel also the size is required. To pass the size with this
> patch the syntax of the kernel parameter is extended as follows:
>
> elfcorehdr=[size[KMG]@]offset[KMG]
>
> This change is backward compatible because elfcorehdr=size is still allowed.

Generally vmcore parses elfcorehdr to figure out the sizes. kexec-tools
knows about it and relevant memory is excluded from second kernel's map
with the help of memmap= command line option.

Can you please mention that this is only s390 specific requirement as
there are no memmap= equivalent options and somehow dump tools wants
to know how big the elf header size is?

Thanks
Vivek

>
> Signed-off-by: Michael Holzheu <holzheu@linux.vnet.ibm.com>
> ---
> Documentation/kernel-parameters.txt | 6 +++---
> include/linux/crash_dump.h | 1 +
> kernel/crash_dump.c | 11 +++++++++++
> 3 files changed, 15 insertions(+), 3 deletions(-)
>
> --- a/Documentation/kernel-parameters.txt
> +++ b/Documentation/kernel-parameters.txt
> @@ -717,10 +717,10 @@ bytes respectively. Such letter suffixes
> See Documentation/block/as-iosched.txt and
> Documentation/block/deadline-iosched.txt for details.
>
> - elfcorehdr= [IA64,PPC,SH,X86]
> + elfcorehdr=[size[KMG]@]offset[KMG] [IA64,PPC,SH,X86,S390]
> Specifies physical address of start of kernel core
> - image elf header. Generally kexec loader will
> - pass this option to capture kernel.
> + image elf header and optionally the size. Generally
> + kexec loader will pass this option to capture kernel.
> See Documentation/kdump/kdump.txt for details.
>
> enable_mtrr_cleanup [X86]
> --- a/include/linux/crash_dump.h
> +++ b/include/linux/crash_dump.h
> @@ -10,6 +10,7 @@
> #define ELFCORE_ADDR_ERR (-2ULL)
>
> extern unsigned long long elfcorehdr_addr;
> +extern unsigned long long elfcorehdr_size;
>
> extern ssize_t copy_oldmem_page(unsigned long, char *, size_t,
> unsigned long, int);
> --- a/kernel/crash_dump.c
> +++ b/kernel/crash_dump.c
> @@ -20,8 +20,15 @@ unsigned long saved_max_pfn;
> unsigned long long elfcorehdr_addr = ELFCORE_ADDR_MAX;
>
> /*
> + * stores the size of elf header of crash image
> + */
> +unsigned long long elfcorehdr_size;
> +
> +/*
> * elfcorehdr= specifies the location of elf core header stored by the crashed
> * kernel. This option will be passed by kexec loader to the capture kernel.
> + *
> + * Syntax: elfcorehdr=[size[KMG]@]offset[KMG]
> */
> static int __init setup_elfcorehdr(char *arg)
> {
> @@ -29,6 +36,10 @@ static int __init setup_elfcorehdr(char
> if (!arg)
> return -EINVAL;
> elfcorehdr_addr = memparse(arg, &end);
> + if (*end == '@') {
> + elfcorehdr_size = elfcorehdr_addr;
> + elfcorehdr_addr = memparse(end + 1, &end);
> + }
> return end > arg ? 0 : -EINVAL;
> }
> early_param("elfcorehdr", setup_elfcorehdr);