diff options
Diffstat (limited to 'arch/powerpc/kernel/irq.c')
-rw-r--r-- | arch/powerpc/kernel/irq.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c index 066bd31551d5..30817d9b20cb 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 |
287 | void fixup_irqs(cpumask_t map) | 287 | void 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(); |