include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit...
[safe/jmp/linux-2.6] / arch / mips / sgi-ip27 / ip27-irq.c
index 554a5c7..6a123ea 100644 (file)
@@ -17,7 +17,7 @@
 #include <linux/interrupt.h>
 #include <linux/ioport.h>
 #include <linux/timex.h>
-#include <linux/slab.h>
+#include <linux/smp.h>
 #include <linux/random.h>
 #include <linux/kernel.h>
 #include <linux/kernel_stat.h>
@@ -207,11 +207,9 @@ static int intr_connect_level(int cpu, int bit)
 {
        nasid_t nasid = COMPACT_TO_NASID_NODEID(cpu_to_node(cpu));
        struct slice_data *si = cpu_data[cpu].data;
-       unsigned long flags;
 
        set_bit(bit, si->irq_enable_mask);
 
-       local_irq_save(flags);
        if (!cputoslice(cpu)) {
                REMOTE_HUB_S(nasid, PI_INT_MASK0_A, si->irq_enable_mask[0]);
                REMOTE_HUB_S(nasid, PI_INT_MASK1_A, si->irq_enable_mask[1]);
@@ -219,7 +217,6 @@ static int intr_connect_level(int cpu, int bit)
                REMOTE_HUB_S(nasid, PI_INT_MASK0_B, si->irq_enable_mask[0]);
                REMOTE_HUB_S(nasid, PI_INT_MASK1_B, si->irq_enable_mask[1]);
        }
-       local_irq_restore(flags);
 
        return 0;
 }
@@ -285,6 +282,8 @@ static unsigned int startup_bridge_irq(unsigned int irq)
 
         bridge->b_wid_tflush;
 
+       intr_connect_level(cpu, swlevel);
+
         return 0;       /* Never anything pending.  */
 }
 
@@ -375,14 +374,13 @@ int __devinit request_bridge_irq(struct bridge_controller *bc)
        return irq;
 }
 
-extern void ip27_rt_timer_interrupt(void);
-
 asmlinkage void plat_irq_dispatch(void)
 {
        unsigned long pending = read_c0_cause() & read_c0_status();
+       extern unsigned int rt_timer_irq;
 
        if (pending & CAUSEF_IP4)
-               ip27_rt_timer_interrupt();
+               do_IRQ(rt_timer_irq);
        else if (pending & CAUSEF_IP2)  /* PI_INT_PEND_0 or CC_PEND_{A|B} */
                ip27_do_irq_mask0();
        else if (pending & CAUSEF_IP3)  /* PI_INT_PEND_1 */