crash_dump: export is_kdump_kernel to modules, consolidate elfcorehdr_addr, setup_elfcorehdr and saved_max_pfn
Subsystems (7)
PATCH 1/1 crash_dump: export is_kdump_kernel to modules, consolidate elfcorehdr_addr, setup_elfcorehdr and saved_max_pfn
The Xen PV drivers in a crashed HVM guest can not connect to the dom0 backend drivers because both frontend and backend drivers are still in connected state. To run the connection reset function only in case of a crashdump, the is_kdump_kernel() function needs to be available for the PV driver modules.
Consolidate elfcorehdr_addr, setup_elfcorehdr and saved_max_pfn into kernel/crash_dump.c Also export elfcorehdr_addr to make is_kdump_kernel() usable for modules.
Leave 'elfcorehdr' as early_param(). This changes powerpc from __setup() to early_param(). It adds an address range check from x86 also on ia64 and powerpc.
--- arch/arm/kernel/crash_dump.c | 3 --- arch/arm/kernel/setup.c | 24 ------------------------ arch/ia64/kernel/crash_dump.c | 3 --- arch/ia64/kernel/efi.c | 1 + arch/ia64/kernel/setup.c | 18 ------------------ arch/powerpc/kernel/crash_dump.c | 17 ----------------- arch/sh/kernel/crash_dump.c | 22 ---------------------- arch/x86/kernel/crash_dump_32.c | 3 --- arch/x86/kernel/crash_dump_64.c | 3 --- arch/x86/kernel/e820.c | 1 + arch/x86/kernel/setup.c | 22 ---------------------- include/linux/bootmem.h | 4 ---- kernel/Makefile | 1 + kernel/crash_dump.c | 33 +++++++++++++++++++++++++++++++++ mm/bootmem.c | 8 -------- 15 files changed, 36 insertions(+), 127 deletions(-)
arch/arm/kernel/crash_dump.c +0 -3
@@ -18,9 +18,6 @@#include <linux/uaccess.h> #include <linux/io.h> -/* stores the physical address of elf header of crash image */ -unsigned long long elfcorehdr_addr =ELFCORE_ADDR_MAX ; -/** * copy_oldmem_page() - copy one page from old kernel memory * @pfn: page frame number to be copied
arch/arm/kernel/setup.c +0 -24
@@ -765,30 +765,6 @@ static void __init reserve_crashkernel(vstatic inline void reserve_crashkernel (void ) {}#endif /* CONFIG_KEXEC */ -/* -* Note: elfcorehdr_addr is not just limited to vmcore. It is also used by -* is_kdump_kernel() to determine if we are booting after a panic. Hence -* ifdef it under CONFIG_CRASH_DUMP and not CONFIG_PROC_VMCORE. -*/ - -#ifdef CONFIG_CRASH_DUMP -/* -* 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. -*/ -static int __init setup_elfcorehdr (char *arg) -{ -char *end; - -if (!arg) -return -EINVAL ; - - elfcorehdr_addr =memparse (arg, &end); -return end > arg ?0 : -EINVAL ; -} -early_param ("elfcorehdr" , setup_elfcorehdr); -#endif /* CONFIG_CRASH_DUMP */ -static void __init squash_mem_tags (struct tag *tag) {for (; tag->hdr.size; tag =tag_next (tag))
arch/ia64/kernel/crash_dump.c +0 -3
@@ -13,9 +13,6 @@#include <asm/page.h> #include <asm/uaccess.h> -/* Stores the physical address of elf header of crash image. */ -unsigned long long elfcorehdr_addr =ELFCORE_ADDR_MAX ; -/** * copy_oldmem_page - copy one page from "oldmem" * @pfn: page frame number to be copied
arch/ia64/kernel/efi.c +1 -0
@@ -23,6 +23,7 @@*/ #include <linux/module.h> #include <linux/bootmem.h> +#include <linux/crash_dump.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/types.h>
arch/ia64/kernel/setup.c +0 -18
@@ -479,25 +479,7 @@ static __init int setup_nomca(char *s) }early_param ("nomca" , setup_nomca); -/* -* Note: elfcorehdr_addr is not just limited to vmcore. It is also used by -* is_kdump_kernel() to determine if we are booting after a panic. Hence -* ifdef it under CONFIG_CRASH_DUMP and not CONFIG_PROC_VMCORE. -*/ #ifdef CONFIG_CRASH_DUMP -/* elfcorehdr= specifies the location of elf core header -* stored by the crashed kernel. -*/ -static int __init parse_elfcorehdr (char *arg) -{ -if (!arg) -return -EINVAL ; - - elfcorehdr_addr =memparse (arg, &arg); -return 0 ; -} -early_param ("elfcorehdr" , parse_elfcorehdr); -int __init reserve_elfcorehdr (u64 *start,u64 *end) {u64 length;
arch/powerpc/kernel/crash_dump.c +0 -17
@@ -28,9 +28,6 @@ #define DBG(fmt...)#endif -/* Stores the physical address of elf header of crash image. */ -unsigned long long elfcorehdr_addr =ELFCORE_ADDR_MAX ; -#ifndef CONFIG_RELOCATABLE void __init reserve_kdump_trampoline (void ) {
@@ -72,20 +69,6 @@ void __init setup_kdump_trampoline(void) }#endif /* CONFIG_RELOCATABLE */ -/* -* Note: elfcorehdr_addr is not just limited to vmcore. It is also used by -* is_kdump_kernel() to determine if we are booting after a panic. Hence -* ifdef it under CONFIG_CRASH_DUMP and not CONFIG_PROC_VMCORE. -*/ -static int __init parse_elfcorehdr (char *p) -{ -if (p) - elfcorehdr_addr =memparse (p, &p); - -return 1 ; -} -__setup ("elfcorehdr=" , parse_elfcorehdr); -static int __init parse_savemaxmem (char *p) {if (p)
arch/sh/kernel/crash_dump.c +0 -22
@@ -9,28 +9,6 @@#include <linux/io.h> #include <asm/uaccess.h> -/* Stores the physical address of elf header of crash image. */ -unsigned long long elfcorehdr_addr =ELFCORE_ADDR_MAX ; - -/* -* Note: elfcorehdr_addr is not just limited to vmcore. It is also used by -* is_kdump_kernel() to determine if we are booting after a panic. Hence -* ifdef it under CONFIG_CRASH_DUMP and not CONFIG_PROC_VMCORE. -* -* elfcorehdr= specifies the location of elf core header -* stored by the crashed kernel. -*/ -static int __init parse_elfcorehdr (char *arg) -{ -if (!arg) -return -EINVAL ; - - elfcorehdr_addr =memparse (arg, &arg); - -return 0 ; -} -early_param ("elfcorehdr" , parse_elfcorehdr); -/** * copy_oldmem_page - copy one page from "oldmem" * @pfn: page frame number to be copied
arch/x86/kernel/crash_dump_32.c +0 -3
@@ -14,9 +14,6 @@static void *kdump_buf_page; -/* Stores the physical address of elf header of crash image. */ -unsigned long long elfcorehdr_addr =ELFCORE_ADDR_MAX ; -static inline bool is_crashed_pfn_valid (unsigned long pfn) {#ifndef CONFIG_X86_PAE
arch/x86/kernel/crash_dump_64.c +0 -3
@@ -10,9 +10,6 @@#include <linux/uaccess.h> #include <linux/io.h> -/* Stores the physical address of elf header of crash image. */ -unsigned long long elfcorehdr_addr =ELFCORE_ADDR_MAX ; -/** * copy_oldmem_page - copy one page from "oldmem" * @pfn: page frame number to be copied
arch/x86/kernel/e820.c +1 -0
@@ -11,6 +11,7 @@#include <linux/kernel.h> #include <linux/types.h> #include <linux/init.h> +#include <linux/crash_dump.h> #include <linux/bootmem.h> #include <linux/pfn.h> #include <linux/suspend.h>
arch/x86/kernel/setup.c +0 -22
@@ -601,28 +601,6 @@ void __init reserve_standard_io_resource } -/* -* Note: elfcorehdr_addr is not just limited to vmcore. It is also used by -* is_kdump_kernel() to determine if we are booting after a panic. Hence -* ifdef it under CONFIG_CRASH_DUMP and not CONFIG_PROC_VMCORE. -*/ - -#ifdef CONFIG_CRASH_DUMP -/* 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. -*/ -static int __init setup_elfcorehdr (char *arg) -{ -char *end; -if (!arg) -return -EINVAL ; - elfcorehdr_addr =memparse (arg, &end); -return end > arg ?0 : -EINVAL ; -} -early_param ("elfcorehdr" , setup_elfcorehdr); -#endif -static __init void reserve_ibft_region (void ) {unsigned long addr, size =0 ;
include/linux/bootmem.h +0 -4
@@ -19,10 +19,6 @@ extern unsigned long min_low_pfn;*/ extern unsigned long max_pfn; -#ifdef CONFIG_CRASH_DUMP -extern unsigned long saved_max_pfn; -#endif -#ifndef CONFIG_NO_BOOTMEM /* * node_bootmem_map is a map pointer - the bits represent all physical
kernel/Makefile +1 -0
@@ -107,6 +107,7 @@ obj-$(CONFIG_PERF_EVENTS) += perf_event. obj-$(CONFIG_HAVE_HW_BREAKPOINT) += hw_breakpoint.o obj-$(CONFIG_USER_RETURN_NOTIFIER) += user-return-notifier.o obj-$(CONFIG_PADATA) += padata.o +obj-$(CONFIG_CRASH_DUMP) += crash_dump.o ifneq ($(CONFIG_SCHED_OMIT_FRAME_POINTER),y) # According to Alan Modra <[email protected]>, the -fno-omit-frame-pointer is
kernel/crash_dump.c new file +33 -0
@@ -0,0 +1,33 @@ +#include <linux/crash_dump.h> +#include <linux/init.h> +#include <linux/module.h> + +/* +* If we have booted due to a crash, max_pfn will be a very low value. We need +* to know the amount of memory that the previous kernel used. +*/ +unsigned long saved_max_pfn; + +/* +* stores the physical address of elf header of crash image +* +* Note: elfcorehdr_addr is not just limited to vmcore. It is also used by +* is_kdump_kernel() to determine if we are booting after a panic. Hence put +* it under CONFIG_CRASH_DUMP and not CONFIG_PROC_VMCORE. +*/ +unsigned long long elfcorehdr_addr =ELFCORE_ADDR_MAX ; +EXPORT_SYMBOL_GPL (elfcorehdr_addr); + +/* +* 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. +*/ +static int __init setup_elfcorehdr (char *arg) +{ +char *end; +if (!arg) +return -EINVAL ; + elfcorehdr_addr =memparse (arg, &end); +return end > arg ?0 : -EINVAL ; +} +early_param ("elfcorehdr" , setup_elfcorehdr);
mm/bootmem.c +0 -8
@@ -27,14 +27,6 @@ unsigned long max_low_pfn;unsigned long min_low_pfn;unsigned long max_pfn; -#ifdef CONFIG_CRASH_DUMP -/* -* If we have booted due to a crash, max_pfn will be a very low value. We need -* to know the amount of memory that the previous kernel used. -*/ -unsigned long saved_max_pfn; -#endif -#ifndef CONFIG_NO_BOOTMEM bootmem_data_t bootmem_node_data[MAX_NUMNODES ]__initdata ;
Quoted 6 lines · Olaf Hering
The Xen PV drivers in a crashed HVM guest can not connect to the dom0 backend drivers because both frontend and backend drivers are still in connected state. To run the connection reset function only in case of a crashdump, the
is_kdump_kernel()function needs to be available for the PV driver modules.
Quoted 8 lines
Consolidate
elfcorehdr_addr,setup_elfcorehdrandsaved_max_pfnintokernel/crash_dump.cAlso exportelfcorehdr_addrto makeis_kdump_kernel()usable for modules.Leave 'elfcorehdr' as
early_param(). This changes powerpc from__setup()toearly_param(). It adds an address range check from x86 also on ia64 and powerpc.
Hmm, once we export is_kdump_kernel() I bet some driver will start to use it to "fix" kdump problem, which definitely is a wrong approach.
I am not familiar with Xen at all, don't know why you have to use is_kdump_kernel() in this case. You need to persuade people to believe this is a fix not a workaround. :)
Andrew Morton
maintainerQuoted 26 lines · On Tue, 25 Jan 2011 17:10:52 +0100 Olaf Hering <[email protected]> wrote:
The Xen PV drivers in a crashed HVM guest can not connect to the dom0 backend drivers because both frontend and backend drivers are still in connected state. To run the connection reset function only in case of a crashdump, the
is_kdump_kernel()function needs to be available for the PV driver modules.Consolidate
elfcorehdr_addr,setup_elfcorehdrandsaved_max_pfnintokernel/crash_dump.cAlso exportelfcorehdr_addrto makeis_kdump_kernel()usable for modules.Leave 'elfcorehdr' as
early_param(). This changes powerpc from__setup()toearly_param(). It adds an address range check from x86 also on ia64 and powerpc.Signed-off-by Olaf Hering <[email protected]>--- arch/arm/kernel/crash_dump.c | 3 --- arch/arm/kernel/setup.c | 24 ------------------------ arch/ia64/kernel/crash_dump.c | 3 --- arch/ia64/kernel/efi.c | 1 + arch/ia64/kernel/setup.c | 18 ------------------ arch/powerpc/kernel/crash_dump.c | 17 ----------------- arch/sh/kernel/crash_dump.c | 22 ---------------------- arch/x86/kernel/crash_dump_32.c | 3 ---
Quoted 8 lines
arch/x86/kernel/crash_dump_64.c | 3 --- arch/x86/kernel/e820.c | 1 + arch/x86/kernel/setup.c | 22 ---------------------- include/linux/bootmem.h | 4 ---- kernel/Makefile | 1 + kernel/crash_dump.c | 33 +++++++++++++++++++++++++++++++++ mm/bootmem.c | 8 -------- 15 files changed, 36 insertions(+), 127 deletions(-)
That was a decent cleanup.
Quoted 29 lines
...
kernel/crash_dump.c new file +23
-0@@ -0,0 +1,33 @@ +#include <linux/crash_dump.h> +#include <linux/init.h> +#include <linux/module.h> + +/* +* If we have booted due to a crash, max_pfn will be a very low value. We need +* to know the amount of memory that the previous kernel used. +*/ +unsigned long saved_max_pfn; + +/* +* stores the physical address of elf header of crash image +* +* Note: elfcorehdr_addr is not just limited to vmcore. It is also used by +* is_kdump_kernel() to determine if we are booting after a panic. Hence put +* it under CONFIG_CRASH_DUMP and not CONFIG_PROC_VMCORE. +*/ +unsigned long long elfcorehdr_addr =ELFCORE_ADDR_MAX ; +EXPORT_SYMBOL_GPL (elfcorehdr_addr); + +/* +* 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.
kernel/crash_dump.c line 33
Quoted 10 lines
kernel/crash_dump.c new file +10
-0+*/ +static int __init setup_elfcorehdr (char *arg) +{ +char *end; +if (!arg) +return -EINVAL ; + elfcorehdr_addr =memparse (arg, &end); +return end > arg ?0 : -EINVAL ; +} +early_param ("elfcorehdr" , setup_elfcorehdr);
Please check that this file is #including everything it needs. Just looking at it I'd expect a build error with CONFIG_KEXEC=n, CONFIG_CRASH_DUMP=y due to a missed ELFCORE_ADDR_MAX definition.
Quoted 35 lines · Andrew Morton
Quoted 32 lines · On Tue, 25 Jan 2011 17:10:52 +0100 Olaf Hering <[email protected]> wrote:
kernel/crash_dump.c new file +29
-0@@ -0,0 +1,33 @@ +#include <linux/crash_dump.h> +#include <linux/init.h> +#include <linux/module.h> + +/* +* If we have booted due to a crash, max_pfn will be a very low value. We need +* to know the amount of memory that the previous kernel used. +*/ +unsigned long saved_max_pfn; + +/* +* stores the physical address of elf header of crash image +* +* Note: elfcorehdr_addr is not just limited to vmcore. It is also used by +* is_kdump_kernel() to determine if we are booting after a panic. Hence put +* it under CONFIG_CRASH_DUMP and not CONFIG_PROC_VMCORE. +*/ +unsigned long long elfcorehdr_addr =ELFCORE_ADDR_MAX ; +EXPORT_SYMBOL_GPL (elfcorehdr_addr); + +/* +* 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. +*/ +static int __init setup_elfcorehdr (char *arg) +{ +char *end; +if (!arg) +return -EINVAL ;
Quoted 8 lines
kernel/crash_dump.c line 33
Quoted 4 lines
kernel/crash_dump.c new file +4
-0+ elfcorehdr_addr =memparse (arg, &end); +return end > arg ?0 : -EINVAL ; +} +early_param ("elfcorehdr" , setup_elfcorehdr);Please check that this file is #including everything it needs. Just looking at it I'd expect a build error with
CONFIG_KEXEC=n,CONFIG_CRASH_DUMP=ydue to a missedELFCORE_ADDR_MAXdefinition.
I'm not sure what you mean? ELFCORE_ADDR_MAX is in linux/crash_dump.h defined unconditionally. I dont see the relation to CONFIG_KEXEC.
Olaf
Andrew Morton
maintainerQuoted 46 lines · On Thu, 27 Jan 2011 11:47:13 +0100 Olaf Hering <[email protected]> wrote:
Quoted 35 lines · Andrew Morton
Quoted 32 lines · On Tue, 25 Jan 2011 17:10:52 +0100 Olaf Hering <[email protected]> wrote:
kernel/crash_dump.c new file +29
-0@@ -0,0 +1,33 @@ +#include <linux/crash_dump.h> +#include <linux/init.h> +#include <linux/module.h> + +/* +* If we have booted due to a crash, max_pfn will be a very low value. We need +* to know the amount of memory that the previous kernel used. +*/ +unsigned long saved_max_pfn; + +/* +* stores the physical address of elf header of crash image +* +* Note: elfcorehdr_addr is not just limited to vmcore. It is also used by +* is_kdump_kernel() to determine if we are booting after a panic. Hence put +* it under CONFIG_CRASH_DUMP and not CONFIG_PROC_VMCORE. +*/ +unsigned long long elfcorehdr_addr =ELFCORE_ADDR_MAX ; +EXPORT_SYMBOL_GPL (elfcorehdr_addr); + +/* +* 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. +*/ +static int __init setup_elfcorehdr (char *arg) +{ +char *end; +if (!arg) +return -EINVAL ;Quoted 8 lines
kernel/crash_dump.c line 33
Quoted 4 lines
kernel/crash_dump.c new file +4
-0+ elfcorehdr_addr =memparse (arg, &end); +return end > arg ?0 : -EINVAL ; +} +early_param ("elfcorehdr" , setup_elfcorehdr);Please check that this file is #including everything it needs. Just looking at it I'd expect a build error with
CONFIG_KEXEC=n,CONFIG_CRASH_DUMP=ydue to a missedELFCORE_ADDR_MAXdefinition.
Quoted 2 lines
I'm not sure what you mean?
ELFCORE_ADDR_MAXis inlinux/crash_dump.hdefined unconditionally. I dont see the relation toCONFIG_KEXEC.
OK, I didn't look too closely. I asked you to. memparse()? EINVAL?
kernel/crash_dump.c renamed from kernel/crash_dump.c~crash_dump-export-is_kdump_kernel-to-modules-consolidate-elfcorehdr_addr-setup_elfcorehdr-and-saved_max_pfn-fix +2 -0
@@ -1,5 +1,7 @@ +#include <linux/kernel.h> #include <linux/crash_dump.h> #include <linux/init.h> +#include <linux/errno.h> #include <linux/module.h> /*
_
Quoted 7 lines · Olaf Hering
The Xen PV drivers in a crashed HVM guest can not connect to the dom0 backend drivers because both frontend and backend drivers are still in connected state. To run the connection reset function only in case of a crashdump, the
is_kdump_kernel()function needs to be available for the PV driver modules.
Quoted 7 lines
Consolidate
elfcorehdr_addr,setup_elfcorehdrandsaved_max_pfnintokernel/crash_dump.cAlso exportelfcorehdr_addrto makeis_kdump_kernel()usable for modules.Leave 'elfcorehdr' as
early_param(). This changes powerpc from__setup()toearly_param(). It adds an address range check from x86 also on ia64 and powerpc.
Olaf,
I think your HVM guest has booted into kdump kernel after the crash and now you want Xen PV driver to reset the connection with Dom0.
If that's the case, I think instead of exporting is_kdump_kernel(), better make use of symbol "reset_devices". Kexec-tools passes this kernel command line option to kdump kernel which tells the kernel that it is booting in an unreliable environment and device drivers should reset the underlying devices and not rely on BIOS to have put devices in a known good state. So if reset_devices=1, then Xen PV driver should reset the underlying device hence the connection with Dom0.
Apart from that, moving the code from arch specific section to generic code helps. So that bit you can retain and get rid of export of is_kdump_kernel() and elfcorehdr_addr.
Thanks
Vivek
Quoted 326 lines
Signed-off-by Olaf Hering <[email protected]>--- arch/arm/kernel/crash_dump.c | 3 --- arch/arm/kernel/setup.c | 24 ------------------------ arch/ia64/kernel/crash_dump.c | 3 --- arch/ia64/kernel/efi.c | 1 + arch/ia64/kernel/setup.c | 18 ------------------ arch/powerpc/kernel/crash_dump.c | 17 ----------------- arch/sh/kernel/crash_dump.c | 22 ---------------------- arch/x86/kernel/crash_dump_32.c | 3 --- arch/x86/kernel/crash_dump_64.c | 3 --- arch/x86/kernel/e820.c | 1 + arch/x86/kernel/setup.c | 22 ---------------------- include/linux/bootmem.h | 4 ---- kernel/Makefile | 1 + kernel/crash_dump.c | 33 +++++++++++++++++++++++++++++++++ mm/bootmem.c | 8 -------- 15 files changed, 36 insertions(+), 127 deletions(-)arch/arm/kernel/crash_dump.c +0
-3@@ -18,9 +18,6 @@#include <linux/uaccess.h> #include <linux/io.h> -/* stores the physical address of elf header of crash image */ -unsigned long long elfcorehdr_addr =ELFCORE_ADDR_MAX ; -/** * copy_oldmem_page() - copy one page from old kernel memory * @pfn: page frame number to be copied arch/arm/kernel/setup.c +0
-24@@ -765,30 +765,6 @@ static void __init reserve_crashkernel(vstatic inline void reserve_crashkernel (void ) {}#endif /* CONFIG_KEXEC */ -/* -* Note: elfcorehdr_addr is not just limited to vmcore. It is also used by -* is_kdump_kernel() to determine if we are booting after a panic. Hence -* ifdef it under CONFIG_CRASH_DUMP and not CONFIG_PROC_VMCORE. -*/ - -#ifdef CONFIG_CRASH_DUMP -/* -* 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. -*/ -static int __init setup_elfcorehdr (char *arg) -{ -char *end; - -if (!arg) -return -EINVAL ; - - elfcorehdr_addr =memparse (arg, &end); -return end > arg ?0 : -EINVAL ; -} -early_param ("elfcorehdr" , setup_elfcorehdr); -#endif /* CONFIG_CRASH_DUMP */ -static void __init squash_mem_tags (struct tag *tag) {for (; tag->hdr.size; tag =tag_next (tag))arch/ia64/kernel/crash_dump.c +0
-3@@ -13,9 +13,6 @@#include <asm/page.h> #include <asm/uaccess.h> -/* Stores the physical address of elf header of crash image. */ -unsigned long long elfcorehdr_addr =ELFCORE_ADDR_MAX ; -/** * copy_oldmem_page - copy one page from "oldmem" * @pfn: page frame number to be copied arch/ia64/kernel/efi.c +1
-0@@ -23,6 +23,7 @@*/ #include <linux/module.h> #include <linux/bootmem.h> +#include <linux/crash_dump.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/types.h> arch/ia64/kernel/setup.c +0
-18@@ -479,25 +479,7 @@ static __init int setup_nomca(char *s) }early_param ("nomca" , setup_nomca); -/* -* Note: elfcorehdr_addr is not just limited to vmcore. It is also used by -* is_kdump_kernel() to determine if we are booting after a panic. Hence -* ifdef it under CONFIG_CRASH_DUMP and not CONFIG_PROC_VMCORE. -*/ #ifdef CONFIG_CRASH_DUMP -/* elfcorehdr= specifies the location of elf core header -* stored by the crashed kernel. -*/ -static int __init parse_elfcorehdr (char *arg) -{ -if (!arg) -return -EINVAL ; - - elfcorehdr_addr =memparse (arg, &arg); -return 0 ; -} -early_param ("elfcorehdr" , parse_elfcorehdr); -int __init reserve_elfcorehdr (u64 *start,u64 *end) {u64 length;arch/powerpc/kernel/crash_dump.c +0
-17@@ -28,9 +28,6 @@ #define DBG(fmt...)#endif -/* Stores the physical address of elf header of crash image. */ -unsigned long long elfcorehdr_addr =ELFCORE_ADDR_MAX ; -#ifndef CONFIG_RELOCATABLE void __init reserve_kdump_trampoline (void ) {@@ -72,20 +69,6 @@ void __init setup_kdump_trampoline(void) }#endif /* CONFIG_RELOCATABLE */ -/* -* Note: elfcorehdr_addr is not just limited to vmcore. It is also used by -* is_kdump_kernel() to determine if we are booting after a panic. Hence -* ifdef it under CONFIG_CRASH_DUMP and not CONFIG_PROC_VMCORE. -*/ -static int __init parse_elfcorehdr (char *p) -{ -if (p) - elfcorehdr_addr =memparse (p, &p); - -return 1 ; -} -__setup ("elfcorehdr=" , parse_elfcorehdr); -static int __init parse_savemaxmem (char *p) {if (p)arch/sh/kernel/crash_dump.c +0
-22@@ -9,28 +9,6 @@#include <linux/io.h> #include <asm/uaccess.h> -/* Stores the physical address of elf header of crash image. */ -unsigned long long elfcorehdr_addr =ELFCORE_ADDR_MAX ; - -/* -* Note: elfcorehdr_addr is not just limited to vmcore. It is also used by -* is_kdump_kernel() to determine if we are booting after a panic. Hence -* ifdef it under CONFIG_CRASH_DUMP and not CONFIG_PROC_VMCORE. -* -* elfcorehdr= specifies the location of elf core header -* stored by the crashed kernel. -*/ -static int __init parse_elfcorehdr (char *arg) -{ -if (!arg) -return -EINVAL ; - - elfcorehdr_addr =memparse (arg, &arg); - -return 0 ; -} -early_param ("elfcorehdr" , parse_elfcorehdr); -/** * copy_oldmem_page - copy one page from "oldmem" * @pfn: page frame number to be copied arch/x86/kernel/crash_dump_32.c +0
-3@@ -14,9 +14,6 @@static void *kdump_buf_page; -/* Stores the physical address of elf header of crash image. */ -unsigned long long elfcorehdr_addr =ELFCORE_ADDR_MAX ; -static inline bool is_crashed_pfn_valid (unsigned long pfn) {#ifndef CONFIG_X86_PAE arch/x86/kernel/crash_dump_64.c +0
-3@@ -10,9 +10,6 @@#include <linux/uaccess.h> #include <linux/io.h> -/* Stores the physical address of elf header of crash image. */ -unsigned long long elfcorehdr_addr =ELFCORE_ADDR_MAX ; -/** * copy_oldmem_page - copy one page from "oldmem" * @pfn: page frame number to be copied arch/x86/kernel/e820.c +1
-0@@ -11,6 +11,7 @@#include <linux/kernel.h> #include <linux/types.h> #include <linux/init.h> +#include <linux/crash_dump.h> #include <linux/bootmem.h> #include <linux/pfn.h> #include <linux/suspend.h> arch/x86/kernel/setup.c +0
-22@@ -601,28 +601,6 @@ void __init reserve_standard_io_resource } -/* -* Note: elfcorehdr_addr is not just limited to vmcore. It is also used by -* is_kdump_kernel() to determine if we are booting after a panic. Hence -* ifdef it under CONFIG_CRASH_DUMP and not CONFIG_PROC_VMCORE. -*/ - -#ifdef CONFIG_CRASH_DUMP -/* 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. -*/ -static int __init setup_elfcorehdr (char *arg) -{ -char *end; -if (!arg) -return -EINVAL ; - elfcorehdr_addr =memparse (arg, &end); -return end > arg ?0 : -EINVAL ; -} -early_param ("elfcorehdr" , setup_elfcorehdr); -#endif -static __init void reserve_ibft_region (void ) {unsigned long addr, size =0 ;include/linux/bootmem.h +0
-4@@ -19,10 +19,6 @@ extern unsigned long min_low_pfn;*/ extern unsigned long max_pfn; -#ifdef CONFIG_CRASH_DUMP -extern unsigned long saved_max_pfn; -#endif -#ifndef CONFIG_NO_BOOTMEM /* * node_bootmem_map is a map pointer - the bits represent all physical kernel/Makefile +1
-0@@ -107,6 +107,7 @@ obj-$(CONFIG_PERF_EVENTS) += perf_event. obj-$(CONFIG_HAVE_HW_BREAKPOINT) += hw_breakpoint.o obj-$(CONFIG_USER_RETURN_NOTIFIER) += user-return-notifier.o obj-$(CONFIG_PADATA) += padata.o +obj-$(CONFIG_CRASH_DUMP) += crash_dump.o ifneq ($(CONFIG_SCHED_OMIT_FRAME_POINTER),y) # According to Alan Modra <[email protected]>, the -fno-omit-frame-pointer iskernel/crash_dump.c new file +33
-0@@ -0,0 +1,33 @@ +#include <linux/crash_dump.h> +#include <linux/init.h> +#include <linux/module.h> + +/* +* If we have booted due to a crash, max_pfn will be a very low value. We need +* to know the amount of memory that the previous kernel used. +*/ +unsigned long saved_max_pfn; + +/* +* stores the physical address of elf header of crash image +* +* Note: elfcorehdr_addr is not just limited to vmcore. It is also used by +* is_kdump_kernel() to determine if we are booting after a panic. Hence put +* it under CONFIG_CRASH_DUMP and not CONFIG_PROC_VMCORE. +*/ +unsigned long long elfcorehdr_addr =ELFCORE_ADDR_MAX ; +EXPORT_SYMBOL_GPL (elfcorehdr_addr); + +/* +* 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. +*/ +static int __init setup_elfcorehdr (char *arg) +{ +char *end; +if (!arg) +return -EINVAL ; + elfcorehdr_addr =memparse (arg, &end); +return end > arg ?0 : -EINVAL ; +} +early_param ("elfcorehdr" , setup_elfcorehdr);mm/bootmem.c +0
-9@@ -27,14 +27,6 @@ unsigned long max_low_pfn;unsigned long min_low_pfn;unsigned long max_pfn; -#ifdef CONFIG_CRASH_DUMP -/* -* If we have booted due to a crash, max_pfn will be a very low value. We need -* to know the amount of memory that the previous kernel used. -*/ -unsigned long saved_max_pfn; -#endif -#ifndef CONFIG_NO_BOOTMEM bootmem_data_t bootmem_node_data[MAX_NUMNODES ]__initdata ; --To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Quoted 4 lines · Vivek Goyal
Olaf,
I think your HVM guest has booted into kdump kernel after the crash and now you want Xen PV driver to reset the connection with Dom0.
Yes, thats the case.
Quoted 7 lines
If that's the case, I think instead of exporting
is_kdump_kernel(), better make use of symbol "reset_devices". Kexec-tools passes this kernel command line option to kdump kernel which tells the kernel that it is booting in an unreliable environment and device drivers should reset the underlying devices and not rely on BIOS to have put devices in a known good state. So if reset_devices=1, then Xen PV driver should reset the underlying device hence the connection with Dom0.
I will use this variable, its passed unconditionally from the boot.kdump script.
Quoted 3 lines
Apart from that, moving the code from arch specific section to generic code helps. So that bit you can retain and get rid of export of
is_kdump_kernel()andelfcorehdr_addr.
Andrew, do you want a new patch with the export of elfcorehdr_addr removed, or can you edit my patch and remove that one line?
Olaf
Andrew Morton
maintainerQuoted 7 lines · On Thu, 27 Jan 2011 11:57:51 +0100 Olaf Hering <[email protected]> wrote:
Quoted 3 lines
Apart from that, moving the code from arch specific section to generic code helps. So that bit you can retain and get rid of export of
is_kdump_kernel()andelfcorehdr_addr.Andrew, do you want a new patch with the export of
elfcorehdr_addrremoved, or can you edit my patch and remove that one line?
This?
kernel/crash_dump.c renamed from kernel/crash_dump.c~crash_dump-export-is_kdump_kernel-to-modules-consolidate-elfcorehdr_addr-setup_elfcorehdr-and-saved_max_pfn-fix-fix +0 -1
@@ -18,7 +18,6 @@ unsigned long saved_max_pfn;* it under CONFIG_CRASH_DUMP and not CONFIG_PROC_VMCORE. */ unsigned long long elfcorehdr_addr =ELFCORE_ADDR_MAX ; -EXPORT_SYMBOL_GPL (elfcorehdr_addr);/* * elfcorehdr= specifies the location of elf core header stored by the crashed
_