aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/sgi-ip27/ip27-irq.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/mips/sgi-ip27/ip27-irq.c')
-rw-r--r--arch/mips/sgi-ip27/ip27-irq.c8
1 files changed, 2 insertions, 6 deletions
diff --git a/arch/mips/sgi-ip27/ip27-irq.c b/arch/mips/sgi-ip27/ip27-irq.c
index ba8e0794630c..856649cf9f1e 100644
--- a/arch/mips/sgi-ip27/ip27-irq.c
+++ b/arch/mips/sgi-ip27/ip27-irq.c
@@ -207,11 +207,9 @@ static int intr_connect_level(int cpu, int bit)
207{ 207{
208 nasid_t nasid = COMPACT_TO_NASID_NODEID(cpu_to_node(cpu)); 208 nasid_t nasid = COMPACT_TO_NASID_NODEID(cpu_to_node(cpu));
209 struct slice_data *si = cpu_data[cpu].data; 209 struct slice_data *si = cpu_data[cpu].data;
210 unsigned long flags;
211 210
212 set_bit(bit, si->irq_enable_mask); 211 set_bit(bit, si->irq_enable_mask);
213 212
214 local_irq_save(flags);
215 if (!cputoslice(cpu)) { 213 if (!cputoslice(cpu)) {
216 REMOTE_HUB_S(nasid, PI_INT_MASK0_A, si->irq_enable_mask[0]); 214 REMOTE_HUB_S(nasid, PI_INT_MASK0_A, si->irq_enable_mask[0]);
217 REMOTE_HUB_S(nasid, PI_INT_MASK1_A, si->irq_enable_mask[1]); 215 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)
219 REMOTE_HUB_S(nasid, PI_INT_MASK0_B, si->irq_enable_mask[0]); 217 REMOTE_HUB_S(nasid, PI_INT_MASK0_B, si->irq_enable_mask[0]);
220 REMOTE_HUB_S(nasid, PI_INT_MASK1_B, si->irq_enable_mask[1]); 218 REMOTE_HUB_S(nasid, PI_INT_MASK1_B, si->irq_enable_mask[1]);
221 } 219 }
222 local_irq_restore(flags);
223 220
224 return 0; 221 return 0;
225} 222}
@@ -285,6 +282,8 @@ static unsigned int startup_bridge_irq(unsigned int irq)
285 282
286 bridge->b_wid_tflush; 283 bridge->b_wid_tflush;
287 284
285 intr_connect_level(cpu, swlevel);
286
288 return 0; /* Never anything pending. */ 287 return 0; /* Never anything pending. */
289} 288}
290 289
@@ -292,7 +291,6 @@ static unsigned int startup_bridge_irq(unsigned int irq)
292static void shutdown_bridge_irq(unsigned int irq) 291static void shutdown_bridge_irq(unsigned int irq)
293{ 292{
294 struct bridge_controller *bc = IRQ_TO_BRIDGE(irq); 293 struct bridge_controller *bc = IRQ_TO_BRIDGE(irq);
295 struct hub_data *hub = hub_data(cpu_to_node(bc->irq_cpu));
296 bridge_t *bridge = bc->base; 294 bridge_t *bridge = bc->base;
297 int pin, swlevel; 295 int pin, swlevel;
298 cpuid_t cpu; 296 cpuid_t cpu;
@@ -307,8 +305,6 @@ static void shutdown_bridge_irq(unsigned int irq)
307 swlevel = find_level(&cpu, irq); 305 swlevel = find_level(&cpu, irq);
308 intr_disconnect_level(cpu, swlevel); 306 intr_disconnect_level(cpu, swlevel);
309 307
310 __clear_bit(swlevel, hub->irq_alloc_mask);
311
312 bridge->b_int_enable &= ~(1 << pin); 308 bridge->b_int_enable &= ~(1 << pin);
313 bridge->b_wid_tflush; 309 bridge->b_wid_tflush;
314} 310}