Fix a long-standing bug in the livelock code. An interrupt thread normally
authorMatthew Dillon <dillon@dragonflybsd.org>
Wed, 26 Oct 2005 01:16:04 +0000 (01:16 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Wed, 26 Oct 2005 01:16:04 +0000 (01:16 +0000)
commit363d922a1041a8ba01f398ac4ba6bc02b5bb6f64
treea73b6d84e38355ee0395994ef3bdc51974b47237
parentf33e9c1c4269c4045392a8ea0ea237ad12d9359e
Fix a long-standing bug in the livelock code.  An interrupt thread normally
unmasks the hardware interrupt source when it is through.  However, if a
livelock occurs the interrupt thread may be polled long after a device has
terminated operations and torn down its interrupt.  To solve this problem,
only unmask the hardware interrupt if the IRQ still has device handlers
installed.  This fixes a weird problem with the parallel port driver
(which installs and tears-down IRQ 7 on each write() for some unfathomable
reason).
sys/kern/kern_intr.c