Commit 2a116f3d authored by Milton Miller's avatar Milton Miller Committed by Benjamin Herrenschmidt

powerpc/mpic: Break cpumask abstraction earlier

mpic_set_affinity is allocating and freeing a cpumask var even though
it was breaking the cpumask abstraction when passing the mask to
mpic_physmask.  It also didn't have any check for allocatin failure.

Break the cpumask abstraction earlier and use simple bitwise and of the
bits from the mask with the bits of cpu_online_mask.
Signed-off-by: default avatarMilton Miller <miltonm@bga.com>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent ebc04215
...@@ -821,16 +821,12 @@ int mpic_set_affinity(struct irq_data *d, const struct cpumask *cpumask, ...@@ -821,16 +821,12 @@ int mpic_set_affinity(struct irq_data *d, const struct cpumask *cpumask,
mpic_irq_write(src, MPIC_INFO(IRQ_DESTINATION), 1 << cpuid); mpic_irq_write(src, MPIC_INFO(IRQ_DESTINATION), 1 << cpuid);
} else { } else {
cpumask_var_t tmp; u32 mask = cpumask_bits(cpumask)[0];
alloc_cpumask_var(&tmp, GFP_KERNEL); mask &= cpumask_bits(cpu_online_mask)[0];
cpumask_and(tmp, cpumask, cpu_online_mask);
mpic_irq_write(src, MPIC_INFO(IRQ_DESTINATION), mpic_irq_write(src, MPIC_INFO(IRQ_DESTINATION),
mpic_physmask(cpumask_bits(tmp)[0])); mpic_physmask(mask));
free_cpumask_var(tmp);
} }
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment