[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