aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel/irq.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/kernel/irq.c')
-rw-r--r--arch/powerpc/kernel/irq.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
index 066bd31551d..30817d9b20c 100644
--- a/arch/powerpc/kernel/irq.c
+++ b/arch/powerpc/kernel/irq.c
@@ -284,30 +284,33 @@ u64 arch_irq_stat_cpu(unsigned int cpu)
284} 284}
285 285
286#ifdef CONFIG_HOTPLUG_CPU 286#ifdef CONFIG_HOTPLUG_CPU
287void fixup_irqs(cpumask_t map) 287void fixup_irqs(const struct cpumask *map)
288{ 288{
289 struct irq_desc *desc; 289 struct irq_desc *desc;
290 unsigned int irq; 290 unsigned int irq;
291 static int warned; 291 static int warned;
292 cpumask_var_t mask;
292 293
293 for_each_irq(irq) { 294 alloc_cpumask_var(&mask, GFP_KERNEL);
294 cpumask_t mask;
295 295
296 for_each_irq(irq) {
296 desc = irq_to_desc(irq); 297 desc = irq_to_desc(irq);
297 if (desc && desc->status & IRQ_PER_CPU) 298 if (desc && desc->status & IRQ_PER_CPU)
298 continue; 299 continue;
299 300
300 cpumask_and(&mask, desc->affinity, &map); 301 cpumask_and(mask, desc->affinity, map);
301 if (any_online_cpu(mask) == NR_CPUS) { 302 if (cpumask_any(mask) >= nr_cpu_ids) {
302 printk("Breaking affinity for irq %i\n", irq); 303 printk("Breaking affinity for irq %i\n", irq);
303 mask = map; 304 cpumask_copy(mask, map);
304 } 305 }
305 if (desc->chip->set_affinity) 306 if (desc->chip->set_affinity)
306 desc->chip->set_affinity(irq, &mask); 307 desc->chip->set_affinity(irq, mask);
307 else if (desc->action && !(warned++)) 308 else if (desc->action && !(warned++))
308 printk("Cannot set affinity for irq %i\n", irq); 309 printk("Cannot set affinity for irq %i\n", irq);
309 } 310 }
310 311
312 free_cpumask_var(mask);
313
311 local_irq_enable(); 314 local_irq_enable();
312 mdelay(1); 315 mdelay(1);
313 local_irq_disable(); 316 local_irq_disable();