summaryrefslogtreecommitdiffstats
path: root/sys/arm
diff options
context:
space:
mode:
authorcognet <cognet@FreeBSD.org>2004-11-23 16:31:16 +0000
committercognet <cognet@FreeBSD.org>2004-11-23 16:31:16 +0000
commit61c101ec0de2d94095739fdab995de15573f579c (patch)
treeb6fecc8e003d2bdaf134246da267a039f9260b7a /sys/arm
parent8519448b1b319816778c82132e8cfcc9bdbb1368 (diff)
downloadFreeBSD-src-61c101ec0de2d94095739fdab995de15573f579c.zip
FreeBSD-src-61c101ec0de2d94095739fdab995de15573f579c.tar.gz
Enable interrupts as soon as the pending interrupts have been masked.
Diffstat (limited to 'sys/arm')
-rw-r--r--sys/arm/arm/intr.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/sys/arm/arm/intr.c b/sys/arm/arm/intr.c
index e4e0506..b45d942 100644
--- a/sys/arm/arm/intr.c
+++ b/sys/arm/arm/intr.c
@@ -139,17 +139,16 @@ arm_handler_execute(void *frame, int irqnb)
continue;
ih = TAILQ_FIRST(&ithd->it_handlers);
if (ih && ih->ih_flags & IH_FAST) {
+ oldirqstate = disable_interrupts(I32_bit);
TAILQ_FOREACH(ih, &ithd->it_handlers,
ih_next) {
ih->ih_handler(ih->ih_argument ?
ih->ih_argument : frame);
}
+ restore_interrupts(oldirqstate);
arm_unmask_irqs(1 << i);
- } else if (ih) {
- oldirqstate = enable_interrupts(I32_bit);
+ } else if (ih)
ithread_schedule(ithd);
- restore_interrupts(oldirqstate);
- }
irqnb |= arm_get_irqnb(frame);
}
td->td_intr_nesting_level--;
OpenPOWER on IntegriCloud