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

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, &regs);
@@ -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