patch-pre2.0.13 linux/arch/i386/kernel/irq.c

Next file: linux/drivers/block/Config.in
Previous file: linux/arch/i386/defconfig
Back to the patch index
Back to the overall index

diff -u --recursive --new-file pre2.0.12/linux/arch/i386/kernel/irq.c linux/arch/i386/kernel/irq.c
@@ -343,6 +343,7 @@
 asmlinkage void do_IRQ(int irq, struct pt_regs * regs)
 {
 	struct irqaction * action = *(irq + irq_action);
+	int do_random = 0;
 
 #ifdef __SMP__
 	if(smp_threads_ready && active_kernel_processor!=smp_processor_id())
@@ -354,11 +355,12 @@
 	int_count[smp_processor_id()][irq]++;
 #endif
 	while (action) {
-		if (action->flags & SA_SAMPLE_RANDOM)
-			add_interrupt_randomness(irq);
+		do_random |= action->flags;
 		action->handler(irq, action->dev_id, regs);
 		action = action->next;
 	}
+	if (do_random & SA_SAMPLE_RANDOM)
+		add_interrupt_randomness(irq);
 }
 
 /*
@@ -369,6 +371,8 @@
 asmlinkage void do_fast_IRQ(int irq)
 {
 	struct irqaction * action = *(irq + irq_action);
+	int do_random = 0;
+	
 #ifdef __SMP__
 	/* IRQ 13 is allowed - that's a flush tlb */
 	if(smp_threads_ready && active_kernel_processor!=smp_processor_id() && irq!=13)
@@ -380,9 +384,12 @@
 	int_count[smp_processor_id()][irq]++;
 #endif
 	while (action) {
+		do_random |= action->flags;
 		action->handler(irq, action->dev_id, NULL);
 		action = action->next;
 	}
+	if (do_random & SA_SAMPLE_RANDOM)
+		add_interrupt_randomness(irq);
 }
 
 int setup_x86_irq(int irq, struct irqaction * new)

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov with Sam's (original) version
of this