On Fri, Aug 19, 2011 at 04:18:59PM +0200, Michael Holzheu wrote: > From: Michael Holzheu <holzheu at 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. Current kdump architecture > backends use different methods to do that, e.g. x86 uses the memmap= kernel > parameter. On s390 there is no easy way to transfer this information. > Therefore the elfcorehdr kernel parameter is extended to also pass the size. > This now can also be used as standard mechanism by all future kdump > architecture backends. > > 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. > > Signed-off-by: Michael Holzheu <holzheu at linux.vnet.ibm.com> Looks good to me. Acked-by: Vivek Goyal <vgoyal at redhat.com> Vivek > --- > 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 > @@ -727,10 +727,10 @@ bytes respectively. Such letter suffixes > See Documentation/block/as-iosched.txt and > Documentation/block/deadline-iosched.txt for details. > > - elfcorehdr= [IA-64,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);