|
@@ -567,13 +567,11 @@ static void __init mpic_scan_ht_pics(struct mpic *mpic)
|
|
|
#endif /* CONFIG_MPIC_U3_HT_IRQS */
|
|
|
|
|
|
#ifdef CONFIG_SMP
|
|
|
-static int irq_choose_cpu(unsigned int virt_irq)
|
|
|
+static int irq_choose_cpu(const cpumask_t *mask)
|
|
|
{
|
|
|
- cpumask_t mask;
|
|
|
int cpuid;
|
|
|
|
|
|
- cpumask_copy(&mask, irq_to_desc(virt_irq)->affinity);
|
|
|
- if (cpus_equal(mask, CPU_MASK_ALL)) {
|
|
|
+ if (cpumask_equal(mask, cpu_all_mask)) {
|
|
|
static int irq_rover;
|
|
|
static DEFINE_SPINLOCK(irq_rover_lock);
|
|
|
unsigned long flags;
|
|
@@ -594,20 +592,15 @@ static int irq_choose_cpu(unsigned int virt_irq)
|
|
|
|
|
|
spin_unlock_irqrestore(&irq_rover_lock, flags);
|
|
|
} else {
|
|
|
- cpumask_t tmp;
|
|
|
-
|
|
|
- cpus_and(tmp, cpu_online_map, mask);
|
|
|
-
|
|
|
- if (cpus_empty(tmp))
|
|
|
+ cpuid = cpumask_first_and(mask, cpu_online_mask);
|
|
|
+ if (cpuid >= nr_cpu_ids)
|
|
|
goto do_round_robin;
|
|
|
-
|
|
|
- cpuid = first_cpu(tmp);
|
|
|
}
|
|
|
|
|
|
return get_hard_smp_processor_id(cpuid);
|
|
|
}
|
|
|
#else
|
|
|
-static int irq_choose_cpu(unsigned int virt_irq)
|
|
|
+static int irq_choose_cpu(const cpumask_t *mask)
|
|
|
{
|
|
|
return hard_smp_processor_id();
|
|
|
}
|
|
@@ -816,7 +809,7 @@ int mpic_set_affinity(unsigned int irq, const struct cpumask *cpumask)
|
|
|
unsigned int src = mpic_irq_to_hw(irq);
|
|
|
|
|
|
if (mpic->flags & MPIC_SINGLE_DEST_CPU) {
|
|
|
- int cpuid = irq_choose_cpu(irq);
|
|
|
+ int cpuid = irq_choose_cpu(cpumask);
|
|
|
|
|
|
mpic_irq_write(src, MPIC_INFO(IRQ_DESTINATION), 1 << cpuid);
|
|
|
} else {
|