patch-2.1.43 linux/arch/i386/kernel/irq.c
Next file: linux/arch/i386/kernel/irq.h
Previous file: linux/arch/i386/kernel/head.S
Back to the patch index
Back to the overall index
- Lines: 40
- Date:
Thu Jun 12 16:22:05 1997
- Orig file:
v2.1.42/linux/arch/i386/kernel/irq.c
- Orig date:
Tue May 13 22:41:01 1997
diff -u --recursive --new-file v2.1.42/linux/arch/i386/kernel/irq.c linux/arch/i386/kernel/irq.c
@@ -142,21 +142,6 @@
* the operations that are needed to keep the AT interrupt-controller
* happy. They are also written to be fast - and to disable interrupts
* as little as humanly possible.
- *
- * NOTE! These macros expand to three different handlers for each line: one
- * complete handler that does all the fancy stuff (including signal handling),
- * and one fast handler that is meant for simple IRQ's that want to be
- * atomic. The specific handler is chosen depending on the SA_INTERRUPT
- * flag when installing a handler. Finally, one "bad interrupt" handler, that
- * is used when no handler is present.
- *
- * The timer interrupt is handled specially to insure that the jiffies
- * variable is updated at all times. Specifically, the timer interrupt is
- * just like the complete handlers except that it is invoked with interrupts
- * disabled and should never re-enable them. If other interrupts were
- * allowed to be processed while the timer interrupt is active, then the
- * other interrupts would have to avoid using the jiffies variable for delay
- * and interval timing operations to avoid hanging the system.
*/
#if NR_IRQS != 16
@@ -539,6 +524,9 @@
status = 0;
action = *(irq + irq_action);
if (action) {
+ if (!(action->flags & SA_INTERRUPT))
+ __sti();
+
do {
status |= action->flags;
action->handler(irq, action->dev_id, ®s);
@@ -546,7 +534,6 @@
} while (action);
if (status & SA_SAMPLE_RANDOM)
add_interrupt_randomness(irq);
-
__cli();
spin_lock(&irq_controller_lock);
unmask_irq(irq);
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov