summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorcognet <cognet@FreeBSD.org>2005-10-03 14:17:16 +0000
committercognet <cognet@FreeBSD.org>2005-10-03 14:17:16 +0000
commit2f6a0cb5d1d8f8853988c5f0fba8242ea3b4d7ee (patch)
tree7df201de6589793ec90dae91162711701069fc9c /sys
parent929dc4bed6f0ba8ce74d430befa618c6ac516a3d (diff)
downloadFreeBSD-src-2f6a0cb5d1d8f8853988c5f0fba8242ea3b4d7ee.zip
FreeBSD-src-2f6a0cb5d1d8f8853988c5f0fba8242ea3b4d7ee.tar.gz
Make sure the interrupt is masked before processing it, or bad things
can happen.
Diffstat (limited to 'sys')
-rw-r--r--sys/arm/arm/intr.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/sys/arm/arm/intr.c b/sys/arm/arm/intr.c
index cb941f7..36bb74f 100644
--- a/sys/arm/arm/intr.c
+++ b/sys/arm/arm/intr.c
@@ -108,6 +108,7 @@ arm_handler_execute(void *frame, int irqnb)
td->td_intr_nesting_level++;
while ((i = arm_get_next_irq()) != -1) {
+ arm_mask_irq(i);
intrcnt[intrcnt_tab[i]]++;
ithd = ithreads[i];
if (!ithd)
@@ -119,10 +120,9 @@ arm_handler_execute(void *frame, int irqnb)
ih->ih_handler(ih->ih_argument ?
ih->ih_argument : frame);
}
- } else if (ih) {
- arm_mask_irq(i);
+ arm_unmask_irq(i);
+ } else if (ih)
ithread_schedule(ithd);
- }
}
td->td_intr_nesting_level--;
}
OpenPOWER on IntegriCloud