Fri Oct 22 17:57:35 EDT 2010
mach-at91 makes use of interrupt priority and nesting, which can be
set via a call to at91samXXXX_init_interrupts(). This utilises the
processor's internal IRQ priority mechanism.
This worked fine up to kernel 2.6.34.x, but not since kernel 2.6.35
Kernel 2.6.35 introduced a patch
(the diff: http://git.kernel.org/?p=3Dlinux/kernel/git/stable/linux-2.6.35.=
that disables all IRQs while handling interrupts. This is done by
removing the lines that re-enabled them. As a result, no other
interrupt can nest into the current interrupt. This makes all ARM
interrupt priorities (related to nesting) completely ineffective.
I can add at this point, that as far as I checked, mach-at91 is the
only ARM mach that uses the processor's interrupt priorities (others
like OMAP or IXP do not).
There is a discussion of this patch here:
I can think of some ways to deal with this problem:
Give up interrupt priorities as others do + remove the priority code
As Ingo Molnar suggests, re-enable interrupts inside the all the at91
IRQ handlers (drivers etc.), thus preserving the old behaviour. But
now we have to remember to do this for every new driver...
Use threaded-interrupts (handler run as thread) and make use of thread
priorities. Again - change all existing at91 drivers (also, setting
interrupt-thread priority is not supported yet).
Convince the commiters to re-enable the interrupts as before 2.6.35
What do you think?
Maybe you can forward this mail to others. I don't know who should be
addressed in this matter.
Thank's a lot,
More information about the linux-arm-kernel