mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 06:44:00 -04:00
Eliminate the `kho_finalize()` function and its associated state from the KHO subsystem. The transition to a radix tree for memory tracking makes the explicit "finalize" state and its serialization step obsolete. Remove the `kho_finalize()` and `kho_finalized()` APIs and their stub implementations. Update KHO client code and the debugfs interface to no longer call or depend on the `kho_finalize()` mechanism. Complete the move towards a stateless KHO, simplifying the overall design by removing unnecessary state management. Link: https://lkml.kernel.org/r/20260206021428.3386442-3-jasonmiu@google.com Signed-off-by: Jason Miu <jasonmiu@google.com> Reviewed-by: Pasha Tatashin <pasha.tatashin@soleen.com> Reviewed-by: Mike Rapoport (Microsoft) <rppt@kernel.org> Cc: Alexander Graf <graf@amazon.com> Cc: Baoquan He <bhe@redhat.com> Cc: Changyuan Lyu <changyuanl@google.com> Cc: David Matlack <dmatlack@google.com> Cc: David Rientjes <rientjes@google.com> Cc: Jason Gunthorpe <jgg@nvidia.com> Cc: Pratyush Yadav <pratyush@kernel.org> Cc: Ran Xiaokai <ran.xiaokai@zte.com.cn> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
85 lines
3.2 KiB
ReStructuredText
85 lines
3.2 KiB
ReStructuredText
.. SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
====================
|
|
Kexec Handover Usage
|
|
====================
|
|
|
|
Kexec HandOver (KHO) is a mechanism that allows Linux to preserve memory
|
|
regions, which could contain serialized system states, across kexec.
|
|
|
|
This document expects that you are familiar with the base KHO
|
|
:ref:`concepts <kho-concepts>`. If you have not read
|
|
them yet, please do so now.
|
|
|
|
Prerequisites
|
|
=============
|
|
|
|
KHO is available when the kernel is compiled with ``CONFIG_KEXEC_HANDOVER``
|
|
set to y. Every KHO producer may have its own config option that you
|
|
need to enable if you would like to preserve their respective state across
|
|
kexec.
|
|
|
|
To use KHO, please boot the kernel with the ``kho=on`` command line
|
|
parameter. You may use ``kho_scratch`` parameter to define size of the
|
|
scratch regions. For example ``kho_scratch=16M,512M,256M`` will reserve a
|
|
16 MiB low memory scratch area, a 512 MiB global scratch region, and 256 MiB
|
|
per NUMA node scratch regions on boot.
|
|
|
|
Perform a KHO kexec
|
|
===================
|
|
|
|
To perform a KHO kexec, load the target payload and kexec into it. It
|
|
is important that you use the ``-s`` parameter to use the in-kernel
|
|
kexec file loader, as user space kexec tooling currently has no
|
|
support for KHO with the user space based file loader ::
|
|
|
|
# kexec -l /path/to/bzImage --initrd /path/to/initrd -s
|
|
# kexec -e
|
|
|
|
The new kernel will boot up and contain some of the previous kernel's state.
|
|
|
|
For example, if you used ``reserve_mem`` command line parameter to create
|
|
an early memory reservation, the new kernel will have that memory at the
|
|
same physical address as the old kernel.
|
|
|
|
debugfs Interfaces
|
|
==================
|
|
|
|
These debugfs interfaces are available when the kernel is compiled with
|
|
``CONFIG_KEXEC_HANDOVER_DEBUGFS`` enabled.
|
|
|
|
Currently KHO creates the following debugfs interfaces. Notice that these
|
|
interfaces may change in the future. They will be moved to sysfs once KHO is
|
|
stabilized.
|
|
|
|
``/sys/kernel/debug/kho/out/fdt``
|
|
The kernel exposes the flattened device tree blob that carries its
|
|
current KHO state in this file. Kexec user space tooling can use this
|
|
as input file for the KHO payload image.
|
|
|
|
``/sys/kernel/debug/kho/out/scratch_len``
|
|
Lengths of KHO scratch regions, which are physically contiguous
|
|
memory regions that will always stay available for future kexec
|
|
allocations. Kexec user space tools can use this file to determine
|
|
where it should place its payload images.
|
|
|
|
``/sys/kernel/debug/kho/out/scratch_phys``
|
|
Physical locations of KHO scratch regions. Kexec user space tools
|
|
can use this file in conjunction to scratch_phys to determine where
|
|
it should place its payload images.
|
|
|
|
``/sys/kernel/debug/kho/out/sub_fdts/``
|
|
KHO producers can register their own FDT or another binary blob under
|
|
this directory.
|
|
|
|
``/sys/kernel/debug/kho/in/fdt``
|
|
When the kernel was booted with Kexec HandOver (KHO),
|
|
the state tree that carries metadata about the previous
|
|
kernel's state is in this file in the format of flattened
|
|
device tree. This file may disappear when all consumers of
|
|
it finished to interpret their metadata.
|
|
|
|
``/sys/kernel/debug/kho/in/sub_fdts/``
|
|
Similar to ``kho/out/sub_fdts/``, but contains sub FDT blobs
|
|
of KHO producers passed from the old kernel.
|