diff options
author | cognet <cognet@FreeBSD.org> | 2004-12-14 18:57:21 +0000 |
---|---|---|
committer | cognet <cognet@FreeBSD.org> | 2004-12-14 18:57:21 +0000 |
commit | 7ce4a54e1001f2c05bfa7be54514ace946b23f9c (patch) | |
tree | 0f4929e93e678df8ff0bea5d51ee40275ace42be /sys/arm | |
parent | c3726441597c8be2c1a8155ef28e33d4aeb880a3 (diff) | |
download | FreeBSD-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.c | 5 |
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); |