diff options
author | cognet <cognet@FreeBSD.org> | 2005-10-03 14:17:16 +0000 |
---|---|---|
committer | cognet <cognet@FreeBSD.org> | 2005-10-03 14:17:16 +0000 |
commit | 2f6a0cb5d1d8f8853988c5f0fba8242ea3b4d7ee (patch) | |
tree | 7df201de6589793ec90dae91162711701069fc9c /sys | |
parent | 929dc4bed6f0ba8ce74d430befa618c6ac516a3d (diff) | |
download | FreeBSD-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.c | 6 |
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--; } |