I'm having trouble with interrupts that occur during interrupts. I'm
working on the Vr41xx port.
First, there was this problem that we would lose the timer irq click. It
just stopped clicking. /proc/interrupts showed no increase for timer. It
happend when we pushed lots of data through the serial port. Mike had an
idea that it might be because of interrupts occurring during other
But why did the timer irq stop clicking? I could still use the console
w/keyboard on my Clio. cat /proc/interrupts showed the other irqs clicking,
but not timer. It was like the timer irq was getting masked.
Hmmmm... I poked around and saw irq.c masking and unmasking in do_IRQ. I
looked at i386 and couldn't find a similar operation. So I commented them
out to see if that would fix the mysterious lost timer problem. It did!
Cool. I figured the Vr is just finicky and doesn't like to be messed around
with masking/unmasking so much.
But... now a new problem. If all my interrupts are set for SA_INTERRUPT, no
problem. If I have one that isn't SA_INTERRUPT, problem, since that lets
do_IRQ do __sti.
I wonder - if an interrupt occurs inside do_IRQ, what happens? Does it come
back to do_IRQ when it's finished? It should, right? But if it didn't, it
could have left the timer masked.
I'm also thinking "maybe there is some mips thing going on here".