# 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"
	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>

config CRASH_HOTPLUG
	bool "Update the crash elfcorehdr on system configuration changes"
	default y
	depends on CRASH_DUMP && (HOTPLUG_CPU || MEMORY_HOTPLUG)
	depends on ARCH_SUPPORTS_CRASH_HOTPLUG
	help
	  Enable direct update to the crash elfcorehdr (which contains
	  the list of CPUs and memory regions to be dumped upon a crash)
	  in response to hot plug/unplug or online/offline of CPUs or
	  memory. This is a much more advanced approach than userspace
	  attempting that.

	  If unsure, say Y.

config CRASH_MAX_MEMORY_RANGES
	int "Specify the maximum number of memory regions for the elfcorehdr"
	default 8192
	depends on CRASH_HOTPLUG
	help
	  For the kexec_file_load() syscall path, specify the maximum number of
	  memory regions that the elfcorehdr buffer/segment can accommodate.
	  These regions are obtained via walk_system_ram_res(); eg. the
	  'System RAM' entries in /proc/iomem.
	  This value is combined with NR_CPUS_DEFAULT and multiplied by
	  sizeof(Elf64_Phdr) to determine the final elfcorehdr memory buffer/
	  segment size.
	  The value 8192, for example, covers a (sparsely populated) 1TiB system
	  consisting of 128MiB memblocks, while resulting in an elfcorehdr
	  memory buffer/segment size under 1MiB. This represents a sane choice
	  to accommodate both baremetal and virtual machine configurations.

	  For the kexec_load() syscall path, CRASH_MAX_MEMORY_RANGES is part of
	  the computation behind the value provided through the
	  /sys/kernel/crash_elfcorehdr_size attribute.

endmenu
