Redo the interrupt livelock code. Simplify the frequency calculations
authorMatthew Dillon <dillon@dragonflybsd.org>
Wed, 26 Oct 2005 00:55:20 +0000 (00:55 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Wed, 26 Oct 2005 00:55:20 +0000 (00:55 +0000)
commitf33e9c1c4269c4045392a8ea0ea237ad12d9359e
tree00b4de5768122e549ba5119f3fecfcee1f7d28ba
parentb19f1310acdadd039aa22c2095f8734eaaeccc56
Redo the interrupt livelock code.  Simplify the frequency calculations
and add a 1-second stabilization requirement before a livelock is removed.
Fix a bug that prevented the code from actually limiting the interrupt rate
properly.

Greatly simplify ithread_done() and rename it to ithread_unmask().  It is
no longer responsible for putting the interrupt thread to sleep.

There is one issue left and that is the livelock code must re-enable the
interrupt at the limit frequency in order to detect when the actual
interrupt rate falls below the low water mark.  In a livelocked situation
the actual interrupt rate will be about 2x the livelock limit because
both the systimer interrupt and the livelocked interrupt will be running.
sys/i386/isa/intr_machdep.c
sys/kern/kern_intr.c
sys/platform/pc32/isa/intr_machdep.c
sys/sys/interrupt.h