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