On Wed, Jul 27, 2011 at 02:55:07PM +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. 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 at 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);