|
@@ -250,23 +250,23 @@ static int gic_set_affinity(struct irq_data *d, const struct cpumask *cpumask,
|
|
|
bool force)
|
|
|
{
|
|
|
unsigned int irq = GIC_HWIRQ_TO_SHARED(d->hwirq);
|
|
|
- cpumask_t tmp = CPU_MASK_NONE;
|
|
|
- unsigned long flags;
|
|
|
+ unsigned long flags;
|
|
|
+ unsigned int cpu;
|
|
|
|
|
|
- cpumask_and(&tmp, cpumask, cpu_online_mask);
|
|
|
- if (cpumask_empty(&tmp))
|
|
|
+ cpu = cpumask_first_and(cpumask, cpu_online_mask);
|
|
|
+ if (cpu >= NR_CPUS)
|
|
|
return -EINVAL;
|
|
|
|
|
|
/* Assumption : cpumask refers to a single CPU */
|
|
|
spin_lock_irqsave(&gic_lock, flags);
|
|
|
|
|
|
/* Re-route this IRQ */
|
|
|
- write_gic_map_vp(irq, BIT(mips_cm_vp_id(cpumask_first(&tmp))));
|
|
|
+ write_gic_map_vp(irq, BIT(mips_cm_vp_id(cpu)));
|
|
|
|
|
|
/* Update the pcpu_masks */
|
|
|
gic_clear_pcpu_masks(irq);
|
|
|
if (read_gic_mask(irq))
|
|
|
- set_bit(irq, per_cpu_ptr(pcpu_masks, cpumask_first(&tmp)));
|
|
|
+ set_bit(irq, per_cpu_ptr(pcpu_masks, cpu));
|
|
|
|
|
|
cpumask_copy(irq_data_get_affinity_mask(d), cpumask);
|
|
|
spin_unlock_irqrestore(&gic_lock, flags);
|