microblaze: avoid interrupt race conditions
PATCH 1/1 microblaze: avoid interrupt race conditions
The interrupt acknowledge action have to run after the registered interrupt handler. So we have a chance to bear out the corresponding interrupt request in the corresponding controller hardware.
With this reorderng, we optain a proper interrupt handling for level triggerd interrupt sources -- for example the new axi_timer v1.02.a introduced in ISE 13.2
--- arch/microblaze/cpu/interrupts.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
arch/microblaze/cpu/interrupts.c +2 -2
@@ -155,8 +155,6 @@ void interrupt_handler (void)#endif struct irq_action *act = vecs + irqs; - intc->iar = mask << irqs; -#ifdef DEBUG_INT printf ("Jumping to interrupt handler rutine addr %x,count %x,arg %x\n",
@@ -165,6 +163,8 @@ void interrupt_handler (void) act->handler (act->arg); act->count++; + intc->iar = mask << irqs; +#ifdef DEBUG_INT printf ("Dump INTC reg, isr %x, ier %x, iar %x, mer %x\n" , intc->isr, intc->ier, intc->iar, intc->mer);
Signature · 1 line
1.7.0.4
Michal Simek
maintainerPATCH 1/1 microblaze: avoid interrupt race conditions
Quoted 6 lines · Stephan Linz
The interrupt acknowledge action have to run after the registered interrupt handler. So we have a chance to bear out the corresponding interrupt request in the corresponding controller hardware.
With this reorderng, we optain a proper interrupt
obtain
Quoted 1 line
handling for level triggerd interrupt sources -- for
triggered
Quoted 21 lines
example the new
axi_timerv1.02.a introduced in ISE 13.2Signed-off-by Stephan Linz <[email protected]>--- arch/microblaze/cpu/interrupts.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)arch/microblaze/cpu/interrupts.c +0
-2@@ -155,8 +155,6 @@ void interrupt_handler (void)#endif struct irq_action *act = vecs + irqs; - intc->iar = mask << irqs; -#ifdef DEBUG_INT printf ("Jumping to interrupt handler rutine addr %x,count %x,arg %x\n",
arch/microblaze/cpu/interrupts.c void interrupt_handler (void) · line 170
Quoted 8 lines
arch/microblaze/cpu/interrupts.c +2
-0@@ -165,6 +163,8 @@ void interrupt_handler (void) act->handler (act->arg); act->count++; + intc->iar = mask << irqs; +#ifdef DEBUG_INT printf ("Dump INTC reg, isr %x, ier %x, iar %x, mer %x\n" , intc->isr, intc->ier, intc->iar, intc->mer);
Agree. This is good patch.
Please fix that commit message and add my
Thanks,
Michal
Signature · 4 lines
Michal Simek, Ing. (M.Eng) w: www.monstr.eu p: +42-0-721842854 Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/ Microblaze U-BOOT custodian