diff options
author | Michael Holzheu <holzheu@linux.vnet.ibm.com> | 2011-10-30 10:16:37 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2011-10-30 10:16:41 -0400 |
commit | d3bf37955d46718ee1a7f1fc69f953d2328ba7c2 (patch) | |
tree | a15c9bbb510c36dc5da870660dff9c2869920401 | |
parent | 3d214faea6e4f9b6018bf8589f4b245126349c0a (diff) |
[S390] kdump: Add size to elfcorehdr kernel parameter
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.
Acked-by: Vivek Goyal <vgoyal@redhat.com>
Acked-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Michael Holzheu <holzheu@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
-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 93413ce96883..1fbe3625b2da 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. | |||
741 | See Documentation/block/cfq-iosched.txt and | 741 | See Documentation/block/cfq-iosched.txt and |
742 | Documentation/block/deadline-iosched.txt for details. | 742 | Documentation/block/deadline-iosched.txt for details. |
743 | 743 | ||
744 | elfcorehdr= [IA-64,PPC,SH,X86] | 744 | elfcorehdr=[size[KMG]@]offset[KMG] [IA64,PPC,SH,X86,S390] |
745 | Specifies physical address of start of kernel core | 745 | Specifies physical address of start of kernel core |
746 | image elf header. Generally kexec loader will | 746 | image elf header and optionally the size. Generally |
747 | pass this option to capture kernel. | 747 | kexec loader will pass this option to capture kernel. |
748 | See Documentation/kdump/kdump.txt for details. | 748 | See Documentation/kdump/kdump.txt for details. |
749 | 749 | ||
750 | enable_mtrr_cleanup [X86] | 750 | enable_mtrr_cleanup [X86] |
diff --git a/include/linux/crash_dump.h b/include/linux/crash_dump.h index 74054074e876..5c4abce94ad1 100644 --- a/include/linux/crash_dump.h +++ b/include/linux/crash_dump.h | |||
@@ -10,6 +10,7 @@ | |||
10 | #define ELFCORE_ADDR_ERR (-2ULL) | 10 | #define ELFCORE_ADDR_ERR (-2ULL) |
11 | 11 | ||
12 | extern unsigned long long elfcorehdr_addr; | 12 | extern unsigned long long elfcorehdr_addr; |
13 | extern unsigned long long elfcorehdr_size; | ||
13 | 14 | ||
14 | extern ssize_t copy_oldmem_page(unsigned long, char *, size_t, | 15 | extern ssize_t copy_oldmem_page(unsigned long, char *, size_t, |
15 | unsigned long, int); | 16 | unsigned long, int); |
diff --git a/kernel/crash_dump.c b/kernel/crash_dump.c index 5f85690285d4..69ebf3380bac 100644 --- a/kernel/crash_dump.c +++ b/kernel/crash_dump.c | |||
@@ -20,8 +20,15 @@ unsigned long saved_max_pfn; | |||
20 | unsigned long long elfcorehdr_addr = ELFCORE_ADDR_MAX; | 20 | unsigned long long elfcorehdr_addr = ELFCORE_ADDR_MAX; |
21 | 21 | ||
22 | /* | 22 | /* |
23 | * stores the size of elf header of crash image | ||
24 | */ | ||
25 | unsigned long long elfcorehdr_size; | ||
26 | |||
27 | /* | ||
23 | * elfcorehdr= specifies the location of elf core header stored by the crashed | 28 | * elfcorehdr= specifies the location of elf core header stored by the crashed |
24 | * kernel. This option will be passed by kexec loader to the capture kernel. | 29 | * kernel. This option will be passed by kexec loader to the capture kernel. |
30 | * | ||
31 | * Syntax: elfcorehdr=[size[KMG]@]offset[KMG] | ||
25 | */ | 32 | */ |
26 | static int __init setup_elfcorehdr(char *arg) | 33 | static int __init setup_elfcorehdr(char *arg) |
27 | { | 34 | { |
@@ -29,6 +36,10 @@ static int __init setup_elfcorehdr(char *arg) | |||
29 | if (!arg) | 36 | if (!arg) |
30 | return -EINVAL; | 37 | return -EINVAL; |
31 | elfcorehdr_addr = memparse(arg, &end); | 38 | elfcorehdr_addr = memparse(arg, &end); |
39 | if (*end == '@') { | ||
40 | elfcorehdr_size = elfcorehdr_addr; | ||
41 | elfcorehdr_addr = memparse(end + 1, &end); | ||
42 | } | ||
32 | return end > arg ? 0 : -EINVAL; | 43 | return end > arg ? 0 : -EINVAL; |
33 | } | 44 | } |
34 | early_param("elfcorehdr", setup_elfcorehdr); | 45 | early_param("elfcorehdr", setup_elfcorehdr); |