|
@@ -1126,8 +1126,7 @@ __assign_irq_vector(int irq, struct irq_cfg *cfg, const struct cpumask *mask)
|
|
|
old_vector = cfg->vector;
|
|
|
if (old_vector) {
|
|
|
cpumask_and(tmp_mask, mask, cpu_online_mask);
|
|
|
- cpumask_and(tmp_mask, cfg->domain, tmp_mask);
|
|
|
- if (!cpumask_empty(tmp_mask)) {
|
|
|
+ if (cpumask_subset(tmp_mask, cfg->domain)) {
|
|
|
free_cpumask_var(tmp_mask);
|
|
|
return 0;
|
|
|
}
|
|
@@ -1141,6 +1140,11 @@ __assign_irq_vector(int irq, struct irq_cfg *cfg, const struct cpumask *mask)
|
|
|
|
|
|
apic->vector_allocation_domain(cpu, tmp_mask);
|
|
|
|
|
|
+ if (cpumask_subset(tmp_mask, cfg->domain)) {
|
|
|
+ free_cpumask_var(tmp_mask);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
vector = current_vector;
|
|
|
offset = current_offset;
|
|
|
next:
|
|
@@ -1346,13 +1350,6 @@ static void setup_ioapic_irq(unsigned int irq, struct irq_cfg *cfg,
|
|
|
|
|
|
if (!IO_APIC_IRQ(irq))
|
|
|
return;
|
|
|
- /*
|
|
|
- * For legacy irqs, cfg->domain starts with cpu 0 for legacy
|
|
|
- * controllers like 8259. Now that IO-APIC can handle this irq, update
|
|
|
- * the cfg->domain.
|
|
|
- */
|
|
|
- if (irq < legacy_pic->nr_legacy_irqs && cpumask_test_cpu(0, cfg->domain))
|
|
|
- apic->vector_allocation_domain(0, cfg->domain);
|
|
|
|
|
|
if (assign_irq_vector(irq, cfg, apic->target_cpus()))
|
|
|
return;
|