* David Woodhouse <dw...@infradead.org> wrote:
> 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 trivial exception handler in the relocate_kernel environment which > outputs to the early_printk serial console if configured. Currently only > 8250-compatible serial ports are supported, but that could be extended. > > I had to hack up QEMU support for a PCI serial port which matches what > the existing early_printk code can drive, and the *real* 8250_pci driver > doesn't seem to cope with that setup at all, but whatever... the kexec > code now drives the same 32-bit stride which is all that earlyprintk > supports. We can always add more later, if anyone cares. > > Someone who cares might want to 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 (8): > 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 > x86/kexec: Add 8250 MMIO serial port output > x86/kexec: Invalidate GDT/IDT from relocate_kernel() instead of earlier > [DO NOT MERGE] x86/kexec: Add int3 in kexec path for testing > [DO NOT MERGE] x86/kexec: Add CFI type information to relocate_kernel() > > arch/x86/include/asm/kexec.h | 7 ++ > arch/x86/kernel/early_printk.c | 9 ++ > arch/x86/kernel/machine_kexec_64.c | 50 ++++++-- > arch/x86/kernel/relocate_kernel_64.S | 254 > +++++++++++++++++++++++++++++++++++++++- > 4 files changed, 308 insertions(+), 12 deletions(-) I applied the first 3 patches to tip:x86/boot for phased-risk-reduction reasons, and because I had some questions and suggestions starting at patch #4. Thanks, Ingo