[PATCH] powerpc: Disable and EOI interrupts in machine_crash_shutdown()
Haren Myneni
hbabu at us.ibm.com
Thu Apr 6 08:50:57 EST 2006
linuxppc-dev-bounces+hbabu=us.ibm.com at ozlabs.org wrote on 04/04/2006
04:43:01 AM:
> We've seen several bugs caused by interrupt weirdness in the kdump
kernel.
> Panicking from an interrupt handler means we fail to EOI the interrupt,
and
> so the second kernel never gets that interrupt ever again. We also see
hangs
> on JS20 where we take interrupts in the second kernel early during boot.
>
> This patch fixes both those problems, and although it adds more code to
the
> crash path I think it is the best solution.
>
Michael,
Noticing the following issues when invoked kdump boot using
soft-reset. But the kdump boot is successful. Not a problem using sysrq-c
or Oops.
rtas_call retuned these error messages
"xics_disable_irq: irq=655360: ibm_set_xive(0xff) returned -3" for IRQ#
182
"xics_disable_irq: irq=589825: ibm_set_xive(0xff) returned -3" for IRQ#
216
cat /proc/interrupts
18: 2997 3401 1317 1442 XICS Edge IPI
134: 0 0 0 0 XICS Edge
ehci_hcd:usb1, ohci_hcd:usb2, ohci_hcd:usb3
167: 2169 0 0 0 XICS Edge ipr
182: 55 0 0 0 XICS Edge
hvc_console
216: 0 0 0 0 XICS Edge RAS_EPOW
BAD: 117
Thanks
Haren
> Signed-off-by: Michael Ellerman <michael at ellerman.id.au>
> ---
>
> arch/powerpc/kernel/crash.c | 13 +++++++++++++
> 1 file changed, 13 insertions(+)
>
> Index: kdump/arch/powerpc/kernel/crash.c
> ===================================================================
> --- kdump.orig/arch/powerpc/kernel/crash.c
> +++ kdump/arch/powerpc/kernel/crash.c
> @@ -22,6 +22,7 @@
> #include <linux/elf.h>
> #include <linux/elfcore.h>
> #include <linux/init.h>
> +#include <linux/irq.h>
> #include <linux/types.h>
>
> #include <asm/processor.h>
> @@ -174,6 +175,8 @@ static void crash_kexec_prepare_cpus(voi
>
> void default_machine_crash_shutdown(struct pt_regs *regs)
> {
> + unsigned int irq;
> +
> /*
> * This function is only called after the system
> * has paniced or is otherwise in a critical state.
> @@ -186,6 +189,16 @@ void default_machine_crash_shutdown(stru
> */
> local_irq_disable();
>
> + for_each_irq(irq) {
> + struct irq_desc *desc = irq_descp(irq);
> +
> + if (desc->status & IRQ_INPROGRESS)
> + desc->handler->end(irq);
> +
> + if (!(desc->status & IRQ_DISABLED))
> + desc->handler->disable(irq);
> + }
> +
> if (ppc_md.kexec_cpu_down)
> ppc_md.kexec_cpu_down(1, 0);
>
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev at ozlabs.org
> https://ozlabs.org/mailman/listinfo/linuxppc-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ozlabs.org/pipermail/linuxppc-dev/attachments/20060405/8da3ea66/attachment.htm>
More information about the Linuxppc-dev
mailing list