*/
        for (irq=0; irq < NR_IRQS; irq++) {
                if (vectors_in_migration[irq]) {
+                       struct pt_regs *old_regs = set_irq_regs(NULL);
+
                        vectors_in_migration[irq]=0;
-                       __do_IRQ(irq, NULL);
+                       __do_IRQ(irq);
+                       set_irq_regs(old_regs);
                }
        }
 
 
          */
        while (vector != IA64_SPURIOUS_INT_VECTOR) {
                if (!IS_RESCHEDULE(vector)) {
+                       struct pt_regs *old_regs = set_irq_regs(NULL);
+
                        ia64_setreg(_IA64_REG_CR_TPR, vector);
                        ia64_srlz_d();
 
                         * Probably could shared code.
                         */
                        vectors_in_migration[local_vector_to_irq(vector)]=0;
-                       __do_IRQ(local_vector_to_irq(vector), NULL);
+                       __do_IRQ(local_vector_to_irq(vector));
+                       set_irq_regs(old_regs);
 
                        /*
                         * Disable interrupts and send EOI
 
 
 #ifdef CONFIG_SMP
-extern irqreturn_t handle_IPI (int irq, void *dev_id, struct pt_regs *regs);
+extern irqreturn_t handle_IPI (int irq, void *dev_id);
 
 static struct irqaction ipi_irqaction = {
        .handler =      handle_IPI,
 
 
 #define SN_LB_INT_WAR_INTERVAL 100
 
-void sn_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+void sn_timer_interrupt(int irq, void *dev_id)
 {
        /* LED blinking */
        if (!pda->hb_count--) {
 
        if (!port->sc_port.irq) {
                spin_lock_irqsave(&port->sc_port.lock, flags);
                if (sn_process_input)
-                       sn_receive_chars(port, NULL, flags);
+                       sn_receive_chars(port, flags);
                sn_transmit_chars(port, TRANSMIT_RAW);
                spin_unlock_irqrestore(&port->sc_port.lock, flags);
                mod_timer(&port->sc_timer,