Re: [PATCH v9 0/4] x86/kexec: Add exception handling for relocate_kernel

From: David Woodhouse
Date: Thu Apr 10 2025 - 03:31:48 EST


On 26 March 2025 15:16:00 CET, David Woodhouse <dwmw2@xxxxxxxxxxxxx> wrote:
>Continuing the drip-feed of the exception handling support, on top of the
>current tip/x86/asm branch. This adds output to the serial port configured
>by earlyprintk, reduces the window during which exceptions can't be handled
>during the transition from kernel to relocate_kernel environment, and adds
>a kselftest for the kexec-jump and exception handling.
>
>v9:
> • Rebase on top of partial merge into tip/x86/asm (commit 0717b1392dc7).
> • Add kselftest.
> • Update to cope with static_call() usage in earlyprintk.
> • Drop the attempt at adding CFI support for relocate_kernel().
>
>v8: https://lore.kernel.org/all/20250314173226.3062535-1-dwmw2@xxxxxxxxxxxxx/
> • Fix UNRET objtool warning in exc_handler.
> • Clean up magic numbers in stack frame for exc_handler.
> • Fix i386 build error due to making the debug support unconditional.
> • The int3 is still a [DO NOT APPLY] hack for later, and I plan to deal
> with that with a userspace test case based on
> http://david.woodhou.se/loadret.c which will exercise kexec-jump at the
> same time.
>
>v7: https://lore.kernel.org/kexec/20250312144257.2348250-1-dwmw2@xxxxxxxxxxxxx/
> • Drop CONFIG_KEXEC_DEBUG and make it all unconditional in order to
> "throw regressions back into the face of whoever manages to introduce
> them" (Ingo, https://lore.kernel.org/kexec/Z7rwA-qVauX7lY8G@xxxxxxxxx/)
> • Move IDT invalidation into relocate_kernel() itself.
>
>v6: https://lore.kernel.org/kexec/20250115191423.587774-1-dwmw2@xxxxxxxxxxxxx/
> • Rebase onto already-merged fixes in tip/x86/boot.
> • Move CONFIG_KEXEC_DEBUG to generic kernel/Kconfig.kexec as Bartosz is
> working on an Arm64 version.
>
>v5: https://lore.kernel.org/kexec/20241205153343.3275139-1-dwmw2@xxxxxxxxxxxxx/T/
> • Drop [RFC].
> • Drop _PAGE_NOPTISHADOW fix, which Ingo already took into tip/x86/urgent.
> • Add memory-mapped serial port support (32-bit MMIO spacing only).
>
>v4 (RFC): https://lore.kernel.org/kexec/20241127190343.44916-1-dwmw2@xxxxxxxxxxxxx/T/
> • Add _PAGE_NOPTISHADOW fix for the identmap code.
> • Drop explicit map of control page, which was masking the identmap bug.
>
>v3 (RFC): https://lore.kernel.org/kexec/20241125100815.2512-1-dwmw2@xxxxxxxxxxxxx/T/
> • Add CONFIG_KEXEC_DEBUG option and use earlyprintk config.
> • Allocate PGD separately from control page.
> • Explicitly map control page into identmap.
>
>V2 (RFC): https://lore.kernel.org/kexec/20241122224715.171751-1-dwmw2@xxxxxxxxxxxxx/T/
> • Introduce linker script, start to clean up data access.
>
>V1 (RFC): https://lore.kernel.org/kexec/20241103054019.3795299-1-dwmw2@xxxxxxxxxxxxx/T/
> • Initial proof-of-concept hacks.
>
>
>David Woodhouse (4):
> x86/kexec: Add 8250 serial port output
> x86/kexec: Add 8250 MMIO serial port output
> x86/kexec: Invalidate GDT/IDT from relocate_kernel() instead of earlier
> selftests/kexec: Add x86_64 selftest for kexec-jump and exception handling
>
> arch/x86/include/asm/kexec.h | 2 +
> arch/x86/kernel/early_printk.c | 9 +++
> arch/x86/kernel/machine_kexec_64.c | 27 ++++++---
> arch/x86/kernel/relocate_kernel_64.S | 70 ++++++++++++++++++++---
> tools/testing/selftests/kexec/Makefile | 7 +++
> tools/testing/selftests/kexec/test_kexec_jump.c | 72 ++++++++++++++++++++++++
> tools/testing/selftests/kexec/test_kexec_jump.sh | 42 ++++++++++++++
> 7 files changed, 213 insertions(+), 16 deletions(-)
>
>

Ping?