diff options
author | Thorsten Lockert <tholo@cvs.openbsd.org> | 1996-09-08 18:44:06 +0000 |
---|---|---|
committer | Thorsten Lockert <tholo@cvs.openbsd.org> | 1996-09-08 18:44:06 +0000 |
commit | 72838af0bafea3307643d28ad9e2d817ba272aa8 (patch) | |
tree | 414b199c554662d08d1c3105226e17666cda1896 /sys/arch/i386/isa | |
parent | 9ace9c4e1cef03e23086b82141b4d59db850874a (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.s | 8 |
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 |