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