diff options
Diffstat (limited to 'arch/mips/sgi-ip27/ip27-irq.c')
-rw-r--r-- | arch/mips/sgi-ip27/ip27-irq.c | 8 |
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) | |||
292 | static void shutdown_bridge_irq(unsigned int irq) | 291 | static 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 | } |