linux-parisc.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v6 00/14] refactor Kconfig to consolidate KEXEC and CRASH options
@ 2023-07-12 16:15 Eric DeVolder
  2023-07-12 16:15 ` [PATCH v6 01/14] kexec: consolidate kexec and crash options into kernel/Kconfig.kexec Eric DeVolder
                   ` (13 more replies)
  0 siblings, 14 replies; 17+ messages in thread
From: Eric DeVolder @ 2023-07-12 16:15 UTC (permalink / raw)
  To: linux, catalin.marinas, will, chenhuacai, geert, tsbogend,
	James.Bottomley, deller, ysato, dalias, glaubitz, tglx, mingo,
	bp, dave.hansen, x86, linux-kernel, linux-arm-kernel, linux-ia64,
	loongarch, linux-m68k, linux-mips, linux-parisc, linuxppc-dev,
	linux-riscv, linux-s390, linux-sh
  Cc: kernel, mpe, npiggin, christophe.leroy, paul.walmsley, palmer,
	aou, hca, gor, agordeev, borntraeger, svens, hpa, keescook,
	paulmck, peterz, frederic, akpm, ardb, samitolvanen,
	juerg.haefliger, arnd, rmk+kernel, linus.walleij,
	sebastian.reichel, rppt, kirill.shutemov, anshuman.khandual, ziy,
	masahiroy, ndesaulniers, mhiramat, ojeda, thunder.leizhen,
	xin3.li, tj, gregkh, tsi, bhe, hbathini, sourabhjain,
	eric.devolder, boris.ostrovsky, konrad.wilk

The Kconfig is refactored to consolidate KEXEC and CRASH options from
various arch/<arch>/Kconfig files into new file kernel/Kconfig.kexec.

The Kconfig.kexec is now a submenu titled "Kexec and crash features"
located under "General Setup".

The following options are impacted:

 - KEXEC
 - KEXEC_FILE
 - KEXEC_SIG
 - KEXEC_SIG_FORCE
 - KEXEC_IMAGE_VERIFY_SIG
 - KEXEC_BZIMAGE_VERIFY_SIG
 - KEXEC_JUMP
 - CRASH_DUMP

Over time, these options have been copied between Kconfig files and
are very similar to one another, but with slight differences.

The following architectures are impacted by the refactor (because of
use of one or more KEXEC/CRASH options):

 - arm
 - arm64
 - ia64
 - loongarch
 - m68k
 - mips
 - parisc
 - powerpc
 - riscv
 - s390
 - sh
 - x86 

More information:

In the patch series "crash: Kernel handling of CPU and memory hot
un/plug"

 https://lore.kernel.org/lkml/20230503224145.7405-1-eric.devolder@oracle.com/

the new kernel feature introduces the config option CRASH_HOTPLUG.

In reviewing, Thomas Gleixner requested that the new config option
not be placed in x86 Kconfig. Rather the option needs a generic/common
home. To Thomas' point, the KEXEC and CRASH options have largely been
duplicated in the various arch/<arch>/Kconfig files, with minor
differences. This kind of proliferation is to be avoid/stopped.

 https://lore.kernel.org/lkml/875y91yv63.ffs@tglx/

To that end, I have refactored the arch Kconfigs so as to consolidate
the various KEXEC and CRASH options. Generally speaking, this work has
the following themes:

- KEXEC and CRASH options are moved into new file kernel/Kconfig.kexec
  - These items from arch/Kconfig:
      CRASH_CORE KEXEC_CORE KEXEC_ELF HAVE_IMA_KEXEC
  - These items from arch/x86/Kconfig form the common options:
      KEXEC KEXEC_FILE KEXEC_SIG KEXEC_SIG_FORCE
      KEXEC_BZIMAGE_VERIFY_SIG KEXEC_JUMP CRASH_DUMP
  - These items from arch/arm64/Kconfig form the common options:
      KEXEC_IMAGE_VERIFY_SIG
  - The crash hotplug series appends CRASH_HOTPLUG to Kconfig.kexec
- The Kconfig.kexec is now a submenu titled "Kexec and crash features"
  and is now listed in "General Setup" submenu from init/Kconfig.
- To control the common options, each has a new ARCH_SUPPORTS_<option>
  option. These gateway options determine whether the common options
  options are valid for the architecture.
- To account for the slight differences in the original architecture
  coding of the common options, each now has a corresponding
  ARCH_SELECTS_<option> which are used to elicit the same side effects
  as the original arch/<arch>/Kconfig files for KEXEC and CRASH options.

An example, 'make menuconfig' illustrating the submenu:

  > General setup > Kexec and crash features
  [*] Enable kexec system call
  [*] Enable kexec file based system call
  [*]   Verify kernel signature during kexec_file_load() syscall
  [ ]     Require a valid signature in kexec_file_load() syscall
  [ ]     Enable bzImage signature verification support
  [*] kexec jump
  [*] kernel crash dumps
  [*]   Update the crash elfcorehdr on system configuration changes

In the process of consolidating the common options, I encountered
slight differences in the coding of these options in several of the
architectures. As a result, I settled on the following solution:

- Each of the common options has a 'depends on ARCH_SUPPORTS_<option>'
  statement. For example, the KEXEC_FILE option has a 'depends on
  ARCH_SUPPORTS_KEXEC_FILE' statement.

  This approach is needed on all common options so as to prevent
  options from appearing for architectures which previously did
  not allow/enable them. For example, arm supports KEXEC but not
  KEXEC_FILE. The arch/arm/Kconfig does not provide
  ARCH_SUPPORTS_KEXEC_FILE and so KEXEC_FILE and related options
  are not available to arm.

- The boolean ARCH_SUPPORTS_<option> in effect allows the arch to
  determine when the feature is allowed.  Archs which don't have the
  feature simply do not provide the corresponding ARCH_SUPPORTS_<option>.
  For each arch, where there previously were KEXEC and/or CRASH
  options, these have been replaced with the corresponding boolean
  ARCH_SUPPORTS_<option>, and an appropriate def_bool statement.

  For example, if the arch supports KEXEC_FILE, then the
  ARCH_SUPPORTS_KEXEC_FILE simply has a 'def_bool y'. This permits
  the KEXEC_FILE option to be available.

  If the arch has a 'depends on' statement in its original coding
  of the option, then that expression becomes part of the def_bool
  expression. For example, arm64 had:

  config KEXEC
    depends on PM_SLEEP_SMP

  and in this solution, this converts to:

  config ARCH_SUPPORTS_KEXEC
    def_bool PM_SLEEP_SMP


- In order to account for the architecture differences in the
  coding for the common options, the ARCH_SELECTS_<option> in the
  arch/<arch>/Kconfig is used. This option has a 'depends on
  <option>' statement to couple it to the main option, and from
  there can insert the differences from the common option and the
  arch original coding of that option.

  For example, a few archs enable CRYPTO and CRYTPO_SHA256 for
  KEXEC_FILE. These require a ARCH_SELECTS_KEXEC_FILE and
  'select CRYPTO' and 'select CRYPTO_SHA256' statements.

Illustrating the option relationships:

For each of the common KEXEC and CRASH options:
 ARCH_SUPPORTS_<option> <- <option> <- ARCH_SELECTS_<option>

 <option>                   # in Kconfig.kexec
 ARCH_SUPPORTS_<option>     # in arch/<arch>/Kconfig, as needed
 ARCH_SELECTS_<option>      # in arch/<arch>/Kconfig, as needed


For example, KEXEC:
 ARCH_SUPPORTS_KEXEC <- KEXEC <- ARCH_SELECTS_KEXEC

 KEXEC                      # in Kconfig.kexec
 ARCH_SUPPORTS_KEXEC        # in arch/<arch>/Kconfig, as needed
 ARCH_SELECTS_KEXEC         # in arch/<arch>/Kconfig, as needed


To summarize, the ARCH_SUPPORTS_<option> permits the <option> to be
enabled, and the ARCH_SELECTS_<option> handles side effects (ie.
select statements).

Examples:
A few examples to show the new strategy in action:

===== x86 (minus the help section) =====
Original:
 config KEXEC
    bool "kexec system call"
    select KEXEC_CORE

 config KEXEC_FILE
    bool "kexec file based system call"
    select KEXEC_CORE
    select HAVE_IMA_KEXEC if IMA
    depends on X86_64
    depends on CRYPTO=y
    depends on CRYPTO_SHA256=y

 config ARCH_HAS_KEXEC_PURGATORY
    def_bool KEXEC_FILE

 config KEXEC_SIG
    bool "Verify kernel signature during kexec_file_load() syscall"
    depends on KEXEC_FILE

 config KEXEC_SIG_FORCE
    bool "Require a valid signature in kexec_file_load() syscall"
    depends on KEXEC_SIG

 config KEXEC_BZIMAGE_VERIFY_SIG
    bool "Enable bzImage signature verification support"
    depends on KEXEC_SIG
    depends on SIGNED_PE_FILE_VERIFICATION
    select SYSTEM_TRUSTED_KEYRING

 config CRASH_DUMP
    bool "kernel crash dumps"
    depends on X86_64 || (X86_32 && HIGHMEM)

 config KEXEC_JUMP
    bool "kexec jump"
    depends on KEXEC && HIBERNATION
    help

becomes...
New:
config ARCH_SUPPORTS_KEXEC
    def_bool y

config ARCH_SUPPORTS_KEXEC_FILE
    def_bool X86_64 && CRYPTO && CRYPTO_SHA256

config ARCH_SELECTS_KEXEC_FILE
    def_bool y
    depends on KEXEC_FILE
    select HAVE_IMA_KEXEC if IMA

config ARCH_SUPPORTS_KEXEC_PURGATORY
    def_bool KEXEC_FILE

config ARCH_SUPPORTS_KEXEC_SIG
    def_bool y

config ARCH_SUPPORTS_KEXEC_SIG_FORCE
    def_bool y

config ARCH_SUPPORTS_KEXEC_BZIMAGE_VERIFY_SIG
    def_bool y

config ARCH_SUPPORTS_KEXEC_JUMP
    def_bool y

config ARCH_SUPPORTS_CRASH_DUMP
    def_bool X86_64 || (X86_32 && HIGHMEM)


===== powerpc (minus the help section) =====
Original:
 config KEXEC
    bool "kexec system call"
    depends on PPC_BOOK3S || PPC_E500 || (44x && !SMP)
    select KEXEC_CORE

 config KEXEC_FILE
    bool "kexec file based system call"
    select KEXEC_CORE
    select HAVE_IMA_KEXEC if IMA
    select KEXEC_ELF
    depends on PPC64
    depends on CRYPTO=y
    depends on CRYPTO_SHA256=y

 config ARCH_HAS_KEXEC_PURGATORY
    def_bool KEXEC_FILE

 config CRASH_DUMP
    bool "Build a dump capture kernel"
    depends on PPC64 || PPC_BOOK3S_32 || PPC_85xx || (44x && !SMP)
    select RELOCATABLE if PPC64 || 44x || PPC_85xx

becomes...
New:
config ARCH_SUPPORTS_KEXEC
    def_bool PPC_BOOK3S || PPC_E500 || (44x && !SMP)

config ARCH_SUPPORTS_KEXEC_FILE
    def_bool PPC64 && CRYPTO=y && CRYPTO_SHA256=y

config ARCH_SUPPORTS_KEXEC_PURGATORY
    def_bool KEXEC_FILE

config ARCH_SELECTS_KEXEC_FILE
    def_bool y
    depends on KEXEC_FILE
    select KEXEC_ELF
    select HAVE_IMA_KEXEC if IMA

config ARCH_SUPPORTS_CRASH_DUMP
    def_bool PPC64 || PPC_BOOK3S_32 || PPC_85xx || (44x && !SMP)

config ARCH_SELECTS_CRASH_DUMP
    def_bool y
    depends on CRASH_DUMP
    select RELOCATABLE if PPC64 || 44x || PPC_85xx


Testing Approach and Results

There are 388 config files in the arch/<arch>/configs directories.
For each of these config files, a .config is generated both before and
after this Kconfig series, and checked for equivalence. This approach
allows for a rather rapid check of all architectures and a wide
variety of configs wrt/ KEXEC and CRASH, and avoids requiring
compiling for all architectures and running kernels and run-time
testing.

For each config file, the olddefconfig, allnoconfig and allyesconfig
targets are utilized. In testing the randconfig has revealed problems
as well, but is not used in the before and after equivalence check
since one can not generate the "same" .config for before and after,
even if using the same KCONFIG_SEED since the option list is
different.

As such, the following script steps compare the before and after
of 'make olddefconfig'. The new symbols introduced by this series
are filtered out, but otherwise the config files are PASS only if
they were equivalent, and FAIL otherwise.

The script performs the test by doing the following:

 # Obtain the "golden" .config output for given config file
 # Reset test sandbox
 git checkout master
 git branch -D test_Kconfig
 git checkout -B test_Kconfig master
 make distclean
 # Write out updated config
 cp -f <config file> .config
 make ARCH=<arch> olddefconfig
 # Track each item in .config, LHSB is "golden"
 scoreboard .config 

 # Obtain the "changed" .config output for given config file
 # Reset test sandbox
 make distclean
 # Apply this Kconfig series
 git am <this Kconfig series>
 # Write out updated config
 cp -f <config file> .config
 make ARCH=<arch> olddefconfig
 # Track each item in .config, RHSB is "changed"
 scoreboard .config 

 # Determine test result
 # Filter-out new symbols introduced by this series
 # Filter-out symbol=n which not in either scoreboard
 # Compare LHSB "golden" and RHSB "changed" scoreboards and issue PASS/FAIL

The script was instrumental during the refactoring of Kconfig as it
continually revealed problems. The end result being that the solution
presented in this series passes all configs as checked by the script,
with the following exceptions:

