[PATCH v8 00/11] kexec: Rework segment loading and fix CMA retries
Jinjie Ruan
ruanjinjie at huawei.com
Thu Nov 12 05:34:07 PST 2026
ARM64, LoongArch, RISC-V, x86 and powerpc build the elf core header
and place it together with the initrd and the DTB with almost identical
code.
This series reworks that path into common helpers that the architectures
reuse, and fixes the CMA page and elf core header leaks in the arm64
and LoongArch placement retry loops.
The patch organization is as follows:
- Patch 1 moves the release of the elf core header into the generic
post-load cleanup, so that the architectures no longer free it
themselves.
- Patch 2 adds the common helpers
- Patches 3-7 convert arm64, LoongArch, RISC-V, X86 and Powerpc to
reuse the common helpers
- Patches 8-11 fix the CMA pages leaked by the retry loops and
the loop that makes no progress
Tested with kexec_file_load() on arm64, LoongArch, RISC-V, X86 and
Powerpc under QEMU, including the CMA retry paths, loading a crash
kernel and booting the second kernel, with the agent help.
This series is also available at:
https://github.com/ruanjinjie-eng/linux/tree/kexec_rework_cma_bugfx_v9
Changes in v8:
- Rework the common code as Mike suggested: the core provides building
blocks and the architectures uses them (Mike)
- Build the elf core header once and only place it on the retries (Mike)
- Keep the segment order and the arch placement policy unchanged (Mike)
- Convert x86 and powerpc as well
- Move the CMA fixes to the end of the series (Mike)
- Link to v7: https://lore.kernel.org/all/20261026075201.699550-1-ruanjinjie@huawei.com/
Previous Versions are as below:
- v6: https://lore.kernel.org/all/20260921090450.807575-1-ruanjinjie@huawei.com/
- v5: https://lore.kernel.org/all/20260918100442.3841135-1-ruanjinjie@huawei.com/
- v4: https://lore.kernel.org/all/20260907125404.922123-1-ruanjinjie@huawei.com/
- v3: https://lore.kernel.org/all/20260826092541.3905933-1-ruanjinjie@huawei.com/
- v2: https://lore.kernel.org/all/20260729031235.2840255-1-ruanjinjie@huawei.com/
- v1: https://lore.kernel.org/all/20260723131242.1537633-1-ruanjinjie@huawei.com/#t
Jinjie Ruan (11):
kexec: Free the elf core header in kimage_file_post_load_cleanup()
kexec: Add helpers to load the elf core header, initrd and FDT
arm64: kexec_file: Load the other segments with common helpers
LoongArch: kexec_file: Load the other segments with common helpers
riscv: kexec_file: Load the extra segments with common helpers
x86: kexec_file: Use the common segment helpers
powerpc: kexec_file: Use the common segment helpers
kexec: Extract kexec_free_segment_cma() from kimage_free_cma()
kexec: Add kexec_rollback_segments() helper
arm64: kexec_file: Fix CMA segment placement retries
LoongArch: kexec_file: Fix CMA segment placement retries
arch/arm64/include/asm/kexec.h | 4 +-
arch/arm64/kernel/kexec_image.c | 15 ++-
arch/arm64/kernel/machine_kexec_file.c | 87 ++++----------
arch/loongarch/include/asm/kexec.h | 3 +-
arch/loongarch/kernel/kexec_efi.c | 15 ++-
arch/loongarch/kernel/kexec_elf.c | 3 +-
arch/loongarch/kernel/machine_kexec_file.c | 80 +++++--------
arch/powerpc/kexec/elf_64.c | 9 +-
arch/powerpc/kexec/file_load_64.c | 18 +--
arch/riscv/include/asm/kexec.h | 4 +-
arch/riscv/kernel/kexec_elf.c | 3 +-
arch/riscv/kernel/kexec_image.c | 3 +-
arch/riscv/kernel/machine_kexec_file.c | 83 ++++----------
arch/x86/kernel/crash.c | 25 +----
arch/x86/kernel/kexec-bzimage64.c | 8 +-
arch/x86/kernel/machine_kexec_64.c | 4 -
include/linux/kexec.h | 14 +++
kernel/kexec_core.c | 25 +++--
kernel/kexec_file.c | 125 +++++++++++++++++++++
19 files changed, 254 insertions(+), 274 deletions(-)
--
2.34.1
More information about the linux-riscv
mailing list