File Index
Files and directories
Sign in
FILE

kho.rst

File preview with syntax highlighting.

linux-6.19.14/Documentation/admin-guide/mm/kho.rst RESTRUCTUREDTEXT
  1.. SPDX-License-Identifier: GPL-2.0-or-later
  2
  3====================
  4Kexec Handover Usage
  5====================
  6
  7Kexec HandOver (KHO) is a mechanism that allows Linux to preserve memory
  8regions, which could contain serialized system states, across kexec.
  9
 10This document expects that you are familiar with the base KHO
 11:ref:`concepts <kho-concepts>`. If you have not read
 12them yet, please do so now.
 13
 14Prerequisites
 15=============
 16
 17KHO is available when the kernel is compiled with ``CONFIG_KEXEC_HANDOVER``
 18set to y. Every KHO producer may have its own config option that you
 19need to enable if you would like to preserve their respective state across
 20kexec.
 21
 22To use KHO, please boot the kernel with the ``kho=on`` command line
 23parameter. You may use ``kho_scratch`` parameter to define size of the
 24scratch regions. For example ``kho_scratch=16M,512M,256M`` will reserve a
 2516 MiB low memory scratch area, a 512 MiB global scratch region, and 256 MiB
 26per NUMA node scratch regions on boot.
 27
 28Perform a KHO kexec
 29===================
 30
 31First, before you perform a KHO kexec, you need to move the system into
 32the :ref:`KHO finalization phase <kho-finalization-phase>` ::
 33
 34  $ echo 1 > /sys/kernel/debug/kho/out/finalize
 35
 36After this command, the KHO FDT is available in
 37``/sys/kernel/debug/kho/out/fdt``. Other subsystems may also register
 38their own preserved sub FDTs under
 39``/sys/kernel/debug/kho/out/sub_fdts/``.
 40
 41Next, load the target payload and kexec into it. It is important that you
 42use the ``-s`` parameter to use the in-kernel kexec file loader, as user
 43space kexec tooling currently has no support for KHO with the user space
 44based file loader ::
 45
 46  # kexec -l /path/to/bzImage --initrd /path/to/initrd -s
 47  # kexec -e
 48
 49The new kernel will boot up and contain some of the previous kernel's state.
 50
 51For example, if you used ``reserve_mem`` command line parameter to create
 52an early memory reservation, the new kernel will have that memory at the
 53same physical address as the old kernel.
 54
 55Abort a KHO exec
 56================
 57
 58You can move the system out of KHO finalization phase again by calling ::
 59
 60  $ echo 0 > /sys/kernel/debug/kho/out/active
 61
 62After this command, the KHO FDT is no longer available in
 63``/sys/kernel/debug/kho/out/fdt``.
 64
 65debugfs Interfaces
 66==================
 67
 68Currently KHO creates the following debugfs interfaces. Notice that these
 69interfaces may change in the future. They will be moved to sysfs once KHO is
 70stabilized.
 71
 72``/sys/kernel/debug/kho/out/finalize``
 73    Kexec HandOver (KHO) allows Linux to transition the state of
 74    compatible drivers into the next kexec'ed kernel. To do so,
 75    device drivers will instruct KHO to preserve memory regions,
 76    which could contain serialized kernel state.
 77    While the state is serialized, they are unable to perform
 78    any modifications to state that was serialized, such as
 79    handed over memory allocations.
 80
 81    When this file contains "1", the system is in the transition
 82    state. When contains "0", it is not. To switch between the
 83    two states, echo the respective number into this file.
 84
 85``/sys/kernel/debug/kho/out/fdt``
 86    When KHO state tree is finalized, the kernel exposes the
 87    flattened device tree blob that carries its current KHO
 88    state in this file. Kexec user space tooling can use this
 89    as input file for the KHO payload image.
 90
 91``/sys/kernel/debug/kho/out/scratch_len``
 92    Lengths of KHO scratch regions, which are physically contiguous
 93    memory regions that will always stay available for future kexec
 94    allocations. Kexec user space tools can use this file to determine
 95    where it should place its payload images.
 96
 97``/sys/kernel/debug/kho/out/scratch_phys``
 98    Physical locations of KHO scratch regions. Kexec user space tools
 99    can use this file in conjunction to scratch_phys to determine where
100    it should place its payload images.
101
102``/sys/kernel/debug/kho/out/sub_fdts/``
103    In the KHO finalization phase, KHO producers register their own
104    FDT blob under this directory.
105
106``/sys/kernel/debug/kho/in/fdt``
107    When the kernel was booted with Kexec HandOver (KHO),
108    the state tree that carries metadata about the previous
109    kernel's state is in this file in the format of flattened
110    device tree. This file may disappear when all consumers of
111    it finished to interpret their metadata.
112
113``/sys/kernel/debug/kho/in/sub_fdts/``
114    Similar to ``kho/out/sub_fdts/``, but contains sub FDT blobs
115    of KHO producers passed from the old kernel.
~/ Read-only file preview.