- arch/ia64/configs/zx1_config with olddefconfig
  This config file has:
  # CONFIG_KEXEC is not set
  CONFIG_CRASH_DUMP=y
  and this refactor now couples KEXEC to CRASH_DUMP, so it is not
  possible to enable CRASH_DUMP without KEXEC.

- arch/sh/configs/* with allyesconfig
  The arch/sh/Kconfig codes CRASH_DUMP as dependent upon BROKEN_ON_MMU
  (which clearly is not meant to be set). This symbol is not provided
  but with the allyesconfig it is set to yes which enables CRASH_DUMP.
  But KEXEC is coded as dependent upon MMU, and is set to no in
  arch/sh/mm/Kconfig, so KEXEC is not enabled.
  This refactor now couples KEXEC to CRASH_DUMP, so it is not
  possible to enable CRASH_DUMP without KEXEC.

While the above exceptions are not equivalent to their original,
the config file produced is valid (and in fact better wrt/ CRASH_DUMP
handling).

Regards,
eric

---
v6: 12jul2023
 - More cycles with randconfig has revealed problems relating to
   MODULE_SIG_FORMAT/SYSTEM_DATA_VERIFICATION on s390. This version
   solves the problem by placing MODULE_SIG_FORMAT on the
   ARCH_SUPPORTS_KEXEC_SIG def_bool statement, similar to original.
 - Added patch to rename ARCH_HAS_KEXEC_PURGATORY to
   ARCH_SUPPORTS_KEXEC_PURGATORY to follow convention agreed upon
   since v2.
 - Re-run regressions locally including failing randconfig config
   files reported.

v5: 6jul2023
 https://lore.kernel.org/lkml/20230706222027.189117-1-eric.devolder@oracle.com/
 - Filled out all common options with a 'depends on ARCH_SUPPORTS_
   <option>' and provided it in the needed archs. Result of testing
   with allnoconfig and allyesconfig.
 - Added 'depends on ARCH_SUPPORTS_KEXEC' to CRASH_DUMP, per Arnd
   Bergmann.
 - Investigated fails revealed by Andrew Morton's machinery, and
   spot tested with this solution.

v4: 5jul2023
 https://lore.kernel.org/lkml/20230705142004.3605799-1-eric.devolder@oracle.com/
 - Corrected conversion issue with riscv, per Conor Dooley.
 - Andrew Mortons's akpm test machinery found a problem with config
   files generated by randconfig. The problem existed prior to this
   series and manifests because most arch/<arch>/Kconfig CRASH_DUMP
   does not have any dependencies on KEXEC. As a result, randconfig
   produces a config file enabling CRASH_DUMP but not KEXEC, which
   leads to compile/link-time problems. Andrew requested closing
   this hole. To that end 'select KEXEC' has been added to CRASH_DUMP.
   This behavior pre-existed for arm arm64 ia64 loongarch mips powerpc
   riscv sh and x86.
 - Applied Acked-by's from:
   s390: Alexander Gordeev <agordeev@linux.ibm.com>

v3: 26jun2023
 https://lore.kernel.org/lkml/20230626161332.183214-1-eric.devolder@oracle.com/
 - Rebased onto 6.4.0
 - Reworded s390 commit message to clarify MODULE_SIG_FORMAT,
   per Alexander Gordeev
 - Applied Acked-by's from:
   m68k: Geert Uytterhoeven <geert@linux-m68k.org>
   mips: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
   sh: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>

v2: 19jun2023
 https://lore.kernel.org/lkml/20230619145801.1064716-1-eric.devolder@oracle.com/
 - The ARCH_HAS_ and ARCH_SUPPORTS_ combination was found to be
   too similar/confusing. Renamed these two new options as such:
   ARCH_HAS_<option> ---> ARCH_SUPPORTS_<option>
   ARCH_SUPPORTS_<option> ---> ARCH_SELECTS_<option>
   Per Kees Cook, Michael Ellerman
   NOTE: ARCH_HAS_KEXEC_PURGATORY was left as-is, as that is what
   it is prior to this series.
   Updated this cover letter to reflect the same.
 - Some minor cleaning up of the help sections, per Zhen Lei and
   Alexander Gordeev.
 - Removed the MODULE_SIG_FORMAT dependency from KEXEC_SIG in
   kernel/Kconfig.kexec. Only s390 had it prior to this series.
   See also commit message in
   "s390/kexec: refactor for kernel/Kconfig.kexec"
 - Added to Kconfig.kexec the KEXEC_IMAGE_VERIFY_SIG from arm64,
   per Zhen Lei.
 - Fixed the powerpc ARCH_SUPPORTS_KEXEC_FILE conversion, per
   Michael Ellerman.
   
v1: 12jun2023
 https://lore.kernel.org/lkml/20230612172805.681179-1-eric.devolder@oracle.com/
 - Initial
 - Based on 6.4.0-rc6

---

Eric DeVolder (14):
  kexec: consolidate kexec and crash options into kernel/Kconfig.kexec
  x86/kexec: refactor for kernel/Kconfig.kexec
  arm/kexec: refactor for kernel/Kconfig.kexec
  ia64/kexec: refactor for kernel/Kconfig.kexec
  arm64/kexec: refactor for kernel/Kconfig.kexec
  loongarch/kexec: refactor for kernel/Kconfig.kexec
  m68k/kexec: refactor for kernel/Kconfig.kexec
  mips/kexec: refactor for kernel/Kconfig.kexec
  parisc/kexec: refactor for kernel/Kconfig.kexec
  powerpc/kexec: refactor for kernel/Kconfig.kexec
  riscv/kexec: refactor for kernel/Kconfig.kexec
  s390/kexec: refactor for kernel/Kconfig.kexec
  sh/kexec: refactor for kernel/Kconfig.kexec
  kexec: rename ARCH_HAS_KEXEC_PURGATORY

 arch/Kconfig                  |  13 ----
 arch/arm/Kconfig              |  29 ++-------
 arch/arm64/Kconfig            |  64 +++++--------------
 arch/ia64/Kconfig             |  28 ++------
 arch/loongarch/Kconfig        |  26 ++------
 arch/m68k/Kconfig             |  19 +-----
 arch/mips/Kconfig             |  32 ++--------
 arch/parisc/Kconfig           |  34 ++++------
 arch/powerpc/Kconfig          |  57 ++++++-----------
 arch/riscv/Kbuild             |   2 +-
 arch/riscv/Kconfig            |  46 ++++----------
 arch/riscv/kernel/elf_kexec.c |   4 +-
 arch/s390/Kbuild              |   2 +-
 arch/s390/Kconfig             |  69 +++++++-------------
 arch/sh/Kconfig               |  46 +++-----------
 arch/x86/Kconfig              |  92 ++++++---------------------
 init/Kconfig                  |   2 +
 kernel/Kconfig.kexec          | 116 ++++++++++++++++++++++++++++++++++
 kernel/kexec_file.c           |   6 +-
 19 files changed, 257 insertions(+), 430 deletions(-)
 create mode 100644 kernel/Kconfig.kexec

-- 
2.31.1


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH v6 01/14] kexec: consolidate kexec and crash options into kernel/Kconfig.kexec
  2023-07-12 16:15 [PATCH v6 00/14] refactor Kconfig to consolidate KEXEC and CRASH options Eric DeVolder
@ 2023-07-12 16:15 ` Eric DeVolder
  2023-07-12 16:15 ` [PATCH v6 02/14] x86/kexec: refactor for kernel/Kconfig.kexec Eric DeVolder
                   ` (12 subsequent siblings)
  13 siblings, 0 replies; 17+ messages in thread
From: Eric DeVolder @ 2023-07-12 16:15 UTC (permalink / raw)
  To: linux, catalin.marinas, will, chenhuacai, geert, tsbogend,
	James.Bottomley, deller, ysato, dalias, glaubitz, tglx, mingo,
	bp, dave.hansen, x86, linux-kernel, linux-arm-kernel, linux-ia64,
	loongarch, linux-m68k, linux-mips, linux-parisc, linuxppc-dev,
	linux-riscv, linux-s390, linux-sh
  Cc: kernel, mpe, npiggin, christophe.leroy, paul.walmsley, palmer,
	aou, hca, gor, agordeev, borntraeger, svens, hpa, keescook,
	paulmck, peterz, frederic, akpm, ardb, samitolvanen,
	juerg.haefliger, arnd, rmk+kernel, linus.walleij,
	sebastian.reichel, rppt, kirill.shutemov, anshuman.khandual, ziy,
	masahiroy, ndesaulniers, mhiramat, ojeda, thunder.leizhen,
	xin3.li, tj, gregkh, tsi, bhe, hbathini, sourabhjain,
	eric.devolder, boris.ostrovsky, konrad.wilk

The config options for kexec and crash features are consolidated
into new file kernel/Kconfig.kexec. Under the "General Setup" submenu
is a new submenu "Kexec and crash handling". All the kexec and
crash options that were once in the arch-dependent submenu "Processor
type and features" are now consolidated in the new submenu.

The following options are impacted:

 - KEXEC
 - KEXEC_FILE
 - KEXEC_SIG
 - KEXEC_SIG_FORCE
 - KEXEC_BZIMAGE_VERIFY_SIG
 - KEXEC_JUMP
 - CRASH_DUMP

The three main options are KEXEC, KEXEC_FILE and CRASH_DUMP.

Architectures specify support of certain KEXEC and CRASH features with
similarly named new ARCH_SUPPORTS_<option> config options.

Architectures can utilize the new ARCH_SELECTS_<option> config
options to specify additional components when <option> is enabled.

To summarize, the ARCH_SUPPORTS_<option> permits the <option> to be
enabled, and the ARCH_SELECTS_<option> handles side effects (ie.
select statements).

Signed-off-by: Eric DeVolder <eric.devolder@oracle.com>
---
 arch/Kconfig         |  13 -----
 init/Kconfig         |   2 +
 kernel/Kconfig.kexec | 116 +++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 118 insertions(+), 13 deletions(-)
 create mode 100644 kernel/Kconfig.kexec

diff --git a/arch/Kconfig b/arch/Kconfig
index aff2746c8af2..b2872e9d3760 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -11,19 +11,6 @@ source "arch/$(SRCARCH)/Kconfig"
 
 menu "General architecture-dependent options"
 
-config CRASH_CORE
-	bool
-
-config KEXEC_CORE
-	select CRASH_CORE
-	bool
-
-config KEXEC_ELF
-	bool
-
-config HAVE_IMA_KEXEC
-	bool
-
 config ARCH_HAS_SUBPAGE_FAULTS
 	bool
 	help
diff --git a/init/Kconfig b/init/Kconfig
index f7f65af4ee12..639e8a3363c3 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -1927,6 +1927,8 @@ config BINDGEN_VERSION_TEXT
 config TRACEPOINTS
 	bool
 
+source "kernel/Kconfig.kexec"
+
 endmenu		# General setup
 
 source "arch/Kconfig"
diff --git a/kernel/Kconfig.kexec b/kernel/Kconfig.kexec
new file mode 100644
index 000000000000..ff72e45cfaef
--- /dev/null
+++ b/kernel/Kconfig.kexec
@@ -0,0 +1,116 @@
+# SPDX-License-Identifier: GPL-2.0-only
+
+menu "Kexec and crash features"
+
+config CRASH_CORE
+	bool
+
+config KEXEC_CORE
+	select CRASH_CORE
+	bool
+
+config KEXEC_ELF
+	bool
+
+config HAVE_IMA_KEXEC
+	bool
+
+config KEXEC
+	bool "Enable kexec system call"
+	default ARCH_DEFAULT_KEXEC
+	depends on ARCH_SUPPORTS_KEXEC
+	select KEXEC_CORE
+	help
+	  kexec is a system call that implements the ability to shutdown your
+	  current kernel, and to start another kernel. It is like a reboot
+	  but it is independent of the system firmware. And like a reboot
+	  you can start any kernel with it, not just Linux.
+
+	  The name comes from the similarity to the exec system call.
+
+	  It is an ongoing process to be certain the hardware in a machine
+	  is properly shutdown, so do not be surprised if this code does not
+	  initially work for you. As of this writing the exact hardware
+	  interface is strongly in flux, so no good recommendation can be
+	  made.
+
+config KEXEC_FILE
+	bool "Enable kexec file based system call"
+	depends on ARCH_SUPPORTS_KEXEC_FILE
+	select KEXEC_CORE
+	help
+	  This is new version of kexec system call. This system call is
+	  file based and takes file descriptors as system call argument
+	  for kernel and initramfs as opposed to list of segments as
+	  accepted by kexec system call.
+
+config KEXEC_SIG
+	bool "Verify kernel signature during kexec_file_load() syscall"
+	depends on ARCH_SUPPORTS_KEXEC_SIG
+	depends on KEXEC_FILE
+	help
+	  This option makes the kexec_file_load() syscall check for a valid
+	  signature of the kernel image. The image can still be loaded without
+	  a valid signature unless you also enable KEXEC_SIG_FORCE, though if
+	  there's a signature that we can check, then it must be valid.
+
+	  In addition to this option, you need to enable signature
+	  verification for the corresponding kernel image type being
+	  loaded in order for this to work.
+
+config KEXEC_SIG_FORCE
+	bool "Require a valid signature in kexec_file_load() syscall"
+	depends on ARCH_SUPPORTS_KEXEC_SIG_FORCE
+	depends on KEXEC_SIG
+	help
+	  This option makes kernel signature verification mandatory for
+	  the kexec_file_load() syscall.
+
+config KEXEC_IMAGE_VERIFY_SIG
+	bool "Enable Image signature verification support (ARM)"
+	default ARCH_DEFAULT_KEXEC_IMAGE_VERIFY_SIG
+	depends on ARCH_SUPPORTS_KEXEC_IMAGE_VERIFY_SIG
+	depends on KEXEC_SIG
+	depends on EFI && SIGNED_PE_FILE_VERIFICATION
+	help
+	  Enable Image signature verification support.
+
+config KEXEC_BZIMAGE_VERIFY_SIG
+	bool "Enable bzImage signature verification support"
+	depends on ARCH_SUPPORTS_KEXEC_BZIMAGE_VERIFY_SIG
+	depends on KEXEC_SIG
+	depends on SIGNED_PE_FILE_VERIFICATION
+	select SYSTEM_TRUSTED_KEYRING
+	help
+	  Enable bzImage signature verification support.
+
+config KEXEC_JUMP
+	bool "kexec jump"
+	depends on ARCH_SUPPORTS_KEXEC_JUMP
+	depends on KEXEC && HIBERNATION
+	help
+	  Jump between original kernel and kexeced kernel and invoke
+	  code in physical address mode via KEXEC
+
+config CRASH_DUMP
+	bool "kernel crash dumps"
+	depends on ARCH_SUPPORTS_CRASH_DUMP
+	depends on ARCH_SUPPORTS_KEXEC
+	select CRASH_CORE
+	select KEXEC_CORE
+	select KEXEC
+	help
+	  Generate crash dump after being started by kexec.
+	  This should be normally only set in special crash dump kernels
+	  which are loaded in the main kernel with kexec-tools into
+	  a specially reserved region and then later executed after
+	  a crash by kdump/kexec. The crash dump kernel must be compiled
+	  to a memory address not used by the main kernel or BIOS using
+	  PHYSICAL_START, or it must be built as a relocatable image
+	  (CONFIG_RELOCATABLE=y).
+	  For more details see Documentation/admin-guide/kdump/kdump.rst
+
+	  For s390, this option also enables zfcpdump.
+	  See also <file:Documentation/s390/zfcpdump.rst>
+
+endmenu
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v6 02/14] x86/kexec: refactor for kernel/Kconfig.kexec
  2023-07-12 16:15 [PATCH v6 00/14] refactor Kconfig to consolidate KEXEC and CRASH options Eric DeVolder
  2023-07-12 16:15 ` [PATCH v6 01/14] kexec: consolidate kexec and crash options into kernel/Kconfig.kexec Eric DeVolder
@ 2023-07-12 16:15 ` Eric DeVolder
  2023-07-13 11:13   ` Leizhen (ThunderTown)
  2023-07-12 16:15 ` [PATCH v6 03/14] arm/kexec: " Eric DeVolder
                   ` (11 subsequent siblings)
  13 siblings, 1 reply; 17+ messages in thread
From: Eric DeVolder @ 2023-07-12 16:15 UTC (permalink / raw)
  To: linux, catalin.marinas, will, chenhuacai, geert, tsbogend,
	James.Bottomley, deller, ysato, dalias, glaubitz, tglx, mingo,
	bp, dave.hansen, x86, linux-kernel, linux-arm-kernel, linux-ia64,
	loongarch, linux-m68k, linux-mips, linux-parisc, linuxppc-dev,
	linux-riscv, linux-s390, linux-sh
  Cc: kernel, mpe, npiggin, christophe.leroy, paul.walmsley, palmer,
	aou, hca, gor, agordeev, borntraeger, svens, hpa, keescook,
	paulmck, peterz, frederic, akpm, ardb, samitolvanen,
	juerg.haefliger, arnd, rmk+kernel, linus.walleij,
	sebastian.reichel, rppt, kirill.shutemov, anshuman.khandual, ziy,
	masahiroy, ndesaulniers, mhiramat, ojeda, thunder.leizhen,
	xin3.li, tj, gregkh, tsi, bhe, hbathini, sourabhjain,
	eric.devolder, boris.ostrovsky, konrad.wilk

The kexec and crash kernel options are provided in the common
kernel/Kconfig.kexec. Utilize the common options and provide
the ARCH_SUPPORTS_ and ARCH_SELECTS_ entries to recreate the
equivalent set of KEXEC and CRASH options.

Signed-off-by: Eric DeVolder <eric.devolder@oracle.com>
---
 arch/x86/Kconfig | 92 ++++++++++--------------------------------------
 1 file changed, 19 insertions(+), 73 deletions(-)

diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 7422db409770..9767a343f7c2 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -2040,88 +2040,34 @@ config EFI_RUNTIME_MAP
 
 source "kernel/Kconfig.hz"
 
-config KEXEC
-	bool "kexec system call"
-	select KEXEC_CORE
-	help
-	  kexec is a system call that implements the ability to shutdown your
-	  current kernel, and to start another kernel.  It is like a reboot
-	  but it is independent of the system firmware.   And like a reboot
-	  you can start any kernel with it, not just Linux.
-
-	  The name comes from the similarity to the exec system call.
-
-	  It is an ongoing process to be certain the hardware in a machine
-	  is properly shutdown, so do not be surprised if this code does not
-	  initially work for you.  As of this writing the exact hardware
-	  interface is strongly in flux, so no good recommendation can be
-	  made.
-
-config KEXEC_FILE
-	bool "kexec file based system call"
-	select KEXEC_CORE
-	select HAVE_IMA_KEXEC if IMA
-	depends on X86_64
-	depends on CRYPTO=y
-	depends on CRYPTO_SHA256=y
-	help
-	  This is new version of kexec system call. This system call is
-	  file based and takes file descriptors as system call argument
-	  for kernel and initramfs as opposed to list of segments as
-	  accepted by previous system call.
+config ARCH_SUPPORTS_KEXEC
+	def_bool y
 
-config ARCH_HAS_KEXEC_PURGATORY
-	def_bool KEXEC_FILE
+config ARCH_SUPPORTS_KEXEC_FILE
+	def_bool X86_64 && CRYPTO && CRYPTO_SHA256
 
-config KEXEC_SIG
-	bool "Verify kernel signature during kexec_file_load() syscall"
+config ARCH_SELECTS_KEXEC_FILE
+	def_bool y
 	depends on KEXEC_FILE
-	help
+	select HAVE_IMA_KEXEC if IMA
 
-	  This option makes the kexec_file_load() syscall check for a valid
-	  signature of the kernel image.  The image can still be loaded without
-	  a valid signature unless you also enable KEXEC_SIG_FORCE, though if
-	  there's a signature that we can check, then it must be valid.
+config ARCH_HAS_KEXEC_PURGATORY
+	def_bool KEXEC_FILE
 
-	  In addition to this option, you need to enable signature
-	  verification for the corresponding kernel image type being
-	  loaded in order for this to work.
+config ARCH_SUPPORTS_KEXEC_SIG
+	def_bool y
 
-config KEXEC_SIG_FORCE
-	bool "Require a valid signature in kexec_file_load() syscall"
-	depends on KEXEC_SIG
-	help
-	  This option makes kernel signature verification mandatory for
-	  the kexec_file_load() syscall.
+config ARCH_SUPPORTS_KEXEC_SIG_FORCE
+	def_bool y
 
-config KEXEC_BZIMAGE_VERIFY_SIG
-	bool "Enable bzImage signature verification support"
-	depends on KEXEC_SIG
-	depends on SIGNED_PE_FILE_VERIFICATION
-	select SYSTEM_TRUSTED_KEYRING
-	help
-	  Enable bzImage signature verification support.
+config ARCH_SUPPORTS_KEXEC_BZIMAGE_VERIFY_SIG
+	def_bool y
 
-config CRASH_DUMP
-	bool "kernel crash dumps"
-	depends on X86_64 || (X86_32 && HIGHMEM)
-	help
-	  Generate crash dump after being started by kexec.
-	  This should be normally only set in special crash dump kernels
-	  which are loaded in the main kernel with kexec-tools into
-	  a specially reserved region and then later executed after
-	  a crash by kdump/kexec. The crash dump kernel must be compiled
-	  to a memory address not used by the main kernel or BIOS using
-	  PHYSICAL_START, or it must be built as a relocatable image
-	  (CONFIG_RELOCATABLE=y).
-	  For more details see Documentation/admin-guide/kdump/kdump.rst
+config ARCH_SUPPORTS_KEXEC_JUMP
+	def_bool y
 
-config KEXEC_JUMP
-	bool "kexec jump"
-	depends on KEXEC && HIBERNATION
-	help
-	  Jump between original kernel and kexeced kernel and invoke
-	  code in physical address mode via KEXEC
+config ARCH_SUPPORTS_CRASH_DUMP
+	def_bool X86_64 || (X86_32 && HIGHMEM)
 
 config PHYSICAL_START
 	hex "Physical address where the kernel is loaded" if (EXPERT || CRASH_DUMP)
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v6 03/14] arm/kexec: refactor for kernel/Kconfig.kexec
  2023-07-12 16:15 [PATCH v6 00/14] refactor Kconfig to consolidate KEXEC and CRASH options Eric DeVolder
  2023-07-12 16:15 ` [PATCH v6 01/14] kexec: consolidate kexec and crash options into kernel/Kconfig.kexec Eric DeVolder
  2023-07-12 16:15 ` [PATCH v6 02/14] x86/kexec: refactor for kernel/Kconfig.kexec Eric DeVolder
@ 2023-07-12 16:15 ` Eric DeVolder
  2023-07-12 16:15 ` [PATCH v6 04/14] ia64/kexec: " Eric DeVolder
                   ` (10 subsequent siblings)
  13 siblings, 0 replies; 17+ messages in thread
From: Eric DeVolder @ 2023-07-12 16:15 UTC (permalink / raw)
  To: linux, catalin.marinas, will, chenhuacai, geert, tsbogend,
	James.Bottomley, deller, ysato, dalias, glaubitz, tglx, mingo,
	bp, dave.hansen, x86, linux-kernel, linux-arm-kernel, linux-ia64,
	loongarch, linux-m68k, linux-mips, linux-parisc, linuxppc-dev,
	linux-riscv, linux-s390, linux-sh
  Cc: kernel, mpe, npiggin, christophe.leroy, paul.walmsley, palmer,
	aou, hca, gor, agordeev, borntraeger, svens, hpa, keescook,
	paulmck, peterz, frederic, akpm, ardb, samitolvanen,
	juerg.haefliger, arnd, rmk+kernel, linus.walleij,
	sebastian.reichel, rppt, kirill.shutemov, anshuman.khandual, ziy,
	masahiroy, ndesaulniers, mhiramat, ojeda, thunder.leizhen,
	xin3.li, tj, gregkh, tsi, bhe, hbathini, sourabhjain,
	eric.devolder, boris.ostrovsky, konrad.wilk

The kexec and crash kernel options are provided in the common
kernel/Kconfig.kexec. Utilize the common options and provide
the ARCH_SUPPORTS_ and ARCH_SELECTS_ entries to recreate the
equivalent set of KEXEC and CRASH options.

Signed-off-by: Eric DeVolder <eric.devolder@oracle.com>
---
 arch/arm/Kconfig | 29 ++++-------------------------
 1 file changed, 4 insertions(+), 25 deletions(-)

diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 7a27550ff3c1..1a6a6eb48a15 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -1645,20 +1645,8 @@ config XIP_DEFLATED_DATA
 	  copied, saving some precious ROM space. A possible drawback is a
 	  slightly longer boot delay.
 
-config KEXEC
-	bool "Kexec system call (EXPERIMENTAL)"
-	depends on (!SMP || PM_SLEEP_SMP)
-	depends on MMU
-	select KEXEC_CORE
-	help
-	  kexec is a system call that implements the ability to shutdown your
-	  current kernel, and to start another kernel.  It is like a reboot
-	  but it is independent of the system firmware.   And like a reboot
-	  you can start any kernel with it, not just Linux.
-
-	  It is an ongoing process to be certain the hardware in a machine
-	  is properly shutdown, so do not be surprised if this code does not
-	  initially work for you.
+config ARCH_SUPPORTS_KEXEC
+	def_bool (!SMP || PM_SLEEP_SMP) && MMU
 
 config ATAGS_PROC
 	bool "Export atags in procfs"
@@ -1668,17 +1656,8 @@ config ATAGS_PROC
 	  Should the atags used to boot the kernel be exported in an "atags"
 	  file in procfs. Useful with kexec.
 
-config CRASH_DUMP
-	bool "Build kdump crash kernel (EXPERIMENTAL)"
-	help
-	  Generate crash dump after being started by kexec. This should
-	  be normally only set in special crash dump kernels which are
-	  loaded in the main kernel with kexec-tools into a specially
-	  reserved region and then later executed after a crash by
-	  kdump/kexec. The crash dump kernel must be compiled to a
-	  memory address not used by the main kernel
-
-	  For more details see Documentation/admin-guide/kdump/kdump.rst
+config ARCH_SUPPORTS_CRASH_DUMP
+	def_bool y
 
 config AUTO_ZRELADDR
 	bool "Auto calculation of the decompressed kernel image address" if !ARCH_MULTIPLATFORM
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v6 04/14] ia64/kexec: refactor for kernel/Kconfig.kexec
  2023-07-12 16:15 [PATCH v6 00/14] refactor Kconfig to consolidate KEXEC and CRASH options Eric DeVolder
                   ` (2 preceding siblings ...)
  2023-07-12 16:15 ` [PATCH v6 03/14] arm/kexec: " Eric DeVolder
@ 2023-07-12 16:15 ` Eric DeVolder
  2023-07-12 16:15 ` [PATCH v6 05/14] arm64/kexec: " Eric DeVolder
                   ` (9 subsequent siblings)
  13 siblings, 0 replies; 17+ messages in thread
From: Eric DeVolder @ 2023-07-12 16:15 UTC (permalink / raw)
  To: linux, catalin.marinas, will, chenhuacai, geert, tsbogend,
	James.Bottomley, deller, ysato, dalias, glaubitz, tglx, mingo,
	bp, dave.hansen, x86, linux-kernel, linux-arm-kernel, linux-ia64,
	loongarch, linux-m68k, linux-mips, linux-parisc, linuxppc-dev,
	linux-riscv, linux-s390, linux-sh
  Cc: kernel, mpe, npiggin, christophe.leroy, paul.walmsley, palmer,
	aou, hca, gor, agordeev, borntraeger, svens, hpa, keescook,
	paulmck, peterz, frederic, akpm, ardb, samitolvanen,
	juerg.haefliger, arnd, rmk+kernel, linus.walleij,
	sebastian.reichel, rppt, kirill.shutemov, anshuman.khandual, ziy,
	masahiroy, ndesaulniers, mhiramat, ojeda, thunder.leizhen,
	xin3.li, tj, gregkh, tsi, bhe, hbathini, sourabhjain,
	eric.devolder, boris.ostrovsky, konrad.wilk

The kexec and crash kernel options are provided in the common
kernel/Kconfig.kexec. Utilize the common options and provide
the ARCH_SUPPORTS_ and ARCH_SELECTS_ entries to recreate the
equivalent set of KEXEC and CRASH options.

Signed-off-by: Eric DeVolder <eric.devolder@oracle.com>
---
 arch/ia64/Kconfig | 28 +++++-----------------------
 1 file changed, 5 insertions(+), 23 deletions(-)

diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig
index 2cd93e6bf0fe..88382f105301 100644
--- a/arch/ia64/Kconfig
+++ b/arch/ia64/Kconfig
@@ -361,31 +361,13 @@ config IA64_HP_AML_NFW
 	  the "force" module parameter, e.g., with the "aml_nfw.force"
 	  kernel command line option.
 
-config KEXEC
-	bool "kexec system call"
-	depends on !SMP || HOTPLUG_CPU
-	select KEXEC_CORE
-	help
-	  kexec is a system call that implements the ability to shutdown your
-	  current kernel, and to start another kernel.  It is like a reboot
-	  but it is independent of the system firmware.   And like a reboot
-	  you can start any kernel with it, not just Linux.
-
-	  The name comes from the similarity to the exec system call.
-
-	  It is an ongoing process to be certain the hardware in a machine
-	  is properly shutdown, so do not be surprised if this code does not
-	  initially work for you.  As of this writing the exact hardware
-	  interface is strongly in flux, so no good recommendation can be
-	  made.
+endmenu
 
-config CRASH_DUMP
-	  bool "kernel crash dumps"
-	  depends on IA64_MCA_RECOVERY && (!SMP || HOTPLUG_CPU)
-	  help
-	    Generate crash dump after being started by kexec.
+config ARCH_SUPPORTS_KEXEC
+	def_bool !SMP || HOTPLUG_CPU
 
-endmenu
+config ARCH_SUPPORTS_CRASH_DUMP
+	def_bool IA64_MCA_RECOVERY && (!SMP || HOTPLUG_CPU)
 
 menu "Power management and ACPI options"
 
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v6 05/14] arm64/kexec: refactor for kernel/Kconfig.kexec
  2023-07-12 16:15 [PATCH v6 00/14] refactor Kconfig to consolidate KEXEC and CRASH options Eric DeVolder
                   ` (3 preceding siblings ...)
  2023-07-12 16:15 ` [PATCH v6 04/14] ia64/kexec: " Eric DeVolder
@ 2023-07-12 16:15 ` Eric DeVolder
  2023-07-12 16:15 ` [PATCH v6 06/14] loongarch/kexec: " Eric DeVolder
                   ` (8 subsequent siblings)
  13 siblings, 0 replies; 17+ messages in thread
From: Eric DeVolder @ 2023-07-12 16:15 UTC (permalink / raw)
  To: linux, catalin.marinas, will, chenhuacai, geert, tsbogend,
	James.Bottomley, deller, ysato, dalias, glaubitz, tglx, mingo,
	bp, dave.hansen, x86, linux-kernel, linux-arm-kernel, linux-ia64,
	loongarch, linux-m68k, linux-mips, linux-parisc, linuxppc-dev,
	linux-riscv, linux-s390, linux-sh
  Cc: kernel, mpe, npiggin, christophe.leroy, paul.walmsley, palmer,
	aou, hca, gor, agordeev, borntraeger, svens, hpa, keescook,
	paulmck, peterz, frederic, akpm, ardb, samitolvanen,
	juerg.haefliger, arnd, rmk+kernel, linus.walleij,
	sebastian.reichel, rppt, kirill.shutemov, anshuman.khandual, ziy,
	masahiroy, ndesaulniers, mhiramat, ojeda, thunder.leizhen,
	xin3.li, tj, gregkh, tsi, bhe, hbathini, sourabhjain,
	eric.devolder, boris.ostrovsky, konrad.wilk

The kexec and crash kernel options are provided in the common
kernel/Kconfig.kexec. Utilize the common options and provide
the ARCH_SUPPORTS_ and ARCH_SELECTS_ entries to recreate the
equivalent set of KEXEC and CRASH options.

Signed-off-by: Eric DeVolder <eric.devolder@oracle.com>
---
 arch/arm64/Kconfig | 64 ++++++++++++----------------------------------
 1 file changed, 16 insertions(+), 48 deletions(-)

diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
index 7856c3a3e35a..3a9b06a693a9 100644
--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
@@ -1459,60 +1459,28 @@ config PARAVIRT_TIME_ACCOUNTING
 
 	  If in doubt, say N here.
 
-config KEXEC
-	depends on PM_SLEEP_SMP
-	select KEXEC_CORE
-	bool "kexec system call"
-	help
-	  kexec is a system call that implements the ability to shutdown your
-	  current kernel, and to start another kernel.  It is like a reboot
-	  but it is independent of the system firmware.   And like a reboot
-	  you can start any kernel with it, not just Linux.
-
-config KEXEC_FILE
-	bool "kexec file based system call"
-	select KEXEC_CORE
-	select HAVE_IMA_KEXEC if IMA
-	help
-	  This is new version of kexec system call. This system call is
-	  file based and takes file descriptors as system call argument
-	  for kernel and initramfs as opposed to list of segments as
-	  accepted by previous system call.
+config ARCH_SUPPORTS_KEXEC
+	def_bool PM_SLEEP_SMP
 
-config KEXEC_SIG
-	bool "Verify kernel signature during kexec_file_load() syscall"
-	depends on KEXEC_FILE
-	help
-	  Select this option to verify a signature with loaded kernel
-	  image. If configured, any attempt of loading a image without
-	  valid signature will fail.
+config ARCH_SUPPORTS_KEXEC_FILE
+	def_bool y
 
-	  In addition to that option, you need to enable signature
-	  verification for the corresponding kernel image type being
-	  loaded in order for this to work.
+config ARCH_SELECTS_KEXEC_FILE
+	def_bool y
+	depends on KEXEC_FILE
+	select HAVE_IMA_KEXEC if IMA
 
-config KEXEC_IMAGE_VERIFY_SIG
-	bool "Enable Image signature verification support"
-	default y
-	depends on KEXEC_SIG
-	depends on EFI && SIGNED_PE_FILE_VERIFICATION
-	help
-	  Enable Image signature verification support.
+config ARCH_SUPPORTS_KEXEC_SIG
+	def_bool y
 
-comment "Support for PE file signature verification disabled"
-	depends on KEXEC_SIG
-	depends on !EFI || !SIGNED_PE_FILE_VERIFICATION
+config ARCH_SUPPORTS_KEXEC_IMAGE_VERIFY_SIG
+	def_bool y
 
-config CRASH_DUMP
-	bool "Build kdump crash kernel"
-	help
-	  Generate crash dump after being started by kexec. This should
-	  be normally only set in special crash dump kernels which are
-	  loaded in the main kernel with kexec-tools into a specially
-	  reserved region and then later executed after a crash by
-	  kdump/kexec.
+config ARCH_DEFAULT_KEXEC_IMAGE_VERIFY_SIG
+	def_bool y
 
-	  For more details see Documentation/admin-guide/kdump/kdump.rst
+config ARCH_SUPPORTS_CRASH_DUMP
+	def_bool y
 
 config TRANS_TABLE
 	def_bool y
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v6 06/14] loongarch/kexec: refactor for kernel/Kconfig.kexec
  2023-07-12 16:15 [PATCH v6 00/14] refactor Kconfig to consolidate KEXEC and CRASH options Eric DeVolder
                   ` (4 preceding siblings ...)
  2023-07-12 16:15 ` [PATCH v6 05/14] arm64/kexec: " Eric DeVolder
@ 2023-07-12 16:15 ` Eric DeVolder
  2023-07-12 16:15 ` [PATCH v6 07/14] m68k/kexec: " Eric DeVolder
                   ` (7 subsequent siblings)
  13 siblings, 0 replies; 17+ messages in thread
From: Eric DeVolder @ 2023-07-12 16:15 UTC (permalink / raw)
  To: linux, catalin.marinas, will, chenhuacai, geert, tsbogend,
	James.Bottomley, deller, ysato, dalias, glaubitz, tglx, mingo,
	bp, dave.hansen, x86, linux-kernel, linux-arm-kernel, linux-ia64,
	loongarch, linux-m68k, linux-mips, linux-parisc, linuxppc-dev,
	linux-riscv, linux-s390, linux-sh
  Cc: kernel, mpe, npiggin, christophe.leroy, paul.walmsley, palmer,
	aou, hca, gor, agordeev, borntraeger, svens, hpa, keescook,
	paulmck, peterz, frederic, akpm, ardb, samitolvanen,
	juerg.haefliger, arnd, rmk+kernel, linus.walleij,
	sebastian.reichel, rppt, kirill.shutemov, anshuman.khandual, ziy,
	masahiroy, ndesaulniers, mhiramat, ojeda, thunder.leizhen,
	xin3.li, tj, gregkh, tsi, bhe, hbathini, sourabhjain,
	eric.devolder, boris.ostrovsky, konrad.wilk

The kexec and crash kernel options are provided in the common
kernel/Kconfig.kexec. Utilize the common options and provide
the ARCH_SUPPORTS_ and ARCH_SELECTS_ entries to recreate the
equivalent set of KEXEC and CRASH options.

Signed-off-by: Eric DeVolder <eric.devolder@oracle.com>
---
 arch/loongarch/Kconfig | 26 +++++++-------------------
 1 file changed, 7 insertions(+), 19 deletions(-)

diff --git a/arch/loongarch/Kconfig b/arch/loongarch/Kconfig
index e55511af4c77..397203e18800 100644
--- a/arch/loongarch/Kconfig
+++ b/arch/loongarch/Kconfig
@@ -537,28 +537,16 @@ config CPU_HAS_PREFETCH
 	bool
 	default y
 
-config KEXEC
-	bool "Kexec system call"
-	select KEXEC_CORE
-	help
-	  kexec is a system call that implements the ability to shutdown your
-	  current kernel, and to start another kernel.  It is like a reboot
-	  but it is independent of the system firmware.   And like a reboot
-	  you can start any kernel with it, not just Linux.
+config ARCH_SUPPORTS_KEXEC
+	def_bool y
 
-	  The name comes from the similarity to the exec system call.
+config ARCH_SUPPORTS_CRASH_DUMP
+	def_bool y
 
-config CRASH_DUMP
-	bool "Build kdump crash kernel"
+config ARCH_SELECTS_CRASH_DUMP
+	def_bool y
+	depends on CRASH_DUMP
 	select RELOCATABLE
-	help
-	  Generate crash dump after being started by kexec. This should
-	  be normally only set in special crash dump kernels which are
-	  loaded in the main kernel with kexec-tools into a specially
-	  reserved region and then later executed after a crash by
-	  kdump/kexec.
-
-	  For more details see Documentation/admin-guide/kdump/kdump.rst
 
 config RELOCATABLE
 	bool "Relocatable kernel"
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v6 07/14] m68k/kexec: refactor for kernel/Kconfig.kexec
  2023-07-12 16:15 [PATCH v6 00/14] refactor Kconfig to consolidate KEXEC and CRASH options Eric DeVolder
                   ` (5 preceding siblings ...)
  2023-07-12 16:15 ` [PATCH v6 06/14] loongarch/kexec: " Eric DeVolder
@ 2023-07-12 16:15 ` Eric DeVolder
  2023-07-12 16:15 ` [PATCH v6 08/14] mips/kexec: " Eric DeVolder
                   ` (6 subsequent siblings)
  13 siblings, 0 replies; 17+ messages in thread
From: Eric DeVolder @ 2023-07-12 16:15 UTC (permalink / raw)
  To: linux, catalin.marinas, will, chenhuacai, geert, tsbogend,
	James.Bottomley, deller, ysato, dalias, glaubitz, tglx, mingo,
	bp, dave.hansen, x86, linux-kernel, linux-arm-kernel, linux-ia64,
	loongarch, linux-m68k, linux-mips, linux-parisc, linuxppc-dev,
	linux-riscv, linux-s390, linux-sh
  Cc: kernel, mpe, npiggin, christophe.leroy, paul.walmsley, palmer,
	aou, hca, gor, agordeev, borntraeger, svens, hpa, keescook,
	paulmck, peterz, frederic, akpm, ardb, samitolvanen,
	juerg.haefliger, arnd, rmk+kernel, linus.walleij,
	sebastian.reichel, rppt, kirill.shutemov, anshuman.khandual, ziy,
	masahiroy, ndesaulniers, mhiramat, ojeda, thunder.leizhen,
	xin3.li, tj, gregkh, tsi, bhe, hbathini, sourabhjain,
	eric.devolder, boris.ostrovsky, konrad.wilk

The kexec and crash kernel options are provided in the common
kernel/Kconfig.kexec. Utilize the common options and provide
the ARCH_SUPPORTS_ and ARCH_SELECTS_ entries to recreate the
equivalent set of KEXEC and CRASH options.

Signed-off-by: Eric DeVolder <eric.devolder@oracle.com>
Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
Acked-by: Geert Uytterhoeven <geert@linux-m68k.org>
---
 arch/m68k/Kconfig | 19 ++-----------------
 1 file changed, 2 insertions(+), 17 deletions(-)

diff --git a/arch/m68k/Kconfig b/arch/m68k/Kconfig
index dc792b321f1e..3e318bf9504c 100644
--- a/arch/m68k/Kconfig
+++ b/arch/m68k/Kconfig
@@ -89,23 +89,8 @@ config MMU_SUN3
 	bool
 	depends on MMU && !MMU_MOTOROLA && !MMU_COLDFIRE
 
-config KEXEC
-	bool "kexec system call"
-	depends on M68KCLASSIC && MMU
-	select KEXEC_CORE
-	help
-	  kexec is a system call that implements the ability to shutdown your
-	  current kernel, and to start another kernel.  It is like a reboot
-	  but it is independent of the system firmware.   And like a reboot
-	  you can start any kernel with it, not just Linux.
-
-	  The name comes from the similarity to the exec system call.
-
-	  It is an ongoing process to be certain the hardware in a machine
-	  is properly shutdown, so do not be surprised if this code does not
-	  initially work for you.  As of this writing the exact hardware
-	  interface is strongly in flux, so no good recommendation can be
-	  made.
+config ARCH_SUPPORTS_KEXEC
+	def_bool M68KCLASSIC && MMU
 
 config BOOTINFO_PROC
 	bool "Export bootinfo in procfs"
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v6 08/14] mips/kexec: refactor for kernel/Kconfig.kexec
  2023-07-12 16:15 [PATCH v6 00/14] refactor Kconfig to consolidate KEXEC and CRASH options Eric DeVolder
                   ` (6 preceding siblings ...)
  2023-07-12 16:15 ` [PATCH v6 07/14] m68k/kexec: " Eric DeVolder
@ 2023-07-12 16:15 ` Eric DeVolder
  2023-07-12 16:15 ` [PATCH v6 09/14] parisc/kexec: " Eric DeVolder
                   ` (5 subsequent siblings)
  13 siblings, 0 replies; 17+ messages in thread
From: Eric DeVolder @ 2023-07-12 16:15 UTC (permalink / raw)
  To: linux, catalin.marinas, will, chenhuacai, geert, tsbogend,
	James.Bottomley, deller, ysato, dalias, glaubitz, tglx, mingo,
	bp, dave.hansen, x86, linux-kernel, linux-arm-kernel, linux-ia64,
	loongarch, linux-m68k, linux-mips, linux-parisc, linuxppc-dev,
	linux-riscv, linux-s390, linux-sh
  Cc: kernel, mpe, npiggin, christophe.leroy, paul.walmsley, palmer,
	aou, hca, gor, agordeev, borntraeger, svens, hpa, keescook,
	paulmck, peterz, frederic, akpm, ardb, samitolvanen,
	juerg.haefliger, arnd, rmk+kernel, linus.walleij,
	sebastian.reichel, rppt, kirill.shutemov, anshuman.khandual, ziy,
	masahiroy, ndesaulniers, mhiramat, ojeda, thunder.leizhen,
	xin3.li, tj, gregkh, tsi, bhe, hbathini, sourabhjain,
	eric.devolder, boris.ostrovsky, konrad.wilk

The kexec and crash kernel options are provided in the common
kernel/Kconfig.kexec. Utilize the common options and provide
the ARCH_SUPPORTS_ and ARCH_SELECTS_ entries to recreate the
equivalent set of KEXEC and CRASH options.

Signed-off-by: Eric DeVolder <eric.devolder@oracle.com>
Acked-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
---
 arch/mips/Kconfig | 32 +++++---------------------------
 1 file changed, 5 insertions(+), 27 deletions(-)

diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index fc6fba925aea..bc8421859006 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -2878,33 +2878,11 @@ config HZ
 config SCHED_HRTICK
 	def_bool HIGH_RES_TIMERS
 
-config KEXEC
-	bool "Kexec system call"
-	select KEXEC_CORE
-	help
-	  kexec is a system call that implements the ability to shutdown your
-	  current kernel, and to start another kernel.  It is like a reboot
-	  but it is independent of the system firmware.   And like a reboot
-	  you can start any kernel with it, not just Linux.
-
-	  The name comes from the similarity to the exec system call.
-
-	  It is an ongoing process to be certain the hardware in a machine
-	  is properly shutdown, so do not be surprised if this code does not
-	  initially work for you.  As of this writing the exact hardware
-	  interface is strongly in flux, so no good recommendation can be
-	  made.
-
-config CRASH_DUMP
-	bool "Kernel crash dumps"
-	help
-	  Generate crash dump after being started by kexec.
-	  This should be normally only set in special crash dump kernels
-	  which are loaded in the main kernel with kexec-tools into
-	  a specially reserved region and then later executed after
-	  a crash by kdump/kexec. The crash dump kernel must be compiled
-	  to a memory address not used by the main kernel or firmware using
-	  PHYSICAL_START.
+config ARCH_SUPPORTS_KEXEC
+	def_bool y
+
+config ARCH_SUPPORTS_CRASH_DUMP
+	def_bool y
 
 config PHYSICAL_START
 	hex "Physical address where the kernel is loaded"
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v6 09/14] parisc/kexec: refactor for kernel/Kconfig.kexec
  2023-07-12 16:15 [PATCH v6 00/14] refactor Kconfig to consolidate KEXEC and CRASH options Eric DeVolder
                   ` (7 preceding siblings ...)
  2023-07-12 16:15 ` [PATCH v6 08/14] mips/kexec: " Eric DeVolder
@ 2023-07-12 16:15 ` Eric DeVolder
  2023-07-12 16:15 ` [PATCH v6 10/14] powerpc/kexec: " Eric DeVolder
                   ` (4 subsequent siblings)
  13 siblings, 0 replies; 17+ messages in thread
From: Eric DeVolder @ 2023-07-12 16:15 UTC (permalink / raw)
  To: linux, catalin.marinas, will, chenhuacai, geert, tsbogend,
	James.Bottomley, deller, ysato, dalias, glaubitz, tglx, mingo,
	bp, dave.hansen, x86, linux-kernel, linux-arm-kernel, linux-ia64,
	loongarch, linux-m68k, linux-mips, linux-parisc, linuxppc-dev,
	linux-riscv, linux-s390, linux-sh
  Cc: kernel, mpe, npiggin, christophe.leroy, paul.walmsley, palmer,
	aou, hca, gor, agordeev, borntraeger, svens, hpa, keescook,
	paulmck, peterz, frederic, akpm, ardb, samitolvanen,
	juerg.haefliger, arnd, rmk+kernel, linus.walleij,
	sebastian.reichel, rppt, kirill.shutemov, anshuman.khandual, ziy,
	masahiroy, ndesaulniers, mhiramat, ojeda, thunder.leizhen,
	xin3.li, tj, gregkh, tsi, bhe, hbathini, sourabhjain,
	eric.devolder, boris.ostrovsky, konrad.wilk

The kexec and crash kernel options are provided in the common
kernel/Kconfig.kexec. Utilize the common options and provide
the ARCH_SUPPORTS_ and ARCH_SELECTS_ entries to recreate the
equivalent set of KEXEC and CRASH options.

Signed-off-by: Eric DeVolder <eric.devolder@oracle.com>
---
 arch/parisc/Kconfig | 34 +++++++++++-----------------------
 1 file changed, 11 insertions(+), 23 deletions(-)

diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig
index 4cb46d5c64a2..2ef6843aae60 100644
--- a/arch/parisc/Kconfig
+++ b/arch/parisc/Kconfig
@@ -339,29 +339,17 @@ config NR_CPUS
 	default "8" if 64BIT
 	default "16"
 
-config KEXEC
-	bool "Kexec system call"
-	select KEXEC_CORE
-	help
-	  kexec is a system call that implements the ability to shutdown your
-	  current kernel, and to start another kernel.  It is like a reboot
-	  but it is independent of the system firmware.   And like a reboot
-	  you can start any kernel with it, not just Linux.
-
-	  It is an ongoing process to be certain the hardware in a machine
-	  shutdown, so do not be surprised if this code does not
-	  initially work for you.
-
-config KEXEC_FILE
-	bool "kexec file based system call"
-	select KEXEC_CORE
-	select KEXEC_ELF
-	help
-	  This enables the kexec_file_load() System call. This is
-	  file based and takes file descriptors as system call argument
-	  for kernel and initramfs as opposed to list of segments as
-	  accepted by previous system call.
-
 endmenu
 
+config ARCH_SUPPORTS_KEXEC
+	def_bool y
+
+config ARCH_SUPPORTS_KEXEC_FILE
+	def_bool y
+
+config ARCH_SELECTS_KEXEC_FILE
+	def_bool y
+	depends on KEXEC_FILE
+	select KEXEC_ELF
+
 source "drivers/parisc/Kconfig"
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v6 10/14] powerpc/kexec: refactor for kernel/Kconfig.kexec
  2023-07-12 16:15 [PATCH v6 00/14] refactor Kconfig to consolidate KEXEC and CRASH options Eric DeVolder
                   ` (8 preceding siblings ...)
  2023-07-12 16:15 ` [PATCH v6 09/14] parisc/kexec: " Eric DeVolder
@ 2023-07-12 16:15 ` Eric DeVolder
  2023-07-12 16:15 ` [PATCH v6 11/14] riscv/kexec: " Eric DeVolder
                   ` (3 subsequent siblings)
  13 siblings, 0 replies; 17+ messages in thread
From: Eric DeVolder @ 2023-07-12 16:15 UTC (permalink / raw)
  To: linux, catalin.marinas, will, chenhuacai, geert, tsbogend,
	James.Bottomley, deller, ysato, dalias, glaubitz, tglx, mingo,
	bp, dave.hansen, x86, linux-kernel, linux-arm-kernel, linux-ia64,
	loongarch, linux-m68k, linux-mips, linux-parisc, linuxppc-dev,
	linux-riscv, linux-s390, linux-sh
  Cc: kernel, mpe, npiggin, christophe.leroy, paul.walmsley, palmer,
	aou, hca, gor, agordeev, borntraeger, svens, hpa, keescook,
	paulmck, peterz, frederic, akpm, ardb, samitolvanen,
	juerg.haefliger, arnd, rmk+kernel, linus.walleij,
	sebastian.reichel, rppt, kirill.shutemov, anshuman.khandual, ziy,
	masahiroy, ndesaulniers, mhiramat, ojeda, thunder.leizhen,
	xin3.li, tj, gregkh, tsi, bhe, hbathini, sourabhjain,
	eric.devolder, boris.ostrovsky, konrad.wilk

The kexec and crash kernel options are provided in the common
kernel/Kconfig.kexec. Utilize the common options and provide
the ARCH_SUPPORTS_ and ARCH_SELECTS_ entries to recreate the
equivalent set of KEXEC and CRASH options.

Signed-off-by: Eric DeVolder <eric.devolder@oracle.com>
Reviewed-by: Sourabh Jain <sourabhjain@linux.ibm.com>
---
 arch/powerpc/Kconfig | 55 ++++++++++++++------------------------------
 1 file changed, 17 insertions(+), 38 deletions(-)

diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 0b1172cbeccb..1695a71777f0 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -589,41 +589,21 @@ config PPC64_SUPPORTS_MEMORY_FAILURE
 	default "y" if PPC_POWERNV
 	select ARCH_SUPPORTS_MEMORY_FAILURE
 
-config KEXEC
-	bool "kexec system call"
-	depends on PPC_BOOK3S || PPC_E500 || (44x && !SMP)
-	select KEXEC_CORE
-	help
-	  kexec is a system call that implements the ability to shutdown your
-	  current kernel, and to start another kernel.  It is like a reboot
-	  but it is independent of the system firmware.   And like a reboot
-	  you can start any kernel with it, not just Linux.
-
-	  The name comes from the similarity to the exec system call.
-
-	  It is an ongoing process to be certain the hardware in a machine
-	  is properly shutdown, so do not be surprised if this code does not
-	  initially work for you.  As of this writing the exact hardware
-	  interface is strongly in flux, so no good recommendation can be
-	  made.
-
-config KEXEC_FILE
-	bool "kexec file based system call"
-	select KEXEC_CORE
-	select HAVE_IMA_KEXEC if IMA
-	select KEXEC_ELF
-	depends on PPC64
-	depends on CRYPTO=y
-	depends on CRYPTO_SHA256=y
-	help
-	  This is a new version of the kexec system call. This call is
-	  file based and takes in file descriptors as system call arguments
-	  for kernel and initramfs as opposed to a list of segments as is the
-	  case for the older kexec call.
+config ARCH_SUPPORTS_KEXEC
+	def_bool PPC_BOOK3S || PPC_E500 || (44x && !SMP)
+
+config ARCH_SUPPORTS_KEXEC_FILE
+	def_bool PPC64 && CRYPTO=y && CRYPTO_SHA256=y
 
 config ARCH_HAS_KEXEC_PURGATORY
 	def_bool KEXEC_FILE
 
+config ARCH_SELECTS_KEXEC_FILE
+	def_bool y
+	depends on KEXEC_FILE
+	select KEXEC_ELF
+	select HAVE_IMA_KEXEC if IMA
+
 config PPC64_BIG_ENDIAN_ELF_ABI_V2
 	# Option is available to BFD, but LLD does not support ELFv1 so this is
 	# always true there.
@@ -683,14 +663,13 @@ config RELOCATABLE_TEST
 	  loaded at, which tends to be non-zero and therefore test the
 	  relocation code.
 
-config CRASH_DUMP
-	bool "Build a dump capture kernel"
-	depends on PPC64 || PPC_BOOK3S_32 || PPC_85xx || (44x && !SMP)
+config ARCH_SUPPORTS_CRASH_DUMP
+	def_bool PPC64 || PPC_BOOK3S_32 || PPC_85xx || (44x && !SMP)
+
+config ARCH_SELECTS_CRASH_DUMP
+	def_bool y
+	depends on CRASH_DUMP
 	select RELOCATABLE if PPC64 || 44x || PPC_85xx
-	help
-	  Build a kernel suitable for use as a dump capture kernel.
-	  The same kernel binary can be used as production kernel and dump
-	  capture kernel.
 
 config FA_DUMP
 	bool "Firmware-assisted dump"
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v6 11/14] riscv/kexec: refactor for kernel/Kconfig.kexec
  2023-07-12 16:15 [PATCH v6 00/14] refactor Kconfig to consolidate KEXEC and CRASH options Eric DeVolder
                   ` (9 preceding siblings ...)
  2023-07-12 16:15 ` [PATCH v6 10/14] powerpc/kexec: " Eric DeVolder
@ 2023-07-12 16:15 ` Eric DeVolder
  2023-07-12 16:15 ` [PATCH v6 12/14] s390/kexec: " Eric DeVolder
                   ` (2 subsequent siblings)
  13 siblings, 0 replies; 17+ messages in thread
From: Eric DeVolder @ 2023-07-12 16:15 UTC (permalink / raw)
  To: linux, catalin.marinas, will, chenhuacai, geert, tsbogend,
	James.Bottomley, deller, ysato, dalias, glaubitz, tglx, mingo,
	bp, dave.hansen, x86, linux-kernel, linux-arm-kernel, linux-ia64,
	loongarch, linux-m68k, linux-mips, linux-parisc, linuxppc-dev,
	linux-riscv, linux-s390, linux-sh
  Cc: kernel, mpe, npiggin, christophe.leroy, paul.walmsley, palmer,
	aou, hca, gor, agordeev, borntraeger, svens, hpa, keescook,
	paulmck, peterz, frederic, akpm, ardb, samitolvanen,
	juerg.haefliger, arnd, rmk+kernel, linus.walleij,
	sebastian.reichel, rppt, kirill.shutemov, anshuman.khandual, ziy,
	masahiroy, ndesaulniers, mhiramat, ojeda, thunder.leizhen,
	xin3.li, tj, gregkh, tsi, bhe, hbathini, sourabhjain,
	eric.devolder, boris.ostrovsky, konrad.wilk

The kexec and crash kernel options are provided in the common
kernel/Kconfig.kexec. Utilize the common options and provide
the ARCH_SUPPORTS_ and ARCH_SELECTS_ entries to recreate the
equivalent set of KEXEC and CRASH options.

Signed-off-by: Eric DeVolder <eric.devolder@oracle.com>
Acked-by: Palmer Dabbelt <palmer@rivosinc.com>
---
 arch/riscv/Kconfig | 44 +++++++++++++-------------------------------
 1 file changed, 13 insertions(+), 31 deletions(-)

diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
index 4c07b9189c86..23d0fbbe1367 100644
--- a/arch/riscv/Kconfig
+++ b/arch/riscv/Kconfig
@@ -650,48 +650,30 @@ config RISCV_BOOT_SPINWAIT
 
 	  If unsure what to do here, say N.
 
-config KEXEC
-	bool "Kexec system call"
-	depends on MMU
+config ARCH_SUPPORTS_KEXEC
+	def_bool MMU
+
+config ARCH_SELECTS_KEXEC
+	def_bool y
+	depends on KEXEC
 	select HOTPLUG_CPU if SMP
-	select KEXEC_CORE
-	help
-	  kexec is a system call that implements the ability to shutdown your
-	  current kernel, and to start another kernel. It is like a reboot
-	  but it is independent of the system firmware. And like a reboot
-	  you can start any kernel with it, not just Linux.
 
-	  The name comes from the similarity to the exec system call.
+config ARCH_SUPPORTS_KEXEC_FILE
+	def_bool 64BIT && MMU
 
-config KEXEC_FILE
-	bool "kexec file based systmem call"
-	depends on 64BIT && MMU
+config ARCH_SELECTS_KEXEC_FILE
+	def_bool y
+	depends on KEXEC_FILE
 	select HAVE_IMA_KEXEC if IMA
-	select KEXEC_CORE
 	select KEXEC_ELF
-	help
-	  This is new version of kexec system call. This system call is
-	  file based and takes file descriptors as system call argument
-	  for kernel and initramfs as opposed to list of segments as
-	  accepted by previous system call.
-
-	  If you don't know what to do here, say Y.
 
 config ARCH_HAS_KEXEC_PURGATORY
 	def_bool KEXEC_FILE
 	depends on CRYPTO=y
 	depends on CRYPTO_SHA256=y
 
-config CRASH_DUMP
-	bool "Build kdump crash kernel"
-	help
-	  Generate crash dump after being started by kexec. This should
-	  be normally only set in special crash dump kernels which are
-	  loaded in the main kernel with kexec-tools into a specially
-	  reserved region and then later executed after a crash by
-	  kdump/kexec.
-
-	  For more details see Documentation/admin-guide/kdump/kdump.rst
+config ARCH_SUPPORTS_CRASH_DUMP
+	def_bool y
 
 config COMPAT
 	bool "Kernel support for 32-bit U-mode"
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v6 12/14] s390/kexec: refactor for kernel/Kconfig.kexec
  2023-07-12 16:15 [PATCH v6 00/14] refactor Kconfig to consolidate KEXEC and CRASH options Eric DeVolder
                   ` (10 preceding siblings ...)
  2023-07-12 16:15 ` [PATCH v6 11/14] riscv/kexec: " Eric DeVolder
@ 2023-07-12 16:15 ` Eric DeVolder
  2023-07-12 16:15 ` [PATCH v6 13/14] sh/kexec: " Eric DeVolder
  2023-07-12 16:15 ` [PATCH v6 14/14] kexec: rename ARCH_HAS_KEXEC_PURGATORY Eric DeVolder
  13 siblings, 0 replies; 17+ messages in thread
From: Eric DeVolder @ 2023-07-12 16:15 UTC (permalink / raw)
  To: linux, catalin.marinas, will, chenhuacai, geert, tsbogend,
	James.Bottomley, deller, ysato, dalias, glaubitz, tglx, mingo,
	bp, dave.hansen, x86, linux-kernel, linux-arm-kernel, linux-ia64,
	loongarch, linux-m68k, linux-mips, linux-parisc, linuxppc-dev,
	linux-riscv, linux-s390, linux-sh
  Cc: kernel, mpe, npiggin, christophe.leroy, paul.walmsley, palmer,
	aou, hca, gor, agordeev, borntraeger, svens, hpa, keescook,
	paulmck, peterz, frederic, akpm, ardb, samitolvanen,
	juerg.haefliger, arnd, rmk+kernel, linus.walleij,
	sebastian.reichel, rppt, kirill.shutemov, anshuman.khandual, ziy,
	masahiroy, ndesaulniers, mhiramat, ojeda, thunder.leizhen,
	xin3.li, tj, gregkh, tsi, bhe, hbathini, sourabhjain,
	eric.devolder, boris.ostrovsky, konrad.wilk

The kexec and crash kernel options are provided in the common
kernel/Kconfig.kexec. Utilize the common options and provide
the ARCH_SUPPORTS_ and ARCH_SELECTS_ entries to recreate the
equivalent set of KEXEC and CRASH options.

Signed-off-by: Eric DeVolder <eric.devolder@oracle.com>
Acked-by: Alexander Gordeev <agordeev@linux.ibm.com>
---
 arch/s390/Kconfig | 69 ++++++++++++++++-------------------------------
 1 file changed, 23 insertions(+), 46 deletions(-)

diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig
index 5b39918b7042..40beaf1f3d73 100644
--- a/arch/s390/Kconfig
+++ b/arch/s390/Kconfig
@@ -213,6 +213,7 @@ config S390
 	select HAVE_VIRT_CPU_ACCOUNTING_IDLE
 	select IOMMU_HELPER		if PCI
 	select IOMMU_SUPPORT		if PCI
+	select KEXEC
 	select MMU_GATHER_MERGE_VMAS
 	select MMU_GATHER_NO_GATHER
 	select MMU_GATHER_RCU_TABLE_FREE
@@ -244,6 +245,28 @@ config PGTABLE_LEVELS
 
 source "kernel/livepatch/Kconfig"
 
+config ARCH_DEFAULT_KEXEC
+	def_bool y
+
+config ARCH_SUPPORTS_KEXEC
+	def_bool y
+
+config ARCH_SUPPORTS_KEXEC_FILE
+	def_bool CRYPTO && CRYPTO_SHA256 && CRYPTO_SHA256_S390
+
+config ARCH_SUPPORTS_KEXEC_SIG
+	def_bool MODULE_SIG_FORMAT
+
+config ARCH_HAS_KEXEC_PURGATORY
+	def_bool KEXEC_FILE
+
+config ARCH_SUPPORTS_CRASH_DUMP
+	def_bool y
+	help
+	  Refer to <file:Documentation/s390/zfcpdump.rst> for more details on this.
+	  This option also enables s390 zfcpdump.
+	  See also <file:Documentation/s390/zfcpdump.rst>
+
 menu "Processor type and features"
 
 config HAVE_MARCH_Z10_FEATURES
@@ -482,36 +505,6 @@ config SCHED_TOPOLOGY
 
 source "kernel/Kconfig.hz"
 
-config KEXEC
-	def_bool y
-	select KEXEC_CORE
-
-config KEXEC_FILE
-	bool "kexec file based system call"
-	select KEXEC_CORE
-	depends on CRYPTO
-	depends on CRYPTO_SHA256
-	depends on CRYPTO_SHA256_S390
-	help
-	  Enable the kexec file based system call. In contrast to the normal
-	  kexec system call this system call takes file descriptors for the
-	  kernel and initramfs as arguments.
-
-config ARCH_HAS_KEXEC_PURGATORY
-	def_bool y
-	depends on KEXEC_FILE
-
-config KEXEC_SIG
-	bool "Verify kernel signature during kexec_file_load() syscall"
-	depends on KEXEC_FILE && MODULE_SIG_FORMAT
-	help
-	  This option makes kernel signature verification mandatory for
-	  the kexec_file_load() syscall.
-
-	  In addition to that option, you need to enable signature
-	  verification for the corresponding kernel image type being
-	  loaded in order for this to work.
-
 config KERNEL_NOBP
 	def_bool n
 	prompt "Enable modified branch prediction for the kernel by default"
@@ -733,22 +726,6 @@ config VFIO_AP
 
 endmenu
 
-menu "Dump support"
-
-config CRASH_DUMP
-	bool "kernel crash dumps"
-	select KEXEC
-	help
-	  Generate crash dump after being started by kexec.
-	  Crash dump kernels are loaded in the main kernel with kexec-tools
-	  into a specially reserved region and then later executed after
-	  a crash by kdump/kexec.
-	  Refer to <file:Documentation/s390/zfcpdump.rst> for more details on this.
-	  This option also enables s390 zfcpdump.
-	  See also <file:Documentation/s390/zfcpdump.rst>
-
-endmenu
-
 config CCW
 	def_bool y
 
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v6 13/14] sh/kexec: refactor for kernel/Kconfig.kexec
  2023-07-12 16:15 [PATCH v6 00/14] refactor Kconfig to consolidate KEXEC and CRASH options Eric DeVolder
                   ` (11 preceding siblings ...)
  2023-07-12 16:15 ` [PATCH v6 12/14] s390/kexec: " Eric DeVolder
@ 2023-07-12 16:15 ` Eric DeVolder
  2023-07-12 16:15 ` [PATCH v6 14/14] kexec: rename ARCH_HAS_KEXEC_PURGATORY Eric DeVolder
  13 siblings, 0 replies; 17+ messages in thread
From: Eric DeVolder @ 2023-07-12 16:15 UTC (permalink / raw)
  To: linux, catalin.marinas, will, chenhuacai, geert, tsbogend,
	James.Bottomley, deller, ysato, dalias, glaubitz, tglx, mingo,
	bp, dave.hansen, x86, linux-kernel, linux-arm-kernel, linux-ia64,
	loongarch, linux-m68k, linux-mips, linux-parisc, linuxppc-dev,
	linux-riscv, linux-s390, linux-sh
  Cc: kernel, mpe, npiggin, christophe.leroy, paul.walmsley, palmer,
	aou, hca, gor, agordeev, borntraeger, svens, hpa, keescook,
	paulmck, peterz, frederic, akpm, ardb, samitolvanen,
	juerg.haefliger, arnd, rmk+kernel, linus.walleij,
	sebastian.reichel, rppt, kirill.shutemov, anshuman.khandual, ziy,
	masahiroy, ndesaulniers, mhiramat, ojeda, thunder.leizhen,
	xin3.li, tj, gregkh, tsi, bhe, hbathini, sourabhjain,
	eric.devolder, boris.ostrovsky, konrad.wilk

The kexec and crash kernel options are provided in the common
kernel/Kconfig.kexec. Utilize the common options and provide
the ARCH_SUPPORTS_ and ARCH_SELECTS_ entries to recreate the
equivalent set of KEXEC and CRASH options.

Signed-off-by: Eric DeVolder <eric.devolder@oracle.com>
Acked-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
---
 arch/sh/Kconfig | 46 ++++++++--------------------------------------
 1 file changed, 8 insertions(+), 38 deletions(-)

diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig
index 2b3ce4fd3956..1cf6603781c7 100644
--- a/arch/sh/Kconfig
+++ b/arch/sh/Kconfig
@@ -548,44 +548,14 @@ menu "Kernel features"
 
 source "kernel/Kconfig.hz"
 
-config KEXEC
-	bool "kexec system call (EXPERIMENTAL)"
-	depends on MMU
-	select KEXEC_CORE
-	help
-	  kexec is a system call that implements the ability to shutdown your
-	  current kernel, and to start another kernel.  It is like a reboot
-	  but it is independent of the system firmware.  And like a reboot
-	  you can start any kernel with it, not just Linux.
-
-	  The name comes from the similarity to the exec system call.
-
-	  It is an ongoing process to be certain the hardware in a machine
-	  is properly shutdown, so do not be surprised if this code does not
-	  initially work for you.  As of this writing the exact hardware
-	  interface is strongly in flux, so no good recommendation can be
-	  made.
-
-config CRASH_DUMP
-	bool "kernel crash dumps (EXPERIMENTAL)"
-	depends on BROKEN_ON_SMP
-	help
-	  Generate crash dump after being started by kexec.
-	  This should be normally only set in special crash dump kernels
-	  which are loaded in the main kernel with kexec-tools into
-	  a specially reserved region and then later executed after
-	  a crash by kdump/kexec. The crash dump kernel must be compiled
-	  to a memory address not used by the main kernel using
-	  PHYSICAL_START.
-
-	  For more details see Documentation/admin-guide/kdump/kdump.rst
-
-config KEXEC_JUMP
-	bool "kexec jump (EXPERIMENTAL)"
-	depends on KEXEC && HIBERNATION
-	help
-	  Jump between original kernel and kexeced kernel and invoke
-	  code via KEXEC
+config ARCH_SUPPORTS_KEXEC
+	def_bool MMU
+
+config ARCH_SUPPORTS_CRASH_DUMP
+	def_bool BROKEN_ON_SMP
+
+config ARCH_SUPPORTS_KEXEC_JUMP
+	def_bool y
 
 config PHYSICAL_START
 	hex "Physical address where the kernel is loaded" if (EXPERT || CRASH_DUMP)
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v6 14/14] kexec: rename ARCH_HAS_KEXEC_PURGATORY
  2023-07-12 16:15 [PATCH v6 00/14] refactor Kconfig to consolidate KEXEC and CRASH options Eric DeVolder
                   ` (12 preceding siblings ...)
  2023-07-12 16:15 ` [PATCH v6 13/14] sh/kexec: " Eric DeVolder
@ 2023-07-12 16:15 ` Eric DeVolder
  13 siblings, 0 replies; 17+ messages in thread
From: Eric DeVolder @ 2023-07-12 16:15 UTC (permalink / raw)
  To: linux, catalin.marinas, will, chenhuacai, geert, tsbogend,
	James.Bottomley, deller, ysato, dalias, glaubitz, tglx, mingo,
	bp, dave.hansen, x86, linux-kernel, linux-arm-kernel, linux-ia64,
	loongarch, linux-m68k, linux-mips, linux-parisc, linuxppc-dev,
	linux-riscv, linux-s390, linux-sh
  Cc: kernel, mpe, npiggin, christophe.leroy, paul.walmsley, palmer,
	aou, hca, gor, agordeev, borntraeger, svens, hpa, keescook,
	paulmck, peterz, frederic, akpm, ardb, samitolvanen,
	juerg.haefliger, arnd, rmk+kernel, linus.walleij,
	sebastian.reichel, rppt, kirill.shutemov, anshuman.khandual, ziy,
	masahiroy, ndesaulniers, mhiramat, ojeda, thunder.leizhen,
	xin3.li, tj, gregkh, tsi, bhe, hbathini, sourabhjain,
	eric.devolder, boris.ostrovsky, konrad.wilk

The Kconfig refactor to consolidate KEXEC and CRASH options utilized
option names of the form ARCH_SUPPORTS_<option>. Thus rename the
ARCH_HAS_KEXEC_PURGATORY to ARCH_SUPPORTS_KEXEC_PURGATORY to follow
the same.

Signed-off-by: Eric DeVolder <eric.devolder@oracle.com>
---
 arch/powerpc/Kconfig          | 2 +-
 arch/riscv/Kbuild             | 2 +-
 arch/riscv/Kconfig            | 2 +-
 arch/riscv/kernel/elf_kexec.c | 4 ++--
 arch/s390/Kbuild              | 2 +-
 arch/s390/Kconfig             | 2 +-
 arch/x86/Kconfig              | 2 +-
 kernel/kexec_file.c           | 6 +++---
 8 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 1695a71777f0..7709b62e6843 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -595,7 +595,7 @@ config ARCH_SUPPORTS_KEXEC
 config ARCH_SUPPORTS_KEXEC_FILE
 	def_bool PPC64 && CRYPTO=y && CRYPTO_SHA256=y
 
-config ARCH_HAS_KEXEC_PURGATORY
+config ARCH_SUPPORTS_KEXEC_PURGATORY
 	def_bool KEXEC_FILE
 
 config ARCH_SELECTS_KEXEC_FILE
diff --git a/arch/riscv/Kbuild b/arch/riscv/Kbuild
index afa83e307a2e..d25ad1c19f88 100644
--- a/arch/riscv/Kbuild
+++ b/arch/riscv/Kbuild
@@ -5,7 +5,7 @@ obj-$(CONFIG_BUILTIN_DTB) += boot/dts/
 obj-y += errata/
 obj-$(CONFIG_KVM) += kvm/
 
-obj-$(CONFIG_ARCH_HAS_KEXEC_PURGATORY) += purgatory/
+obj-$(CONFIG_ARCH_SUPPORTS_KEXEC_PURGATORY) += purgatory/
 
 # for cleaning
 subdir- += boot
diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
index 23d0fbbe1367..a39c5d03f59c 100644
--- a/arch/riscv/Kconfig
+++ b/arch/riscv/Kconfig
@@ -667,7 +667,7 @@ config ARCH_SELECTS_KEXEC_FILE
 	select HAVE_IMA_KEXEC if IMA
 	select KEXEC_ELF
 
-config ARCH_HAS_KEXEC_PURGATORY
+config ARCH_SUPPORTS_KEXEC_PURGATORY
 	def_bool KEXEC_FILE
 	depends on CRYPTO=y
 	depends on CRYPTO_SHA256=y
diff --git a/arch/riscv/kernel/elf_kexec.c b/arch/riscv/kernel/elf_kexec.c
index 5372b708fae2..cc556beb293a 100644
--- a/arch/riscv/kernel/elf_kexec.c
+++ b/arch/riscv/kernel/elf_kexec.c
@@ -260,7 +260,7 @@ static void *elf_kexec_load(struct kimage *image, char *kernel_buf,
 		cmdline = modified_cmdline;
 	}
 
-#ifdef CONFIG_ARCH_HAS_KEXEC_PURGATORY
+#ifdef CONFIG_ARCH_SUPPORTS_KEXEC_PURGATORY
 	/* Add purgatory to the image */
 	kbuf.top_down = true;
 	kbuf.mem = KEXEC_BUF_MEM_UNKNOWN;
