mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-23 12:10:10 -04:00
When CONFIG_DEFERRED_STRUCT_PAGE_INIT is enabled, struct page initialization is deferred to parallel kthreads that run later in the boot process. During KHO restoration, kho_preserved_memory_reserve() writes metadata for each preserved memory region. However, if the struct page has not been initialized, this write targets uninitialized memory, potentially leading to errors like: BUG: unable to handle page fault for address: ... Fix this by introducing kho_get_preserved_page(), which ensures all struct pages in a preserved region are initialized by calling init_deferred_page() which is a no-op when the struct page is already initialized. Signed-off-by: Evangelos Petrongonas <epetron@amazon.de> Co-developed-by: Michal Clapinski <mclapinski@google.com> Signed-off-by: Michal Clapinski <mclapinski@google.com> Reviewed-by: Pratyush Yadav (Google) <pratyush@kernel.org> Reviewed-by: Pasha Tatashin <pasha.tatashin@soleen.com> Reviewed-by: Mike Rapoport (Microsoft) <rppt@kernel.org> Link: https://patch.msgid.link/20260423122538.140993-3-mclapinski@google.com Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
90 lines
2.8 KiB
Plaintext
90 lines
2.8 KiB
Plaintext
# SPDX-License-Identifier: GPL-2.0-only
|
|
|
|
menu "Live Update and Kexec HandOver"
|
|
|
|
config KEXEC_HANDOVER
|
|
bool "kexec handover"
|
|
depends on ARCH_SUPPORTS_KEXEC_HANDOVER && ARCH_SUPPORTS_KEXEC_FILE
|
|
select MEMBLOCK_KHO_SCRATCH
|
|
select KEXEC_FILE
|
|
select LIBFDT
|
|
select CMA
|
|
help
|
|
Allow kexec to hand over state across kernels by generating and
|
|
passing additional metadata to the target kernel. This is useful
|
|
to keep data or state alive across the kexec. For this to work,
|
|
both source and target kernels need to have this option enabled.
|
|
|
|
config KEXEC_HANDOVER_DEBUG
|
|
bool "Enable Kexec Handover debug checks"
|
|
depends on KEXEC_HANDOVER
|
|
help
|
|
This option enables extra sanity checks for the Kexec Handover
|
|
subsystem. Since, KHO performance is crucial in live update
|
|
scenarios and the extra code might be adding overhead it is
|
|
only optionally enabled.
|
|
|
|
config KEXEC_HANDOVER_DEBUGFS
|
|
bool "kexec handover debugfs interface"
|
|
default KEXEC_HANDOVER
|
|
depends on KEXEC_HANDOVER
|
|
select DEBUG_FS
|
|
help
|
|
Allow to control kexec handover device tree via debugfs
|
|
interface, i.e. finalize the state or aborting the finalization.
|
|
Also, enables inspecting the KHO fdt trees with the debugfs binary
|
|
blobs.
|
|
|
|
config KEXEC_HANDOVER_ENABLE_DEFAULT
|
|
bool "Enable kexec handover by default"
|
|
depends on KEXEC_HANDOVER
|
|
help
|
|
Enable Kexec Handover by default. This avoids the need to
|
|
explicitly pass 'kho=on' on the kernel command line.
|
|
|
|
This is useful for systems where KHO is a prerequisite for other
|
|
features, such as Live Update, ensuring the mechanism is always
|
|
active.
|
|
|
|
The default behavior can still be overridden at boot time by
|
|
passing 'kho=off'.
|
|
|
|
config LIVEUPDATE
|
|
bool "Live Update Orchestrator"
|
|
depends on KEXEC_HANDOVER
|
|
help
|
|
Enable the Live Update Orchestrator. Live Update is a mechanism,
|
|
typically based on kexec, that allows the kernel to be updated
|
|
while keeping selected devices operational across the transition.
|
|
These devices are intended to be reclaimed by the new kernel and
|
|
re-attached to their original workload without requiring a device
|
|
reset.
|
|
|
|
Ability to handover a device from current to the next kernel depends
|
|
on specific support within device drivers and related kernel
|
|
subsystems.
|
|
|
|
This feature primarily targets virtual machine hosts to quickly update
|
|
the kernel hypervisor with minimal disruption to the running virtual
|
|
machines.
|
|
|
|
If unsure, say N.
|
|
|
|
config LIVEUPDATE_MEMFD
|
|
bool "Live update support for memfd"
|
|
depends on LIVEUPDATE
|
|
depends on MEMFD_CREATE
|
|
depends on SHMEM
|
|
default LIVEUPDATE
|
|
help
|
|
Enable live update support for memfd regions. This allows preserving
|
|
memfd-backed memory across kernel live updates.
|
|
|
|
This can be used to back VM memory with memfds, allowing the guest
|
|
memory to persist, or for other user workloads needing to preserve
|
|
pages.
|
|
|
|
If unsure, say N.
|
|
|
|
endmenu
|