The Linux Kernel Mailing List
 help / color / mirror / Atom feed
From: George Guo <dongtai.guo@linux.dev>
To: chenhuacai@kernel.org, rppt@kernel.org,
	pasha.tatashin@soleen.com, pratyush@kernel.org, shuah@kernel.org,
	ardb@kernel.org
Cc: guodongtai@kylinos.cn, kernel@xen0n.name, graf@amazon.com,
	loongarch@lists.linux.dev, linux-kernel@vger.kernel.org,
	kexec@lists.infradead.org, linux-mm@kvack.org,
	linux-kselftest@vger.kernel.org, linux-efi@vger.kernel.org
Subject: [PATCH v4 0/4] LoongArch: add KHO support and selftests
Date: Fri,  7 Aug 2026 18:37:10 +0800	[thread overview]
Message-ID: <20260807103714.33074-1-dongtai.guo@linux.dev> (raw)

This series enables Kexec Handover (KHO) on LoongArch, making it the
third architecture (after x86 and arm64) to set
ARCH_SUPPORTS_KEXEC_HANDOVER.  That is the only remaining gate for Live
Update (LUO) to run on LoongArch.

The hard part is the transport: how the first kernel hands the KHO state
(the KHO FDT and the scratch region) to the second kernel across kexec.

Why not the command line or an FDT
----------------------------------

LoongArch boots from EFI, but unlike arm64 and riscv its efistub does not
build a boot FDT.  It passes the EFI system table and the command line
straight to the core kernel [1].  There is no /chosen node to carry the
blob, so the arm64 path (drivers/of/kexec.c:kho_add_chosen() writes
linux,kho-fdt and linux,kho-scratch; drivers/of/fdt.c:
early_init_dt_check_kho() reads them) does not apply.

Two earlier transports were tried and rejected:

  * v1 put the handover addresses on the kernel command line.  Pratyush
    found that odd and asked for a DT-based alternative.

  * v2/v3 synthesized an FDT and rewrote the DEVICE_TREE_GUID entry in the
    EFI config table so the generic FDT reader would find it.  Pratyush
    called that "even more hacky" than the command line [2].

The v4 transport
----------------

v4 follows the x86 setup_data idea, in EFI terms.  The first kernel packs
the KHO state into a small struct (linux_efi_kho_data: fdt addr/size and
scratch addr/size), appends a pointer to it under a dedicated
LINUX_EFI_KHO_TABLE_GUID entry in a new EFI config table, loads both as
kexec segments, and switches st->tables before jumping.  The second kernel
scans the config table for that GUID in setup_arch() and calls
kho_populate() directly.  This is the approach proposed in [3].

It addresses both objections: nothing is exposed on the command line, and
no FDT is synthesized.  It also meets Huacai's constraint: it reuses the
EFI system table LoongArch already has, with no dependency on a boot FDT
the efistub never creates.

Patch layout
------------

  Patches 1-2 implement the transport.  Patch 1 adds the EFI config table
  GUID and the handover struct to include/linux/efi.h.  It is split out so
  the EFI maintainers can review it on its own.  Patch 2 wires up the
  LoongArch side: ARCH_SUPPORTS_KEXEC_HANDOVER, the write side in
  machine_kexec_file.c, the st->tables switch in machine_kexec(), and the
  reader in setup_arch().

  Patch 3 is a build fix for kernel/liveupdate/luo_session.c that the
  series depends on under CONFIG_KFENCE=y on LoongArch.  It was sent
  standalone as v2 and acked by Mike.  It is folded in here at his request
  to send it along with this series [4].

  Patch 4 adds LoongArch vmtest support to the KHO selftests and folds in
  the two points Mike raised on v3 (use "VM" instead of the ad-hoc
  "virt machine"; run every architecture under timeout(1), not only
  LoongArch).

Patch 1 is aimed at the EFI tree.  Patches 2-4 are aimed at the LoongArch
and KHO trees.  I expect the whole series to go through the KHO tree with
Ard's and Huacai's acks.

Changes since v3
----------------

  * Rework the transport: drop the synthesized FDT and the
    DEVICE_TREE_GUID rewrite.  Pass the KHO state through a dedicated EFI
    configuration table GUID and call kho_populate() directly (patches
    1, 2).
  * Fold in the luo_session build fix (previously standalone v2, acked by
    Mike) as patch 3, at his request.
  * selftests: address Mike's v3 review (use "VM"; always run under
    timeout(1)).
  * Rebase onto v7.2-rc6.

[1] Huacai Chen: https://lore.kernel.org/r/CAAhV-H5B6Mj2-AffkstJ4f8EEmvvPOGXoDy2QNudKD2kSz2XkA@mail.gmail.com/
[2] Pratyush Yadav: https://lore.kernel.org/r/2vxzjyqzj8s2.fsf@kernel.org/
[3] https://lore.kernel.org/r/20260717071551.11904-1-dongtai.guo@linux.dev/
[4] Mike Rapoport: https://lore.kernel.org/r/ai5nYlbERQBXRHSp@kernel.org/

George Guo (4):
  efi: add a KHO configuration table GUID
  LoongArch: kexec: add KHO support
  liveupdate: luo_session: include linux/mm.h for virt/phys translation
  selftests/kho: add LoongArch vmtest support

 arch/loongarch/Kconfig                     |   3 +
 arch/loongarch/include/asm/kexec.h         |   7 ++
 arch/loongarch/kernel/machine_kexec.c      |  16 +++
 arch/loongarch/kernel/machine_kexec_file.c | 131 +++++++++++++++++++++
 arch/loongarch/kernel/setup.c              |  41 +++++++
 include/linux/efi.h                        |  24 ++++
 kernel/liveupdate/luo_session.c            |   1 +
 tools/testing/selftests/kho/loongarch.conf |  11 ++
 tools/testing/selftests/kho/vmtest.sh      |  22 ++--
 9 files changed, 249 insertions(+), 7 deletions(-)
 create mode 100644 tools/testing/selftests/kho/loongarch.conf

-- 
2.53.0


             reply	other threads:[~2026-08-07 10:37 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-07 10:37 George Guo [this message]
2026-08-07 10:37 ` [PATCH v4 1/4] efi: add a KHO configuration table GUID George Guo
2026-08-07 10:37 ` [PATCH v4 2/4] LoongArch: kexec: add KHO support George Guo
2026-08-07 10:37 ` [PATCH v4 3/4] liveupdate: luo_session: include linux/mm.h for virt/phys translation George Guo
2026-08-07 10:37 ` [PATCH v4 4/4] selftests/kho: add LoongArch vmtest support George Guo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260807103714.33074-1-dongtai.guo@linux.dev \
    --to=dongtai.guo@linux.dev \
    --cc=ardb@kernel.org \
    --cc=chenhuacai@kernel.org \
    --cc=graf@amazon.com \
    --cc=guodongtai@kylinos.cn \
    --cc=kernel@xen0n.name \
    --cc=kexec@lists.infradead.org \
    --cc=linux-efi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=loongarch@lists.linux.dev \
    --cc=pasha.tatashin@soleen.com \
    --cc=pratyush@kernel.org \
    --cc=rppt@kernel.org \
    --cc=shuah@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox