--- arch/alpha/kernel/irq.c	2004-08-14 07:37:38.000000000 +0200
+++ arch/alpha/kernel/irq.c	2005-03-14 20:34:33.000000000 +0100
@@ -83,22 +83,20 @@
 		 struct irqaction *action)
 {
 	int status = 1;	/* Force the "do bottom halves" bit */
+	int retval = 0;
 
-	do {
-		if (!(action->flags & SA_INTERRUPT))
-			local_irq_enable();
-		else
-			local_irq_disable();
+	if (!(action->flags & SA_INTERRUPT))
+		local_irq_enable();
 
+	do {
 		status |= action->flags;
-		action->handler(irq, action->dev_id, regs);
+		retval |= action->handler(irq, action->dev_id, regs);
 		action = action->next;
 	} while (action);
 	if (status & SA_SAMPLE_RANDOM)
 		add_interrupt_randomness(irq);
 	local_irq_disable();
-
-	return status;
+	return retval;
 }
 
 /*
