mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [RFC PATCH v3 00/20] x86/kexec: Add exception handling for relocate_kernel and further yak-shaving
@ 2024-11-25  9:54 David Woodhouse
  2024-11-25  9:54 ` [RFC PATCH v3 01/20] x86/kexec: Ensure control_code_page is mapped in kexec page tables David Woodhouse
                   ` (19 more replies)
  0 siblings, 20 replies; 31+ messages in thread
From: David Woodhouse @ 2024-11-25  9:54 UTC (permalink / raw)
  To: kexec
  Cc: Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86,
	H. Peter Anvin, David Woodhouse, Kirill A. Shutemov, Kai Huang,
	Nikolay Borisov, linux-kernel, Simon Horman, Dave Young,
	Peter Zijlstra, jpoimboe, bsz

Debugging kexec failures is painful, as anything going wrong in execution
of the critical relocate_kernel() function tends to just lead to a triple
fault. Thus leading to *weeks* of my life that I won't get back. Having
hacked something up for my own use, I figured I should share it...

Add a CONFIG_KEXEC_DEBUG option which sets up a trivial exception handler
in that environment, and outputs to the early_printk serial console if
configured. Currently only I/O-based 8250 serial ports are supported, but
that could be extended.

While we're here, clean the code up a little and fix some other problems.
Most notably, load a suitable GDT on the way back into the kernel after a
KEXEC_PRESERVE_CONTEXT invocation instead of trusting the called code to
do so. And explicitly map the control_code_page into the identmap used by
relocate_kernel() instead of depending on it being in the same superpage
as something else that gets mapped.

I should probably bring the i386 version into line with this, although
the lack of rip-based addressing makes all the PIC code a bit harder.

David Woodhouse (20):
      x86/kexec: Ensure control_code_page is mapped in kexec page tables
      x86/kexec: Restore GDT on return from preserve_context kexec
      x86/kexec: Clean up and document register use in relocate_kernel_64.S
      x86/kexec: Use named labels in swap_pages in relocate_kernel_64.S
      x86/kexec: Only swap pages for preserve_context mode
      x86/kexec: Allocate PGD for x86_64 transition page tables separately
      x86/kexec: Copy control page into place in machine_kexec_prepare()
      x86/kexec: Invoke copy of relocate_kernel() instead of the original
      x86/kexec: Move relocate_kernel to kernel .data section
      x86/kexec: Add data section to relocate_kernel
      x86/kexec: Drop page_list argument from relocate_kernel()
      x86/kexec: Eliminate writes through kernel mapping of relocate_kernel page
      x86/kexec: Clean up register usage in relocate_kernel()
      x86/kexec: Mark relocate_kernel page as ROX instead of RWX
      x86/kexec: Add CONFIG_KEXEC_DEBUG option
      x86/kexec: Debugging support: load a GDT
      x86/kexec: Debugging support: Load an IDT and basic exception entry points
      x86/kexec: Debugging support: Dump registers on exception
      x86/kexec: Add 8250 serial port output
      [DO NOT MERGE] x86/kexec: Add int3 in kexec path for testing

 arch/x86/Kconfig.debug               |   8 +
 arch/x86/include/asm/kexec.h         |  34 +++-
 arch/x86/include/asm/sections.h      |   1 +
 arch/x86/kernel/callthunks.c         |   6 +
 arch/x86/kernel/early_printk.c       |   6 +
 arch/x86/kernel/machine_kexec_64.c   | 127 ++++++++----
 arch/x86/kernel/relocate_kernel_64.S | 385 +++++++++++++++++++++++++++--------
 arch/x86/kernel/vmlinux.lds.S        |  16 +-


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

end of thread, other threads:[~2024-11-26 16:10 UTC | newest]

Thread overview: 31+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-11-25  9:54 [RFC PATCH v3 00/20] x86/kexec: Add exception handling for relocate_kernel and further yak-shaving David Woodhouse
2024-11-25  9:54 ` [RFC PATCH v3 01/20] x86/kexec: Ensure control_code_page is mapped in kexec page tables David Woodhouse
2024-11-25 10:29   ` [EXTERNAL] " David Woodhouse
2024-11-25 13:19     ` David Woodhouse
2024-11-25 17:05       ` [RFC PATCH] x86/mm: Disable PTI for kernel_ident_mapping_init() David Woodhouse
2024-11-25 18:31         ` Dave Hansen
2024-11-25 18:53           ` David Woodhouse
2024-11-25 19:13             ` Dave Hansen
2024-11-25 19:36               ` David Woodhouse
2024-11-26 11:42               ` David Woodhouse
2024-11-26 15:49                 ` Dave Hansen
2024-11-26 16:09                   ` David Woodhouse
2024-11-25  9:54 ` [RFC PATCH v3 02/20] x86/kexec: Restore GDT on return from preserve_context kexec David Woodhouse
2024-11-25  9:54 ` [RFC PATCH v3 03/20] x86/kexec: Clean up and document register use in relocate_kernel_64.S David Woodhouse
2024-11-25  9:54 ` [RFC PATCH v3 04/20] x86/kexec: Use named labels in swap_pages " David Woodhouse
2024-11-25  9:54 ` [RFC PATCH v3 05/20] x86/kexec: Only swap pages for preserve_context mode David Woodhouse
2024-11-25  9:54 ` [RFC PATCH v3 06/20] x86/kexec: Allocate PGD for x86_64 transition page tables separately David Woodhouse
2024-11-25  9:54 ` [RFC PATCH v3 07/20] x86/kexec: Copy control page into place in machine_kexec_prepare() David Woodhouse
2024-11-25  9:54 ` [RFC PATCH v3 08/20] x86/kexec: Invoke copy of relocate_kernel() instead of the original David Woodhouse
2024-11-25  9:54 ` [RFC PATCH v3 09/20] x86/kexec: Move relocate_kernel to kernel .data section David Woodhouse
2024-11-25  9:54 ` [RFC PATCH v3 10/20] x86/kexec: Add data section to relocate_kernel David Woodhouse
2024-11-25  9:54 ` [RFC PATCH v3 11/20] x86/kexec: Drop page_list argument from relocate_kernel() David Woodhouse
2024-11-25  9:54 ` [RFC PATCH v3 12/20] x86/kexec: Eliminate writes through kernel mapping of relocate_kernel page David Woodhouse
2024-11-25  9:54 ` [RFC PATCH v3 13/20] x86/kexec: Clean up register usage in relocate_kernel() David Woodhouse
2024-11-25  9:54 ` [RFC PATCH v3 14/20] x86/kexec: Mark relocate_kernel page as ROX instead of RWX David Woodhouse
2024-11-25  9:54 ` [RFC PATCH v3 15/20] x86/kexec: Add CONFIG_KEXEC_DEBUG option David Woodhouse
2024-11-25  9:54 ` [RFC PATCH v3 16/20] x86/kexec: Debugging support: load a GDT David Woodhouse
2024-11-25  9:54 ` [RFC PATCH v3 17/20] x86/kexec: Debugging support: Load an IDT and basic exception entry points David Woodhouse
2024-11-25  9:54 ` [RFC PATCH v3 18/20] x86/kexec: Debugging support: Dump registers on exception David Woodhouse
2024-11-25  9:54 ` [RFC PATCH v3 19/20] x86/kexec: Add 8250 serial port output David Woodhouse
2024-11-25  9:54 ` [RFC PATCH v3 20/20] [DO NOT MERGE] x86/kexec: Add int3 in kexec path for testing David Woodhouse

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®