--- 2.3.47aa1/arch/alpha/kernel/irq.c Mon Feb 21 15:17:30 2000 +++ /tmp/irq.c Tue Feb 22 15:40:57 2000 @@ -283,29 +283,24 @@ struct irqaction *action) { int status, cpu = smp_processor_id(); - unsigned long ipl; kstat.irqs[cpu][irq]++; irq_enter(cpu, irq); status = 1; /* Force the "do bottom halves" bit */ - ipl = rdps() & 7; do { - unsigned long newipl = (action->flags & SA_INTERRUPT ? 7 : 0); - if (newipl != ipl) { - swpipl(newipl); - ipl = newipl; - } - + if (!(action->flags & SA_INTERRUPT)) + __sti(); + else + __cli(); status |= action->flags; action->handler(irq, action->dev_id, regs); action = action->next; } while (action); if (status & SA_SAMPLE_RANDOM) add_interrupt_randomness(irq); - if (ipl == 0) - __cli(); + __cli(); irq_exit(cpu, irq);