|
@@ -1142,9 +1142,10 @@ next:
|
|
if (test_bit(vector, used_vectors))
|
|
if (test_bit(vector, used_vectors))
|
|
goto next;
|
|
goto next;
|
|
|
|
|
|
- for_each_cpu_and(new_cpu, tmp_mask, cpu_online_mask)
|
|
|
|
- if (per_cpu(vector_irq, new_cpu)[vector] != -1)
|
|
|
|
|
|
+ for_each_cpu_and(new_cpu, tmp_mask, cpu_online_mask) {
|
|
|
|
+ if (per_cpu(vector_irq, new_cpu)[vector] > VECTOR_UNDEFINED)
|
|
goto next;
|
|
goto next;
|
|
|
|
+ }
|
|
/* Found one! */
|
|
/* Found one! */
|
|
current_vector = vector;
|
|
current_vector = vector;
|
|
current_offset = offset;
|
|
current_offset = offset;
|
|
@@ -1183,7 +1184,7 @@ static void __clear_irq_vector(int irq, struct irq_cfg *cfg)
|
|
|
|
|
|
vector = cfg->vector;
|
|
vector = cfg->vector;
|
|
for_each_cpu_and(cpu, cfg->domain, cpu_online_mask)
|
|
for_each_cpu_and(cpu, cfg->domain, cpu_online_mask)
|
|
- per_cpu(vector_irq, cpu)[vector] = -1;
|
|
|
|
|
|
+ per_cpu(vector_irq, cpu)[vector] = VECTOR_UNDEFINED;
|
|
|
|
|
|
cfg->vector = 0;
|
|
cfg->vector = 0;
|
|
cpumask_clear(cfg->domain);
|
|
cpumask_clear(cfg->domain);
|
|
@@ -1191,11 +1192,10 @@ static void __clear_irq_vector(int irq, struct irq_cfg *cfg)
|
|
if (likely(!cfg->move_in_progress))
|
|
if (likely(!cfg->move_in_progress))
|
|
return;
|
|
return;
|
|
for_each_cpu_and(cpu, cfg->old_domain, cpu_online_mask) {
|
|
for_each_cpu_and(cpu, cfg->old_domain, cpu_online_mask) {
|
|
- for (vector = FIRST_EXTERNAL_VECTOR; vector < NR_VECTORS;
|
|
|
|
- vector++) {
|
|
|
|
|
|
+ for (vector = FIRST_EXTERNAL_VECTOR; vector < NR_VECTORS; vector++) {
|
|
if (per_cpu(vector_irq, cpu)[vector] != irq)
|
|
if (per_cpu(vector_irq, cpu)[vector] != irq)
|
|
continue;
|
|
continue;
|
|
- per_cpu(vector_irq, cpu)[vector] = -1;
|
|
|
|
|
|
+ per_cpu(vector_irq, cpu)[vector] = VECTOR_UNDEFINED;
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -1228,12 +1228,12 @@ void __setup_vector_irq(int cpu)
|
|
/* Mark the free vectors */
|
|
/* Mark the free vectors */
|
|
for (vector = 0; vector < NR_VECTORS; ++vector) {
|
|
for (vector = 0; vector < NR_VECTORS; ++vector) {
|
|
irq = per_cpu(vector_irq, cpu)[vector];
|
|
irq = per_cpu(vector_irq, cpu)[vector];
|
|
- if (irq < 0)
|
|
|
|
|
|
+ if (irq <= VECTOR_UNDEFINED)
|
|
continue;
|
|
continue;
|
|
|
|
|
|
cfg = irq_cfg(irq);
|
|
cfg = irq_cfg(irq);
|
|
if (!cpumask_test_cpu(cpu, cfg->domain))
|
|
if (!cpumask_test_cpu(cpu, cfg->domain))
|
|
- per_cpu(vector_irq, cpu)[vector] = -1;
|
|
|
|
|
|
+ per_cpu(vector_irq, cpu)[vector] = VECTOR_UNDEFINED;
|
|
}
|
|
}
|
|
raw_spin_unlock(&vector_lock);
|
|
raw_spin_unlock(&vector_lock);
|
|
}
|
|
}
|
|
@@ -2208,7 +2208,7 @@ asmlinkage void smp_irq_move_cleanup_interrupt(void)
|
|
struct irq_cfg *cfg;
|
|
struct irq_cfg *cfg;
|
|
irq = __this_cpu_read(vector_irq[vector]);
|
|
irq = __this_cpu_read(vector_irq[vector]);
|
|
|
|
|
|
- if (irq == -1)
|
|
|
|
|
|
+ if (irq <= VECTOR_UNDEFINED)
|
|
continue;
|
|
continue;
|
|
|
|
|
|
desc = irq_to_desc(irq);
|
|
desc = irq_to_desc(irq);
|