diff options
| -rw-r--r-- | Documentation/kernel-parameters.txt | 6 | ||||
| -rw-r--r-- | include/linux/crash_dump.h | 1 | ||||
| -rw-r--r-- | kernel/crash_dump.c | 11 | 
3 files changed, 15 insertions, 3 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 93413ce9688..1fbe3625b2d 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt @@ -741,10 +741,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted.  			See Documentation/block/cfq-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] diff --git a/include/linux/crash_dump.h b/include/linux/crash_dump.h index 74054074e87..5c4abce94ad 100644 --- 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); diff --git a/kernel/crash_dump.c b/kernel/crash_dump.c index 5f85690285d..69ebf3380ba 100644 --- 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 *arg)  	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);  |