@@ -274,7 +274,7 @@ static void *elf_kexec_load(struct kimage *image, char *kernel_buf,
 					     sizeof(kernel_start), 0);
 	if (ret)
 		pr_err("Error update purgatory ret=%d\n", ret);
-#endif /* CONFIG_ARCH_HAS_KEXEC_PURGATORY */
+#endif /* CONFIG_ARCH_SUPPORTS_KEXEC_PURGATORY */
 
 	/* Add the initrd to the image */
 	if (initrd != NULL) {
diff --git a/arch/s390/Kbuild b/arch/s390/Kbuild
index 76e362277179..48a3588d703c 100644
--- a/arch/s390/Kbuild
+++ b/arch/s390/Kbuild
@@ -7,7 +7,7 @@ obj-$(CONFIG_S390_HYPFS_FS)	+= hypfs/
 obj-$(CONFIG_APPLDATA_BASE)	+= appldata/
 obj-y				+= net/
 obj-$(CONFIG_PCI)		+= pci/
-obj-$(CONFIG_ARCH_HAS_KEXEC_PURGATORY) += purgatory/
+obj-$(CONFIG_ARCH_SUPPORTS_KEXEC_PURGATORY) += purgatory/
 
 # for cleaning
 subdir- += boot tools
diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig
index 40beaf1f3d73..ab723218c0fb 100644
--- a/arch/s390/Kconfig
+++ b/arch/s390/Kconfig
@@ -257,7 +257,7 @@ config ARCH_SUPPORTS_KEXEC_FILE
 config ARCH_SUPPORTS_KEXEC_SIG
 	def_bool MODULE_SIG_FORMAT
 
-config ARCH_HAS_KEXEC_PURGATORY
+config ARCH_SUPPORTS_KEXEC_PURGATORY
 	def_bool KEXEC_FILE
 
 config ARCH_SUPPORTS_CRASH_DUMP
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 9767a343f7c2..fedc6dddd743 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -2051,7 +2051,7 @@ config ARCH_SELECTS_KEXEC_FILE
 	depends on KEXEC_FILE
 	select HAVE_IMA_KEXEC if IMA
 
-config ARCH_HAS_KEXEC_PURGATORY
+config ARCH_SUPPORTS_KEXEC_PURGATORY
 	def_bool KEXEC_FILE
 
 config ARCH_SUPPORTS_KEXEC_SIG
diff --git a/kernel/kexec_file.c b/kernel/kexec_file.c
index 881ba0d1714c..dd115571f8fc 100644
--- a/kernel/kexec_file.c
+++ b/kernel/kexec_file.c
@@ -685,7 +685,7 @@ static int kexec_calculate_store_digests(struct kimage *image)
 	struct kexec_sha_region *sha_regions;
 	struct purgatory_info *pi = &image->purgatory_info;
 
-	if (!IS_ENABLED(CONFIG_ARCH_HAS_KEXEC_PURGATORY))
+	if (!IS_ENABLED(CONFIG_ARCH_SUPPORTS_KEXEC_PURGATORY))
 		return 0;
 
 	zero_buf = __va(page_to_pfn(ZERO_PAGE(0)) << PAGE_SHIFT);
@@ -790,7 +790,7 @@ static int kexec_calculate_store_digests(struct kimage *image)
 	return ret;
 }
 
