From: Jun Sun (jsun_at_junsun.net)
Date: 2002-07-19 23:12:49 UTC
On one of my systems, I found host ap driver caused many spurious interrupts.
The problem is at the end of hfa384x_cmd() function in prism2.c file:
spin_unlock_irqrestore(&local->cmdlock, flags); return res;
It appears HFA384X_OUTW() would do an interrupt acknowledgement, followed by immediately opening interrupts again. What might have happened is that interrupt acknowledge does not propagrate fast enough. So when interrupts are opened again, CPU still sees a pending interrupt. When we actually take the interrupt, the irq ack propagates to CPU and we found no IRQ.
I added a few cycles of delay between those two statements, which makes the spurious interrupts go away. That seems to confirm the hypothesis.
If this is true, is there any way we can shuffle the code around so that the IRQ ack happens a little earlier than the intr re-opening?