linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/2] efi: Fix EFI boot with kexec handover (KHO)
@ 2025-08-19 23:22 Evangelos Petrongonas
  2025-08-19 23:22 ` [PATCH v2 1/2] kexec: introduce is_kho_boot() Evangelos Petrongonas
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Evangelos Petrongonas @ 2025-08-19 23:22 UTC (permalink / raw)
  To: Ard Biesheuvel, Mike Rapoport
  Cc: Evangelos Petrongonas, Alexander Graf, Changyuan Lyu,
	Andrew Morton, Baoquan He, kexec, linux-mm, linux-efi,
	linux-kernel, nh-open-source

This patch series fixes a kernel panic that occurs when booting with
both EFI and KHO (Kexec HandOver) enabled.

The issue arises because EFI's `reserve_regions()` clears all memory
regions with `memblock_remove(0, PHYS_ADDR_MAX)` before rebuilding them
from EFI data. This destroys KHO scratch regions that were set up early
during device tree scanning, causing a panic as the kernel has no valid
memory regions for early allocations.

The first patch introduces `is_kho_boot()` to allow early boot
components to reliably detect if the kernel was booted via KHO-enabled
kexec. The existing `kho_is_enabled()` only checks the command line and
doesn't verify if an actual KHO FDT was passed.

The second patch modifies EFI's `reserve_regions()` to selectively
remove only non-KHO memory regions when KHO is active, preserving the
critical scratch regions while still allowing EFI to rebuild its memory
map.

The patchset was developed/tested on arm64.

On a side note, I have noticed that `kho_populate()` calls
`memblock_set_kho_scratch_only()`, but the `kho` cmdline option is
not checked until much later. Therefore, memblock will use only the
scratch regions that were passed from the outgoing kernel, even if the
incoming kernel doesn't explicitly want that. I am not sure if this is
done on purpose, but in any case we can discuss this in another patch,
as it is orthogonal to this one.

Main Changes in v2 (smaller changes can be found in individual patches):
    - Introduce is_kho_boot()
    - Replaced manual loop with for_each_mem_region macro

Evangelos Petrongonas (2):
  kexec: introduce is_kho_boot()
  efi: Support booting with kexec handover (KHO)

 drivers/firmware/efi/efi-init.c | 28 ++++++++++++++++++++++++----
 include/linux/kexec_handover.h  |  6 ++++++
 kernel/kexec_handover.c         | 20 ++++++++++++++++++++
 3 files changed, 50 insertions(+), 4 deletions(-)

-- 
2.47.3



Amazon Web Services Development Center Germany GmbH
Tamara-Danz-Str. 13
10243 Berlin
Geschaeftsfuehrung: Christian Schlaeger, Jonathan Weiss
Eingetragen am Amtsgericht Charlottenburg unter HRB 257764 B
Sitz: Berlin
Ust-ID: DE 365 538 597


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2025-08-20  8:24 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-19 23:22 [PATCH v2 0/2] efi: Fix EFI boot with kexec handover (KHO) Evangelos Petrongonas
2025-08-19 23:22 ` [PATCH v2 1/2] kexec: introduce is_kho_boot() Evangelos Petrongonas
2025-08-20  8:24   ` Mike Rapoport
2025-08-19 23:22 ` [PATCH v2 2/2] efi: Support booting with kexec handover (KHO) Evangelos Petrongonas
2025-08-20  8:09   ` Mike Rapoport
2025-08-20  8:20 ` [PATCH v2 0/2] efi: Fix EFI boot " Mike Rapoport

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).