powerpc/kexec: split CONFIG_CRASH_DUMP out from CONFIG_KEXEC_CORE
Subsystems (4)
v2 cover powerpc/kexec: split CONFIG_CRASH_DUMP out from CONFIG_KEXEC_CORE
This patch series is a follow-up to [1] based on discussions at [2] about additional work needed to get it working on powerpc.
The first patch in the series makes struct crash_mem available with or without CONFIG_CRASH_DUMP enabled. The next patch moves kdump specific code for kexec_file_load syscall under CONFIG_CRASH_DUMP and the last patch splits other kdump specific code under CONFIG_CRASH_DUMP and removes dependency with CONFIG_CRASH_DUMP for CONFIG_KEXEC_CORE.
[1] https://lore.kernel.org/all/[email protected]/
[2] https://lore.kernel.org/all/[email protected]/
Changes in v2:
* Fixed a compile error for POWERNV build reported by Sourabh.
Hari Bathini (3):
kexec/kdump: make struct crash_mem available without CONFIG_CRASH_DUMP powerpc/kexec: split CONFIG_KEXEC_FILE and CONFIG_CRASH_DUMP powerpc/kdump: Split KEXEC_CORE and CRASH_DUMP dependency
arch/powerpc/Kconfig | 9 +- arch/powerpc/include/asm/kexec.h | 98 +++++----- arch/powerpc/kernel/prom.c | 2 +- arch/powerpc/kernel/setup-common.c | 2 +- arch/powerpc/kernel/smp.c | 4 +- arch/powerpc/kexec/Makefile | 3 +- arch/powerpc/kexec/core.c | 4 + arch/powerpc/kexec/elf_64.c | 4 +- arch/powerpc/kexec/file_load_64.c | 269 ++++++++++++++------------- arch/powerpc/platforms/powernv/smp.c | 2 +- include/linux/crash_core.h | 12 +- 11 files changed, 209 insertions(+), 200 deletions(-)
Signature · 7 lines
2.43.2 _______________________________________________ kexec mailing list [email protected] http://lists.infradead.org/mailman/listinfo/kexec
PATCH v2 1/3 kexec/kdump: make struct crash_mem available without CONFIG_CRASH_DUMP
struct crash_mem defined under include/linux/crash_core.h represents a list of memory ranges. While it is used to represent memory ranges for kdump kernel, it can also be used for other kind of memory ranges. In fact, KEXEC_FILE_LOAD syscall in powerpc uses this structure to represent reserved memory ranges and exclude memory ranges needed to find the right memory regions to load kexec kernel. So, make the definition of crash_mem structure available for !CONFIG_CRASH_DUMP case too.
---
* No changes in v2.
include/linux/crash_core.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
include/linux/crash_core.h +6 -6
@@ -8,6 +8,12 @@struct kimage ; +struct crash_mem { +unsigned int max_nr_ranges; +unsigned int nr_ranges; + struct range ranges[] __counted_by(max_nr_ranges); +}; +#ifdef CONFIG_CRASH_DUMP int crash_shrink_memory (unsigned long new_size);
@@ -51,12 +57,6 @@ static inline unsigned int crash_get_elfcorehdr_size(void) { return 0; }/* Alignment required for elf header segment */ #define ELF_CORE_HEADER_ALIGN 4096 -struct crash_mem { -unsigned int max_nr_ranges; -unsigned int nr_ranges; - struct range ranges[] __counted_by(max_nr_ranges); -}; -extern int crash_exclude_mem_range (struct crash_mem *mem,unsigned long long mstart,unsigned long long mend);
Signature · 1 line
2.43.2
Re: [PATCH linux-next v2 1/3] kexec/kdump: make struct crash_mem available without CONFIG_CRASH_DUMP
Quoted 6 lines · Hari Bathini
struct
crash_memdefined underinclude/linux/crash_core.hrepresents a list of memory ranges. While it is used to represent memory ranges for kdump kernel, it can also be used for other kind of memory ranges. In fact,KEXEC_FILE_LOADsyscall in powerpc uses this structure to represent reserved memory ranges and exclude memory ranges needed to find the right memory regions to load kexec kernel. So, make the
We may be able to refactor code to make struct crash_mem only used for crash handling, or get another data structure for loading kexec kernel. Anyway, for the time being, this is the simplest way we can take. Thanks for the work on ppc to make crash split out from the kexec code.
Quoted 44 lines
definition of
crash_memstructure available for !CONFIG_CRASH_DUMP case too.Signed-off-by Hari Bathini <[email protected]>---
* No changes in v2.
include/linux/crash_core.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)include/linux/crash_core.h +6
-6@@ -8,6 +8,12 @@struct kimage ; +struct crash_mem { +unsigned int max_nr_ranges; +unsigned int nr_ranges; + struct range ranges[] __counted_by(max_nr_ranges); +}; +#ifdef CONFIG_CRASH_DUMP int crash_shrink_memory (unsigned long new_size);@@ -51,12 +57,6 @@ static inline unsigned int crash_get_elfcorehdr_size(void) { return 0; }/* Alignment required for elf header segment */ #define ELF_CORE_HEADER_ALIGN 4096 -struct crash_mem { -unsigned int max_nr_ranges; -unsigned int nr_ranges; - struct range ranges[] __counted_by(max_nr_ranges); -}; -extern int crash_exclude_mem_range (struct crash_mem *mem,unsigned long long mstart,unsigned long long mend);Signature · 1 line
2.43.2
PATCH v2 2/3 powerpc/kexec: split CONFIG_KEXEC_FILE and CONFIG_CRASH_DUMP
In reply to Hari BathiniCONFIG_KEXEC_FILE does not have to select CONFIG_CRASH_DUMP. Move some code under CONFIG_CRASH_DUMP to support CONFIG_KEXEC_FILE and !CONFIG_CRASH_DUMP case.
---
* No changes in v2.
arch/powerpc/kexec/elf_64.c | 4 +- arch/powerpc/kexec/file_load_64.c | 269 ++++++++++++++++-------------- 2 files changed, 142 insertions(+), 131 deletions(-)
arch/powerpc/kexec/elf_64.c +2 -2
@@ -47,7 +47,7 @@ static void *elf64_load(struct kimage *image, char *kernel_buf,if (ret)return ERR_PTR (ret); -if (image->type ==KEXEC_TYPE_CRASH ) { +if (IS_ENABLED (CONFIG_CRASH_DUMP ) && image->type ==KEXEC_TYPE_CRASH ) {/* min & max buffer values for kdump case */ kbuf.buf_min = pbuf.buf_min = crashk_res.start; kbuf.buf_max = pbuf.buf_max =
@@ -70,7 +70,7 @@ static void *elf64_load(struct kimage *image, char *kernel_buf,kexec_dprintk ("Loaded purgatory at 0x%lx\n" , pbuf.mem);/* Load additional segments needed for panic kernel */ -if (image->type ==KEXEC_TYPE_CRASH ) { +if (IS_ENABLED (CONFIG_CRASH_DUMP ) && image->type ==KEXEC_TYPE_CRASH ) { ret =load_crashdump_segments_ppc64 (image, &kbuf);if (ret) {pr_err ("Failed to load kdump kernel segments\n" );
arch/powerpc/kexec/file_load_64.c +140 -129
322 lines not on this page · raw message
Signature · 7 lines
2.43.2 _______________________________________________ kexec mailing list [email protected] http://lists.infradead.org/mailman/listinfo/kexec
PATCH v2 3/3 powerpc/kdump: Split KEXEC_CORE and CRASH_DUMP dependency
In reply to Hari BathiniRemove CONFIG_CRASH_DUMP dependency on CONFIG_KEXEC. CONFIG_KEXEC_CORE was used at places where CONFIG_CRASH_DUMP or CONFIG_CRASH_RESERVE was appropriate. Replace with appropriate #ifdefs to support CONFIG_KEXEC and !CONFIG_CRASH_DUMP configuration option. Also, make CONFIG_FA_DUMP dependent on CONFIG_CRASH_DUMP to avoid unmet dependencies for FA_DUMP with !CONFIG_KEXEC_CORE configuration option.
---
Changes in v2:
* Fixed a compile error for POWERNV build reported by Sourabh.
arch/powerpc/Kconfig | 9 +-- arch/powerpc/include/asm/kexec.h | 98 ++++++++++++++-------------- arch/powerpc/kernel/prom.c | 2 +- arch/powerpc/kernel/setup-common.c | 2 +- arch/powerpc/kernel/smp.c | 4 +- arch/powerpc/kexec/Makefile | 3 +- arch/powerpc/kexec/core.c | 4 ++ arch/powerpc/platforms/powernv/smp.c | 2 +- 8 files changed, 61 insertions(+), 63 deletions(-)
arch/powerpc/Kconfig +1 -8
@@ -607,11 +607,6 @@ config PPC64_SUPPORTS_MEMORY_FAILURE config ARCH_SUPPORTS_KEXEC def_bool PPC_BOOK3S || PPC_E500 || (44x && !SMP) -config ARCH_SELECTS_KEXEC - def_bool y - depends on KEXEC - select CRASH_DUMP - config ARCH_SUPPORTS_KEXEC_FILE def_bool PPC64
@@ -622,7 +617,6 @@ config ARCH_SELECTS_KEXEC_FILE def_bool y depends on KEXEC_FILE select KEXEC_ELF - select CRASH_DUMP select HAVE_IMA_KEXEC if IMA config PPC64_BIG_ENDIAN_ELF_ABI_V2
@@ -694,8 +688,7 @@ config ARCH_SELECTS_CRASH_DUMP config FA_DUMP bool "Firmware-assisted dump" - depends on PPC64 && (PPC_RTAS || PPC_POWERNV) - select CRASH_DUMP + depends on CRASH_DUMP && PPC64 && (PPC_RTAS || PPC_POWERNV) help A robust mechanism to get reliable kernel crash dump with assistance from firmware. This approach does not use kexec,
arch/powerpc/include/asm/kexec.h +49 -49
130 lines not on this page · raw message
arch/powerpc/kernel/prom.c +1 -1
@@ -475,7 +475,7 @@ static int __init early_init_dt_scan_chosen_ppc(unsigned long node, tce_alloc_end = *lprop;#endif -#ifdef CONFIG_KEXEC_CORE +#ifdef CONFIG_CRASH_RESERVE lprop =of_get_flat_dt_prop (node,"linux,crashkernel-base" ,NULL );if (lprop) crashk_res.start = *lprop;
arch/powerpc/kernel/setup-common.c +1 -1
@@ -110,7 +110,7 @@ int ppc_do_canonicalize_irqs;EXPORT_SYMBOL (ppc_do_canonicalize_irqs);#endif -#ifdef CONFIG_VMCORE_INFO +#ifdef CONFIG_CRASH_DUMP /* This keeps a track of which one is the crashing cpu. */ int crashing_cpu =-1 ;#endif
arch/powerpc/kernel/smp.c +2 -2
@@ -588,7 +588,7 @@ void smp_send_debugger_break(void) }#endif -#ifdef CONFIG_KEXEC_CORE +#ifdef CONFIG_CRASH_DUMP void crash_send_ipi (void (*crash_ipi_callback)(struct pt_regs *)) {int cpu;
@@ -631,7 +631,7 @@ void crash_smp_send_stop(void) stopped = true; -#ifdef CONFIG_KEXEC_CORE +#ifdef CONFIG_CRASH_DUMP if (kexec_crash_image) {crash_kexec_prepare ();return ;
arch/powerpc/kexec/Makefile +2 -1
@@ -3,12 +3,13 @@ # Makefile for the linux kernel. # -obj-y += core.o crash.o core_$(BITS).o +obj-y += core.o core_$(BITS).o obj-$(CONFIG_PPC32) += relocate_32.o obj-$(CONFIG_KEXEC_FILE) += file_load.o ranges.o file_load_$(BITS).o elf_$(BITS).o obj-$(CONFIG_VMCORE_INFO) += vmcore_info.o +obj-$(CONFIG_CRASH_DUMP) += crash.o # Disable GCOV, KCOV & sanitizers in odd or sensitive code GCOV_PROFILE_core_$(BITS).o := n
arch/powerpc/kexec/core.c +4 -0
@@ -44,10 +44,12 @@ void machine_kexec_mask_interrupts(void) { } } +#ifdef CONFIG_CRASH_DUMP void machine_crash_shutdown (struct pt_regs *regs) {default_machine_crash_shutdown (regs); } +#endif void machine_kexec_cleanup (struct kimage *image) {
@@ -77,6 +79,7 @@ void machine_kexec(struct kimage *image)for (;;); } +#ifdef CONFIG_CRASH_RESERVE void __init reserve_crashkernel (void ) {unsigned long long crash_size, crash_base, total_mem_sz;
@@ -251,3 +254,4 @@ static int __init kexec_setup(void) return 0; }late_initcall (kexec_setup); +#endif /* CONFIG_CRASH_RESERVE */
arch/powerpc/platforms/powernv/smp.c +1 -1
@@ -434,7 +434,7 @@ void __init pnv_smp_init(void) smp_ops = &pnv_smp_ops;#ifdef CONFIG_HOTPLUG_CPU -#ifdef CONFIG_KEXEC_CORE +#ifdef CONFIG_CRASH_DUMP crash_wake_offline =1 ;#endif #endif
Signature · 1 line
2.43.2
Quoted 12 lines · Hari Bathini
This patch series is a follow-up to [1] based on discussions at [2] about additional work needed to get it working on powerpc.
The first patch in the series makes struct
crash_memavailable with or withoutCONFIG_CRASH_DUMPenabled. The next patch moves kdump specific code forkexec_file_loadsyscall underCONFIG_CRASH_DUMPand the last patch splits other kdump specific code underCONFIG_CRASH_DUMPand removes dependency withCONFIG_CRASH_DUMPforCONFIG_KEXEC_CORE.[1] https://lore.kernel.org/all/[email protected]/
[2] https://lore.kernel.org/all/[email protected]/
Quoted 7 lines
Changes in v2:
* Fixed a compile error for POWERNV build reported by Sourabh.Hari Bathini (3):
kexec/kdump: make structcrash_memavailable withoutCONFIG_CRASH_DUMPpowerpc/kexec: splitCONFIG_KEXEC_FILEandCONFIG_CRASH_DUMPpowerpc/kdump: SplitKEXEC_COREandCRASH_DUMPdependency
I have acked patch 1. And patch 2 and 3 looks good to me, leave these two to powerpc experts to have a careful reviewing. Thanks for these great work.
Quoted 17 lines
arch/powerpc/Kconfig | 9 +- arch/powerpc/include/asm/kexec.h | 98 +++++----- arch/powerpc/kernel/prom.c | 2 +- arch/powerpc/kernel/setup-common.c | 2 +- arch/powerpc/kernel/smp.c | 4 +- arch/powerpc/kexec/Makefile | 3 +- arch/powerpc/kexec/core.c | 4 + arch/powerpc/kexec/elf_64.c | 4 +- arch/powerpc/kexec/file_load_64.c | 269 ++++++++++++++------------- arch/powerpc/platforms/powernv/smp.c | 2 +- include/linux/crash_core.h | 12 +- 11 files changed, 209 insertions(+), 200 deletions(-)Signature · 1 line
2.43.2
Michael Ellerman
AppliedQuoted 10 lines · Hari Bathini
This patch series is a follow-up to [1] based on discussions at [2] about additional work needed to get it working on powerpc.
The first patch in the series makes struct
crash_memavailable with or withoutCONFIG_CRASH_DUMPenabled. The next patch moves kdump specific code forkexec_file_loadsyscall underCONFIG_CRASH_DUMPand the last patch splits other kdump specific code underCONFIG_CRASH_DUMPand removes dependency withCONFIG_CRASH_DUMPforCONFIG_KEXEC_CORE.[...]
Applied to powerpc/next.
[1/3] kexec/kdump: make struct crash_mem available without CONFIG_CRASH_DUMP
https://git.kernel.org/powerpc/c/56a34d799bfa53064e7b8bd354aacd176aeaecc8 [2/3] powerpc/kexec: split CONFIG_KEXEC_FILE and CONFIG_CRASH_DUMP https://git.kernel.org/powerpc/c/33f2cc0a2e90f7177c49559b434191b02efd0cd5 [3/3] powerpc/kdump: Split KEXEC_CORE and CRASH_DUMP dependency https://git.kernel.org/powerpc/c/5c4233cc0920cc90787aafe950b90f6c57a35b88
cheers