-#ifdef CONFIG_ARCH_HAS_KEXEC_PURGATORY
+#ifdef CONFIG_ARCH_SUPPORTS_KEXEC_PURGATORY
 /*
  * kexec_purgatory_setup_kbuf - prepare buffer to load purgatory.
  * @pi:		Purgatory to be loaded.
@@ -1150,7 +1150,7 @@ int kexec_purgatory_get_set_symbol(struct kimage *image, const char *name,
 
 	return 0;
 }
-#endif /* CONFIG_ARCH_HAS_KEXEC_PURGATORY */
+#endif /* CONFIG_ARCH_SUPPORTS_KEXEC_PURGATORY */
 
 int crash_exclude_mem_range(struct crash_mem *mem,
 			    unsigned long long mstart, unsigned long long mend)
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: [PATCH v6 02/14] x86/kexec: refactor for kernel/Kconfig.kexec
  2023-07-12 16:15 ` [PATCH v6 02/14] x86/kexec: refactor for kernel/Kconfig.kexec Eric DeVolder
@ 2023-07-13 11:13   ` Leizhen (ThunderTown)
  2023-08-22  6:32     ` Michal Suchánek
  0 siblings, 1 reply; 17+ messages in thread
From: Leizhen (ThunderTown) @ 2023-07-13 11:13 UTC (permalink / raw)
  To: Eric DeVolder, linux, catalin.marinas, will, chenhuacai, geert,
	tsbogend, James.Bottomley, deller, ysato, dalias, glaubitz, tglx,
	mingo, bp, dave.hansen, x86, linux-kernel, linux-arm-kernel,
	linux-ia64, loongarch, linux-m68k, linux-mips, linux-parisc,
	linuxppc-dev, linux-riscv, linux-s390, linux-sh
  Cc: kernel, mpe, npiggin, christophe.leroy, paul.walmsley, palmer,
	aou, hca, gor, agordeev, borntraeger, svens, hpa, keescook,
	paulmck, peterz, frederic, akpm, ardb, samitolvanen,
	juerg.haefliger, arnd, rmk+kernel, linus.walleij,
	sebastian.reichel, rppt, kirill.shutemov, anshuman.khandual, ziy,
	masahiroy, ndesaulniers, mhiramat, ojeda, xin3.li, tj, gregkh,
	tsi, bhe, hbathini, sourabhjain, boris.ostrovsky, konrad.wilk



On 2023/7/13 0:15, Eric DeVolder wrote:
> The kexec and crash kernel options are provided in the common
> kernel/Kconfig.kexec. Utilize the common options and provide
> the ARCH_SUPPORTS_ and ARCH_SELECTS_ entries to recreate the
> equivalent set of KEXEC and CRASH options.
> 
> Signed-off-by: Eric DeVolder <eric.devolder@oracle.com>
> ---
>  arch/x86/Kconfig | 92 ++++++++++--------------------------------------
>  1 file changed, 19 insertions(+), 73 deletions(-)
> 
> diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
> index 7422db409770..9767a343f7c2 100644
> --- a/arch/x86/Kconfig
> +++ b/arch/x86/Kconfig
> @@ -2040,88 +2040,34 @@ config EFI_RUNTIME_MAP
>  
>  source "kernel/Kconfig.hz"
>  
> -config KEXEC
> -	bool "kexec system call"
> -	select KEXEC_CORE
> -	help
> -	  kexec is a system call that implements the ability to shutdown your
> -	  current kernel, and to start another kernel.  It is like a reboot
> -	  but it is independent of the system firmware.   And like a reboot
> -	  you can start any kernel with it, not just Linux.
> -
> -	  The name comes from the similarity to the exec system call.
> -
> -	  It is an ongoing process to be certain the hardware in a machine
> -	  is properly shutdown, so do not be surprised if this code does not
> -	  initially work for you.  As of this writing the exact hardware
> -	  interface is strongly in flux, so no good recommendation can be
> -	  made.
> -
> -config KEXEC_FILE
> -	bool "kexec file based system call"
> -	select KEXEC_CORE
> -	select HAVE_IMA_KEXEC if IMA
> -	depends on X86_64
> -	depends on CRYPTO=y
> -	depends on CRYPTO_SHA256=y
> -	help
> -	  This is new version of kexec system call. This system call is
> -	  file based and takes file descriptors as system call argument
> -	  for kernel and initramfs as opposed to list of segments as
> -	  accepted by previous system call.
> +config ARCH_SUPPORTS_KEXEC
> +	def_bool y

In v5, Joel Fernandes seems to suggest you change it to the following form:
In arch/Kconfig:
+config ARCH_SUPPORTS_KEXEC
+	bool

In arch/x86/Kconfig:
config X86
	... ...
+	select ARCH_SUPPORTS_KEXEC

In arch/arm64/Kconfig:
config ARM64
	... ...
+	select ARCH_SUPPORTS_KEXEC if PM_SLEEP_SMP

etc..

You can refer to ARCH_HAS_DEBUG_VIRTUAL.

>  
> -config ARCH_HAS_KEXEC_PURGATORY
> -	def_bool KEXEC_FILE
> +config ARCH_SUPPORTS_KEXEC_FILE
> +	def_bool X86_64 && CRYPTO && CRYPTO_SHA256
>  
> -config KEXEC_SIG
> -	bool "Verify kernel signature during kexec_file_load() syscall"
> +config ARCH_SELECTS_KEXEC_FILE
> +	def_bool y
>  	depends on KEXEC_FILE
> -	help
> +	select HAVE_IMA_KEXEC if IMA
>  
> -	  This option makes the kexec_file_load() syscall check for a valid
> -	  signature of the kernel image.  The image can still be loaded without
> -	  a valid signature unless you also enable KEXEC_SIG_FORCE, though if
> -	  there's a signature that we can check, then it must be valid.
> +config ARCH_HAS_KEXEC_PURGATORY
> +	def_bool KEXEC_FILE
>  
> -	  In addition to this option, you need to enable signature
> -	  verification for the corresponding kernel image type being
> -	  loaded in order for this to work.
> +config ARCH_SUPPORTS_KEXEC_SIG
> +	def_bool y
>  
> -config KEXEC_SIG_FORCE
> -	bool "Require a valid signature in kexec_file_load() syscall"
> -	depends on KEXEC_SIG
> -	help
> -	  This option makes kernel signature verification mandatory for
> -	  the kexec_file_load() syscall.
> +config ARCH_SUPPORTS_KEXEC_SIG_FORCE
> +	def_bool y
>  
> -config KEXEC_BZIMAGE_VERIFY_SIG
> -	bool "Enable bzImage signature verification support"
> -	depends on KEXEC_SIG
> -	depends on SIGNED_PE_FILE_VERIFICATION
> -	select SYSTEM_TRUSTED_KEYRING
> -	help
> -	  Enable bzImage signature verification support.
> +config ARCH_SUPPORTS_KEXEC_BZIMAGE_VERIFY_SIG
> +	def_bool y
>  
> -config CRASH_DUMP
> -	bool "kernel crash dumps"
> -	depends on X86_64 || (X86_32 && HIGHMEM)
> -	help
> -	  Generate crash dump after being started by kexec.
> -	  This should be normally only set in special crash dump kernels
> -	  which are loaded in the main kernel with kexec-tools into
> -	  a specially reserved region and then later executed after
> -	  a crash by kdump/kexec. The crash dump kernel must be compiled
> -	  to a memory address not used by the main kernel or BIOS using
> -	  PHYSICAL_START, or it must be built as a relocatable image
> -	  (CONFIG_RELOCATABLE=y).
> -	  For more details see Documentation/admin-guide/kdump/kdump.rst
> +config ARCH_SUPPORTS_KEXEC_JUMP
> +	def_bool y
>  
> -config KEXEC_JUMP
> -	bool "kexec jump"
> -	depends on KEXEC && HIBERNATION
> -	help
> -	  Jump between original kernel and kexeced kernel and invoke
> -	  code in physical address mode via KEXEC
> +config ARCH_SUPPORTS_CRASH_DUMP
> +	def_bool X86_64 || (X86_32 && HIGHMEM)
>  
>  config PHYSICAL_START
>  	hex "Physical address where the kernel is loaded" if (EXPERT || CRASH_DUMP)
> 

-- 
Regards,
  Zhen Lei

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v6 02/14] x86/kexec: refactor for kernel/Kconfig.kexec
  2023-07-13 11:13   ` Leizhen (ThunderTown)
