From: Nathan Chancellor <nathan@kernel.org>
To: Baoquan He <bhe@redhat.com>
Cc: linux-kernel@vger.kernel.org, kexec@lists.infradead.org,
x86@kernel.org, linux-arm-kernel@lists.infradead.org,
linuxppc-dev@lists.ozlabs.org, linux-s390@vger.kernel.org,
linux-sh@vger.kernel.org, linux-mips@vger.kernel.org,
linux-riscv@lists.infradead.org, loongarch@lists.linux.dev,
akpm@linux-foundation.org, ebiederm@xmission.com,
hbathini@linux.ibm.com, piliu@redhat.com,
viro@zeniv.linux.org.uk
Subject: Re: [PATCH linux-next v3 00/14] Split crash out from kexec and clean up related config items
Date: Thu, 25 Jan 2024 21:55:51 -0700 [thread overview]
Message-ID: <20240126045551.GA126645@dev-arch.thelio-3990X> (raw)
In-Reply-To: <20240124051254.67105-1-bhe@redhat.com>
Hi Baoquan,
On Wed, Jan 24, 2024 at 01:12:40PM +0800, Baoquan He wrote:
> Motivation:
> =============
> Previously, LKP reported a building error. When investigating, it can't
> be resolved reasonablly with the present messy kdump config items.
>
> https://lore.kernel.org/oe-kbuild-all/202312182200.Ka7MzifQ-lkp@intel.com/
>
> The kdump (crash dumping) related config items could causes confusions:
>
> Firstly,
> ---
> CRASH_CORE enables codes including
> - crashkernel reservation;
> - elfcorehdr updating;
> - vmcoreinfo exporting;
> - crash hotplug handling;
>
> Now fadump of powerpc, kcore dynamic debugging and kdump all selects
> CRASH_CORE, while fadump
> - fadump needs crashkernel parsing, vmcoreinfo exporting, and accessing
> global variable 'elfcorehdr_addr';
> - kcore only needs vmcoreinfo exporting;
> - kdump needs all of the current kernel/crash_core.c.
>
> So only enabling PROC_CORE or FA_DUMP will enable CRASH_CORE, this
> mislead people that we enable crash dumping, actual it's not.
>
> Secondly,
> ---
> It's not reasonable to allow KEXEC_CORE select CRASH_CORE.
>
> Because KEXEC_CORE enables codes which allocate control pages, copy
> kexec/kdump segments, and prepare for switching. These codes are
> shared by both kexec reboot and kdump. We could want kexec reboot,
> but disable kdump. In that case, CRASH_CORE should not be selected.
>
> --------------------
> CONFIG_CRASH_CORE=y
> CONFIG_KEXEC_CORE=y
> CONFIG_KEXEC=y
> CONFIG_KEXEC_FILE=y
> ---------------------
>
> Thirdly,
> ---
> It's not reasonable to allow CRASH_DUMP select KEXEC_CORE.
>
> That could make KEXEC_CORE, CRASH_DUMP are enabled independently from
> KEXEC or KEXEC_FILE. However, w/o KEXEC or KEXEC_FILE, the KEXEC_CORE
> code built in doesn't make any sense because no kernel loading or
> switching will happen to utilize the KEXEC_CORE code.
> ---------------------
> CONFIG_CRASH_CORE=y
> CONFIG_KEXEC_CORE=y
> CONFIG_CRASH_DUMP=y
> ---------------------
>
> In this case, what is worse, on arch sh and arm, KEXEC relies on MMU,
> while CRASH_DUMP can still be enabled when !MMU, then compiling error is
> seen as the lkp test robot reported in above link.
>
> ------arch/sh/Kconfig------
> config ARCH_SUPPORTS_KEXEC
> def_bool MMU
>
> config ARCH_SUPPORTS_CRASH_DUMP
> def_bool BROKEN_ON_SMP
> ---------------------------
>
> Changes:
> ===========
> 1, split out crash_reserve.c from crash_core.c;
> 2, split out vmcore_infoc. from crash_core.c;
> 3, move crash related codes in kexec_core.c into crash_core.c;
> 4, remove dependency of FA_DUMP on CRASH_DUMP;
> 5, clean up kdump related config items;
> 6, wrap up crash codes in crash related ifdefs on all 8 arch-es
> which support crash dumping, except of ppc;
>
> Achievement:
> ===========
> With above changes, I can rearrange the config item logic as below (the right
> item depends on or is selected by the left item):
>
> PROC_KCORE -----------> VMCORE_INFO
>
> |----------> VMCORE_INFO
> FA_DUMP----|
> |----------> CRASH_RESERVE
>
> ---->VMCORE_INFO
> /
> |---->CRASH_RESERVE
> KEXEC --| /|
> |--> KEXEC_CORE--> CRASH_DUMP-->/-|---->PROC_VMCORE
> KEXEC_FILE --| \ |
> \---->CRASH_HOTPLUG
>
>
> KEXEC --|
> |--> KEXEC_CORE (for kexec reboot only)
> KEXEC_FILE --|
>
> Test
> ========
> On all 8 architectures, including x86_64, arm64, s390x, sh, arm, mips,
> riscv, loongarch, I did below three cases of config item setting and
> building all passed. Take configs on x86_64 as exampmle here:
>
> (1) Both CONFIG_KEXEC and KEXEC_FILE is unset, then all kexec/kdump
> items are unset automatically:
> # Kexec and crash features
> # CONFIG_KEXEC is not set
> # CONFIG_KEXEC_FILE is not set
> # end of Kexec and crash features
>
> (2) set CONFIG_KEXEC_FILE and 'make olddefconfig':
> ---------------
> # Kexec and crash features
> CONFIG_CRASH_RESERVE=y
> CONFIG_VMCORE_INFO=y
> CONFIG_KEXEC_CORE=y
> CONFIG_KEXEC_FILE=y
> CONFIG_CRASH_DUMP=y
> CONFIG_CRASH_HOTPLUG=y
> CONFIG_CRASH_MAX_MEMORY_RANGES=8192
> # end of Kexec and crash features
> ---------------
>
> (3) unset CONFIG_CRASH_DUMP in case 2 and execute 'make olddefconfig':
> ------------------------
> # Kexec and crash features
> CONFIG_KEXEC_CORE=y
> CONFIG_KEXEC_FILE=y
> # end of Kexec and crash features
> ------------------------
>
> Note:
> For ppc, it needs investigation to make clear how to split out crash
> code in arch folder. Hope Hari and Pingfan can help have a look, see if
> it's doable. Now, I make it either have both kexec and crash enabled, or
> disable both of them altogether.
I am seeing a few build failures in my test matrix on next-20240125 that
appear to be caused by this series although I have not bisected. Some
reproduction steps:
$ curl -LSso .config https://git.alpinelinux.org/aports/plain/community/linux-edge/config-edge.armv7
$ make -skj"$(nproc)" ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- olddefconfig all
...
arm-linux-gnueabi-ld: arch/arm/kernel/machine_kexec.o: in function `arch_crash_save_vmcoreinfo':
machine_kexec.c:(.text+0x488): undefined reference to `vmcoreinfo_append_str'
...
$ curl -LSso .config https://github.com/archlinuxarm/PKGBUILDs/raw/master/core/linux-aarch64/config
$ make -skj"$(nproc)" ARCH=arm64 CROSS_COMPILE=aarch64-linux- olddefconfig all
...
aarch64-linux-ld: kernel/kexec_file.o: in function `kexec_walk_memblock.constprop.0':
kexec_file.c:(.text+0x314): undefined reference to `crashk_res'
aarch64-linux-ld: kernel/kexec_file.o: relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `crashk_res' which may bind externally can not be used when making a shared object; recompile with -fPIC
kexec_file.c:(.text+0x314): dangerous relocation: unsupported relocation
aarch64-linux-ld: kexec_file.c:(.text+0x318): undefined reference to `crashk_res'
aarch64-linux-ld: drivers/of/kexec.o: in function `of_kexec_alloc_and_setup_fdt':
kexec.c:(.text+0x580): undefined reference to `crashk_res'
aarch64-linux-ld: drivers/of/kexec.o: relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `crashk_res' which may bind externally can not be used when making a shared object; recompile with -fPIC
kexec.c:(.text+0x580): dangerous relocation: unsupported relocation
aarch64-linux-ld: kexec.c:(.text+0x584): undefined reference to `crashk_res'
aarch64-linux-ld: kexec.c:(.text+0x590): undefined reference to `crashk_res'
aarch64-linux-ld: kexec.c:(.text+0x5b0): undefined reference to `crashk_low_res'
aarch64-linux-ld: drivers/of/kexec.o: relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `crashk_low_res' which may bind externally can not be used when making a shared object; recompile with -fPIC
kexec.c:(.text+0x5b0): dangerous relocation: unsupported relocation
aarch64-linux-ld: kexec.c:(.text+0x5b4): undefined reference to `crashk_low_res'
aarch64-linux-ld: kexec.c:(.text+0x5c0): undefined reference to `crashk_low_res'
...
$ curl -LSso .config https://git.alpinelinux.org/aports/plain/community/linux-edge/config-edge.x86_64
$ make -skj"$(nproc)" ARCH=x86_64 CROSS_COMPILE=x86_64-linux- olddefconfig all
...
x86_64-linux-ld: arch/x86/xen/mmu_pv.o: in function `paddr_vmcoreinfo_note':
mmu_pv.c:(.text+0x3af3): undefined reference to `vmcoreinfo_note'
...
Cheers,
Nathan
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2024-01-26 4:56 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-24 5:12 [PATCH linux-next v3 00/14] Split crash out from kexec and clean up related config items Baoquan He
2024-01-24 5:12 ` [PATCH linux-next v3 01/14] kexec: split crashkernel reservation code out from crash_core.c Baoquan He
2024-01-28 1:28 ` Klara Modin
2024-01-29 1:57 ` Baoquan He
2024-01-24 5:12 ` [PATCH linux-next v3 02/14] crash: split vmcoreinfo exporting " Baoquan He
2024-03-25 8:24 ` Geert Uytterhoeven
2024-03-25 9:48 ` Baoquan He
2024-01-24 5:12 ` [PATCH linux-next v3 03/14] crash: remove dependency of FA_DUMP on CRASH_DUMP Baoquan He
2024-01-24 5:12 ` [PATCH linux-next v3 04/14] crash: split crash dumping code out from kexec_core.c Baoquan He
2024-01-24 5:12 ` [PATCH linux-next v3 05/14] crash: clean up kdump related config items Baoquan He
2024-08-22 7:33 ` John Paul Adrian Glaubitz
2024-08-22 9:17 ` Baoquan He
2024-08-22 9:37 ` John Paul Adrian Glaubitz
2024-08-23 0:04 ` Baoquan He
2024-08-23 0:41 ` Dave Vasilevsky
2024-08-23 1:58 ` Baoquan He
2024-08-23 7:16 ` John Paul Adrian Glaubitz
2024-08-23 11:58 ` Dave Vasilevsky
2024-08-23 12:05 ` Dave Vasilevsky
2024-01-24 5:12 ` [PATCH linux-next v3 06/14] x86, crash: wrap crash dumping code into crash related ifdefs Baoquan He
2024-01-24 23:02 ` Michael Kelley
2024-01-25 4:09 ` Baoquan He
2024-01-25 5:12 ` Michael Kelley
2024-01-25 9:17 ` Baoquan He
2024-01-25 15:30 ` Michael Kelley
2024-01-24 5:12 ` [PATCH linux-next v3 07/14] arm64, " Baoquan He
2024-01-24 5:12 ` [PATCH linux-next v3 08/14] ppc, crash: enforce KEXEC and KEXEC_FILE to select CRASH_DUMP Baoquan He
2024-01-24 5:12 ` [PATCH linux-next v3 09/14] s390, crash: wrap crash dumping code into crash related ifdefs Baoquan He
2024-01-24 5:12 ` [PATCH linux-next v3 10/14] sh, " Baoquan He
2024-01-24 8:13 ` John Paul Adrian Glaubitz
2024-01-24 14:38 ` Baoquan He
2024-01-24 5:12 ` [PATCH linux-next v3 11/14] mips, " Baoquan He
2024-01-24 5:12 ` [PATCH linux-next v3 12/14] riscv, " Baoquan He
2024-01-24 5:12 ` [PATCH linux-next v3 13/14] arm, " Baoquan He
2024-01-24 5:12 ` [PATCH linux-next v3 14/14] loongarch, " Baoquan He
2024-01-26 4:55 ` Nathan Chancellor [this message]
2024-01-26 6:07 ` [PATCH linux-next v3 00/14] Split crash out from kexec and clean up related config items Baoquan He
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240126045551.GA126645@dev-arch.thelio-3990X \
--to=nathan@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=bhe@redhat.com \
--cc=ebiederm@xmission.com \
--cc=hbathini@linux.ibm.com \
--cc=kexec@lists.infradead.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=linux-s390@vger.kernel.org \
--cc=linux-sh@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=loongarch@lists.linux.dev \
--cc=piliu@redhat.com \
--cc=viro@zeniv.linux.org.uk \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox