powerpc/cpumask: Convert fixup_irqs to new cpumask API
Use new cpumask_* functions, and dynamically allocate cpumask in fixup_irqs. Signed-off-by: Anton Blanchard <anton@samba.org> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
committed by
Benjamin Herrenschmidt
parent
bfb9126def
commit
b6decb7079
@ -40,7 +40,7 @@ extern void smp_message_recv(int);
|
|||||||
DECLARE_PER_CPU(unsigned int, cpu_pvr);
|
DECLARE_PER_CPU(unsigned int, cpu_pvr);
|
||||||
|
|
||||||
#ifdef CONFIG_HOTPLUG_CPU
|
#ifdef CONFIG_HOTPLUG_CPU
|
||||||
extern void fixup_irqs(cpumask_t map);
|
extern void fixup_irqs(const struct cpumask *map);
|
||||||
int generic_cpu_disable(void);
|
int generic_cpu_disable(void);
|
||||||
int generic_cpu_enable(unsigned int cpu);
|
int generic_cpu_enable(unsigned int cpu);
|
||||||
void generic_cpu_die(unsigned int cpu);
|
void generic_cpu_die(unsigned int cpu);
|
||||||
|
@ -290,30 +290,33 @@ u64 arch_irq_stat_cpu(unsigned int cpu)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_HOTPLUG_CPU
|
#ifdef CONFIG_HOTPLUG_CPU
|
||||||
void fixup_irqs(cpumask_t map)
|
void fixup_irqs(const struct cpumask *map)
|
||||||
{
|
{
|
||||||
struct irq_desc *desc;
|
struct irq_desc *desc;
|
||||||
unsigned int irq;
|
unsigned int irq;
|
||||||
static int warned;
|
static int warned;
|
||||||
|
cpumask_var_t mask;
|
||||||
|
|
||||||
|
alloc_cpumask_var(&mask, GFP_KERNEL);
|
||||||
|
|
||||||
for_each_irq(irq) {
|
for_each_irq(irq) {
|
||||||
cpumask_t mask;
|
|
||||||
|
|
||||||
desc = irq_to_desc(irq);
|
desc = irq_to_desc(irq);
|
||||||
if (desc && desc->status & IRQ_PER_CPU)
|
if (desc && desc->status & IRQ_PER_CPU)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
cpumask_and(&mask, desc->affinity, &map);
|
cpumask_and(mask, desc->affinity, map);
|
||||||
if (any_online_cpu(mask) == NR_CPUS) {
|
if (cpumask_any(mask) >= nr_cpu_ids) {
|
||||||
printk("Breaking affinity for irq %i\n", irq);
|
printk("Breaking affinity for irq %i\n", irq);
|
||||||
mask = map;
|
cpumask_copy(mask, map);
|
||||||
}
|
}
|
||||||
if (desc->chip->set_affinity)
|
if (desc->chip->set_affinity)
|
||||||
desc->chip->set_affinity(irq, &mask);
|
desc->chip->set_affinity(irq, mask);
|
||||||
else if (desc->action && !(warned++))
|
else if (desc->action && !(warned++))
|
||||||
printk("Cannot set affinity for irq %i\n", irq);
|
printk("Cannot set affinity for irq %i\n", irq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free_cpumask_var(mask);
|
||||||
|
|
||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
mdelay(1);
|
mdelay(1);
|
||||||
local_irq_disable();
|
local_irq_disable();
|
||||||
|
@ -313,7 +313,7 @@ int generic_cpu_disable(void)
|
|||||||
set_cpu_online(cpu, false);
|
set_cpu_online(cpu, false);
|
||||||
#ifdef CONFIG_PPC64
|
#ifdef CONFIG_PPC64
|
||||||
vdso_data->processorCount--;
|
vdso_data->processorCount--;
|
||||||
fixup_irqs(cpu_online_map);
|
fixup_irqs(cpu_online_mask);
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -333,7 +333,7 @@ int generic_cpu_enable(unsigned int cpu)
|
|||||||
cpu_relax();
|
cpu_relax();
|
||||||
|
|
||||||
#ifdef CONFIG_PPC64
|
#ifdef CONFIG_PPC64
|
||||||
fixup_irqs(cpu_online_map);
|
fixup_irqs(cpu_online_mask);
|
||||||
/* counter the irq disable in fixup_irqs */
|
/* counter the irq disable in fixup_irqs */
|
||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user