summaryrefslogtreecommitdiff
path: root/sys/arch/i386/isa
diff options
context:
space:
mode:
authorThorsten Lockert <tholo@cvs.openbsd.org>1996-09-08 18:44:06 +0000
committerThorsten Lockert <tholo@cvs.openbsd.org>1996-09-08 18:44:06 +0000
commit72838af0bafea3307643d28ad9e2d817ba272aa8 (patch)
tree414b199c554662d08d1c3105226e17666cda1896 /sys/arch/i386/isa
parent9ace9c4e1cef03e23086b82141b4d59db850874a (diff)
Only count the interrupt if the interrupt handler claims that it did
anything with it.
Diffstat (limited to 'sys/arch/i386/isa')
-rw-r--r--sys/arch/i386/isa/vector.s8
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/arch/i386/isa/vector.s b/sys/arch/i386/isa/vector.s
index 82202e35044..ab5273e53e9 100644
--- a/sys/arch/i386/isa/vector.s
+++ b/sys/arch/i386/isa/vector.s
@@ -235,18 +235,20 @@ _Xresume/**/irq_num/**/: ;\
call IH_FUN(%ebx) /* call it */ ;\
addl $4,%esp /* toss the arg */ ;\
STRAY_INTEGRATE /* maybe he claimed it */ ;\
+ orl %eax,%eax /* should it be counted? */ ;\
+ jz 5f /* no, skip it */ ;\
incl IH_COUNT(%ebx) /* count the intrs */ ;\
- movl IH_NEXT(%ebx),%ebx /* next handler in chain */ ;\
+5: movl IH_NEXT(%ebx),%ebx /* next handler in chain */ ;\
testl %ebx,%ebx ;\
jnz 7b ;\
STRAY_TEST /* see if it's a stray */ ;\
-5: UNMASK(irq_num, icu) /* unmask it in hardware */ ;\
+6: UNMASK(irq_num, icu) /* unmask it in hardware */ ;\
jmp _Xdoreti /* lower spl and do ASTs */ ;\
IDTVEC(stray/**/irq_num) ;\
pushl $irq_num ;\
call _isa_strayintr ;\
addl $4,%esp ;\
- jmp 5b ;\
+ jmp 6b ;\
IDTVEC(hold/**/irq_num) ;\
orb $IRQ_BIT(irq_num),_ipending + IRQ_BYTE(irq_num) ;\
INTRFASTEXIT