summaryrefslogtreecommitdiffstats
path: root/sys/arm
diff options
context:
space:
mode:
authorcognet <cognet@FreeBSD.org>2004-12-14 18:57:21 +0000
committercognet <cognet@FreeBSD.org>2004-12-14 18:57:21 +0000
commit7ce4a54e1001f2c05bfa7be54514ace946b23f9c (patch)
tree0f4929e93e678df8ff0bea5d51ee40275ace42be /sys/arm
parentc3726441597c8be2c1a8155ef28e33d4aeb880a3 (diff)
downloadFreeBSD-src-7ce4a54e1001f2c05bfa7be54514ace946b23f9c.zip
FreeBSD-src-7ce4a54e1001f2c05bfa7be54514ace946b23f9c.tar.gz
Enable interrupts once the active ones have been masked.
Diffstat (limited to 'sys/arm')
-rw-r--r--sys/arm/arm/intr.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/sys/arm/arm/intr.c b/sys/arm/arm/intr.c
index b45d942..56a40b7 100644
--- a/sys/arm/arm/intr.c
+++ b/sys/arm/arm/intr.c
@@ -122,7 +122,7 @@ void
arm_handler_execute(void *frame, int irqnb)
{
struct ithd *ithd;
- int i, oldirqstate;
+ int i;
struct intrhand *ih;
struct thread *td = curthread;
@@ -130,6 +130,7 @@ arm_handler_execute(void *frame, int irqnb)
if (irqnb == 0)
irqnb = arm_get_irqnb(frame);
arm_mask_irqs(irqnb);
+ enable_interrupts(I32_bit|F32_bit);
while (irqnb != 0) {
i = ffs(irqnb) - 1;
intrcnt[intrcnt_tab[i]]++;
@@ -139,13 +140,11 @@ 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)
ithread_schedule(ithd);
OpenPOWER on IntegriCloud