@ 2023-08-22  6:32     ` Michal Suchánek
  0 siblings, 0 replies; 17+ messages in thread
From: Michal Suchánek @ 2023-08-22  6:32 UTC (permalink / raw)
  To: Leizhen (ThunderTown)
  Cc: Eric DeVolder, linux, catalin.marinas, will, chenhuacai, geert,
	tsbogend, James.Bottomley, deller, ysato, dalias, glaubitz, tglx,
	mingo, bp, dave.hansen, x86, linux-kernel, linux-arm-kernel,
	linux-ia64, loongarch, linux-m68k, linux-mips, linux-parisc,
	linuxppc-dev, linux-riscv, linux-s390, linux-sh, peterz,
	linus.walleij, hpa, kernel, ardb, tsi, agordeev, paulmck, bhe,
	masahiroy, konrad.wilk, sebastian.reichel, samitolvanen, ojeda,
	juerg.haefliger, borntraeger, frederic, arnd, mhiramat, aou,
	keescook, gor, anshuman.khandual, hca, xin3.li, npiggin,
	rmk+kernel, paul.walmsley, boris.ostrovsky, ziy, hbathini,
	gregkh, kirill.shutemov, ndesaulniers, sourabhjain, palmer,
	svens, tj, akpm, rppt

Hello,

On Thu, Jul 13, 2023 at 07:13:57PM +0800, Leizhen (ThunderTown) wrote:
> 
> 
> On 2023/7/13 0:15, Eric DeVolder wrote:
> > The kexec and crash kernel options are provided in the common
> > kernel/Kconfig.kexec. Utilize the common options and provide
> > the ARCH_SUPPORTS_ and ARCH_SELECTS_ entries to recreate the
> > equivalent set of KEXEC and CRASH options.
> > 
> > Signed-off-by: Eric DeVolder <eric.devolder@oracle.com>
> > ---
> >  arch/x86/Kconfig | 92 ++++++++++--------------------------------------
> >  1 file changed, 19 insertions(+), 73 deletions(-)
> > 
> > diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
> > index 7422db409770..9767a343f7c2 100644
> > --- a/arch/x86/Kconfig
> > +++ b/arch/x86/Kconfig
> > @@ -2040,88 +2040,34 @@ config EFI_RUNTIME_MAP
> >  
> >  source "kernel/Kconfig.hz"
> >  
> > -config KEXEC
> > -	bool "kexec system call"
> > -	select KEXEC_CORE
> > -	help
> > -	  kexec is a system call that implements the ability to shutdown your
> > -	  current kernel, and to start another kernel.  It is like a reboot
> > -	  but it is independent of the system firmware.   And like a reboot
> > -	  you can start any kernel with it, not just Linux.
> > -
> > -	  The name comes from the similarity to the exec system call.
> > -
> > -	  It is an ongoing process to be certain the hardware in a machine
> > -	  is properly shutdown, so do not be surprised if this code does not
> > -	  initially work for you.  As of this writing the exact hardware
> > -	  interface is strongly in flux, so no good recommendation can be
> > -	  made.
> > -
> > -config KEXEC_FILE
> > -	bool "kexec file based system call"
> > -	select KEXEC_CORE
> > -	select HAVE_IMA_KEXEC if IMA
> > -	depends on X86_64
> > -	depends on CRYPTO=y
> > -	depends on CRYPTO_SHA256=y
> > -	help
> > -	  This is new version of kexec system call. This system call is
> > -	  file based and takes file descriptors as system call argument
> > -	  for kernel and initramfs as opposed to list of segments as
> > -	  accepted by previous system call.
> > +config ARCH_SUPPORTS_KEXEC
> > +	def_bool y
> 
> In v5, Joel Fernandes seems to suggest you change it to the following form:

It's unfortunate that the suggestion did not make it to the mailinglist.

> In arch/Kconfig:
> +config ARCH_SUPPORTS_KEXEC
> +	bool
> 
> In arch/x86/Kconfig:
> config X86
> 	... ...
> +	select ARCH_SUPPORTS_KEXEC
> 
> In arch/arm64/Kconfig:
> config ARM64
> 	... ...
> +	select ARCH_SUPPORTS_KEXEC if PM_SLEEP_SMP

Which might work for this case

> 
> etc..
> 
> You can refer to ARCH_HAS_DEBUG_VIRTUAL.
> 
> >  
> > -config ARCH_HAS_KEXEC_PURGATORY
> > -	def_bool KEXEC_FILE
> > +config ARCH_SUPPORTS_KEXEC_FILE
> > +	def_bool X86_64 && CRYPTO && CRYPTO_SHA256
> >  
> > -config KEXEC_SIG
> > -	bool "Verify kernel signature during kexec_file_load() syscall"
> > +config ARCH_SELECTS_KEXEC_FILE
> > +	def_bool y
> >  	depends on KEXEC_FILE
> > -	help
> > +	select HAVE_IMA_KEXEC if IMA

but not this case, at least not this trivially.

Than for consistency it looks better to keep as is.

Thanks

Michal

> >  
> > -	  This option makes the kexec_file_load() syscall check for a valid
> > -	  signature of the kernel image.  The image can still be loaded without
> > -	  a valid signature unless you also enable KEXEC_SIG_FORCE, though if
> > -	  there's a signature that we can check, then it must be valid.
> > +config ARCH_HAS_KEXEC_PURGATORY
> > +	def_bool KEXEC_FILE
> >  
> > -	  In addition to this option, you need to enable signature
> > -	  verification for the corresponding kernel image type being
> > -	  loaded in order for this to work.
> > +config ARCH_SUPPORTS_KEXEC_SIG
> > +	def_bool y
> >  
> > -config KEXEC_SIG_FORCE
> > -	bool "Require a valid signature in kexec_file_load() syscall"
> > -	depends on KEXEC_SIG
> > -	help
> > -	  This option makes kernel signature verification mandatory for
> > -	  the kexec_file_load() syscall.
> > +config ARCH_SUPPORTS_KEXEC_SIG_FORCE
> > +	def_bool y
> >  
> > -config KEXEC_BZIMAGE_VERIFY_SIG
> > -	bool "Enable bzImage signature verification support"
> > -	depends on KEXEC_SIG
> > -	depends on SIGNED_PE_FILE_VERIFICATION
> > -	select SYSTEM_TRUSTED_KEYRING
> > -	help
> > -	  Enable bzImage signature verification support.
> > +config ARCH_SUPPORTS_KEXEC_BZIMAGE_VERIFY_SIG
> > +	def_bool y
> >  
> > -config CRASH_DUMP
> > -	bool "kernel crash dumps"
> > -	depends on X86_64 || (X86_32 && HIGHMEM)
> > -	help
> > -	  Generate crash dump after being started by kexec.
> > -	  This should be normally only set in special crash dump kernels
> > -	  which are loaded in the main kernel with kexec-tools into
> > -	  a specially reserved region and then later executed after
> > -	  a crash by kdump/kexec. The crash dump kernel must be compiled
> > -	  to a memory address not used by the main kernel or BIOS using
> > -	  PHYSICAL_START, or it must be built as a relocatable image
> > -	  (CONFIG_RELOCATABLE=y).
> > -	  For more details see Documentation/admin-guide/kdump/kdump.rst
> > +config ARCH_SUPPORTS_KEXEC_JUMP
> > +	def_bool y
> >  
> > -config KEXEC_JUMP
> > -	bool "kexec jump"
> > -	depends on KEXEC && HIBERNATION
> > -	help
> > -	  Jump between original kernel and kexeced kernel and invoke
> > -	  code in physical address mode via KEXEC
> > +config ARCH_SUPPORTS_CRASH_DUMP
> > +	def_bool X86_64 || (X86_32 && HIGHMEM)
> >  
> >  config PHYSICAL_START
> >  	hex "Physical address where the kernel is loaded" if (EXPERT || CRASH_DUMP)
> > 
> 
> -- 
> Regards,
>   Zhen Lei

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2023-08-22  6:34 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-07-12 16:15 [PATCH v6 00/14] refactor Kconfig to consolidate KEXEC and CRASH options Eric DeVolder
2023-07-12 16:15 ` [PATCH v6 01/14] kexec: consolidate kexec and crash options into kernel/Kconfig.kexec Eric DeVolder
2023-07-12 16:15 ` [PATCH v6 02/14] x86/kexec: refactor for kernel/Kconfig.kexec Eric DeVolder
2023-07-13 11:13   ` Leizhen (ThunderTown)
2023-08-22  6:32     ` Michal Suchánek
2023-07-12 16:15 ` [PATCH v6 03/14] arm/kexec: " Eric DeVolder
2023-07-12 16:15 ` [PATCH v6 04/14] ia64/kexec: " Eric DeVolder
2023-07-12 16:15 ` [PATCH v6 05/14] arm64/kexec: " Eric DeVolder
2023-07-12 16:15 ` [PATCH v6 06/14] loongarch/kexec: " Eric DeVolder
2023-07-12 16:15 ` [PATCH v6 07/14] m68k/kexec: " Eric DeVolder
2023-07-12 16:15 ` [PATCH v6 08/14] mips/kexec: " Eric DeVolder
2023-07-12 16:15 ` [PATCH v6 09/14] parisc/kexec: " Eric DeVolder
2023-07-12 16:15 ` [PATCH v6 10/14] powerpc/kexec: " Eric DeVolder
2023-07-12 16:15 ` [PATCH v6 11/14] riscv/kexec: " Eric DeVolder
2023-07-12 16:15 ` [PATCH v6 12/14] s390/kexec: " Eric DeVolder
2023-07-12 16:15 ` [PATCH v6 13/14] sh/kexec: " Eric DeVolder
2023-07-12 16:15 ` [PATCH v6 14/14] kexec: rename ARCH_HAS_KEXEC_PURGATORY Eric DeVolder

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).