diff options
Diffstat (limited to 'sys/arch/i386/isa/vector.s')
-rw-r--r-- | sys/arch/i386/isa/vector.s | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/sys/arch/i386/isa/vector.s b/sys/arch/i386/isa/vector.s index 21a403b2a8d..61c78232624 100644 --- a/sys/arch/i386/isa/vector.s +++ b/sys/arch/i386/isa/vector.s @@ -1,4 +1,4 @@ -/* $OpenBSD: vector.s,v 1.11 2001/05/05 23:25:52 art Exp $ */ +/* $OpenBSD: vector.s,v 1.12 2001/11/12 20:28:20 niklas Exp $ */ /* $NetBSD: vector.s,v 1.32 1996/01/07 21:29:47 mycroft Exp $ */ /* @@ -218,13 +218,15 @@ _Xintr/**/irq_num/**/: ;\ MASK(irq_num, icu) /* mask it in hardware */ ;\ ack(irq_num) /* and allow other intrs */ ;\ incl MY_COUNT+V_INTR /* statistical info */ ;\ - testb $IRQ_BIT(irq_num),_cpl + IRQ_BYTE(irq_num) ;\ - jnz _Xhold/**/irq_num /* currently masked; hold it */ ;\ + movl _C_LABEL(ilevel) + (irq_num) * 4, %eax ;\ + movzbl _C_LABEL(cpl),%ebx ;\ + cmpl %eax,%ebx ;\ + jae _C_LABEL(Xhold/**/irq_num)/* currently masked; hold it */;\ _Xresume/**/irq_num/**/: ;\ - movl _cpl,%eax /* cpl to restore on exit */ ;\ + movzbl _C_LABEL(cpl),%eax /* cpl to restore on exit */ ;\ pushl %eax ;\ - orl _intrmask + (irq_num) * 4,%eax ;\ - movl %eax,_cpl /* add in this intr's mask */ ;\ + movl _C_LABEL(ilevel) + (irq_num) * 4,%eax ;\ + movl %eax,_C_LABEL(cpl) /* block enough for this irq */ ;\ sti /* safe to take intrs now */ ;\ movl _intrhand + (irq_num) * 4,%ebx /* head of chain */ ;\ testl %ebx,%ebx ;\ |