440GX interrupt
Eugene Surovegin
ebs at ebshome.net
Fri Feb 18 10:36:05 EST 2005
On Thu, Feb 17, 2005 at 02:54:14PM -0800, Eugene Surovegin wrote:
> Probably it's a race which cannot be avoided anyway because external
> IRQs are completely async, and your version of ppc4xx_pic.c just has a
> bug. I'll think about it a little more.
Uhh, yes, I think it's a bug in 4xx version of disable_irq.
We have to ACK parent UIC after disabling IRQ to prevent false
triggering in case this IRQ was already pending during disable_irq
call.
Here is a patch against current 2.6, so you can get an idea what I'm
talking about :):
===== arch/ppc/syslib/ppc4xx_pic.c 1.13 vs edited =====
--- 1.13/arch/ppc/syslib/ppc4xx_pic.c 2005-01-03 15:49:19 -08:00
+++ edited/arch/ppc/syslib/ppc4xx_pic.c 2005-02-17 15:31:07 -08:00
@@ -48,6 +48,7 @@
{ \
ppc_cached_irq_mask[n] &= ~IRQ_MASK_UIC##n(irq); \
mtdcr(DCRN_UIC_ER(UIC##n), ppc_cached_irq_mask[n]); \
+ ACK_UIC##n##_PARENT \
} \
\
static void ppc4xx_uic##n##_ack(unsigned int irq) \
You can send me your version of ppc4xx_pic.c or put it somewhere on
www and I'll make a patch for it.
--
Eugene
More information about the Linuxppc-embedded
mailing list