diff options
Diffstat (limited to 'arch/x86/kernel/apic/io_apic.c')
-rw-r--r-- | arch/x86/kernel/apic/io_apic.c | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c index e63a5bd2a78f..6ad4658de705 100644 --- a/arch/x86/kernel/apic/io_apic.c +++ b/arch/x86/kernel/apic/io_apic.c | |||
@@ -37,9 +37,6 @@ | |||
37 | #include <linux/kthread.h> | 37 | #include <linux/kthread.h> |
38 | #include <linux/jiffies.h> /* time_after() */ | 38 | #include <linux/jiffies.h> /* time_after() */ |
39 | #include <linux/slab.h> | 39 | #include <linux/slab.h> |
40 | #ifdef CONFIG_ACPI | ||
41 | #include <acpi/acpi_bus.h> | ||
42 | #endif | ||
43 | #include <linux/bootmem.h> | 40 | #include <linux/bootmem.h> |
44 | #include <linux/dmar.h> | 41 | #include <linux/dmar.h> |
45 | #include <linux/hpet.h> | 42 | #include <linux/hpet.h> |
@@ -1142,9 +1139,10 @@ next: | |||
1142 | if (test_bit(vector, used_vectors)) | 1139 | if (test_bit(vector, used_vectors)) |
1143 | goto next; | 1140 | goto next; |
1144 | 1141 | ||
1145 | for_each_cpu_and(new_cpu, tmp_mask, cpu_online_mask) | 1142 | for_each_cpu_and(new_cpu, tmp_mask, cpu_online_mask) { |
1146 | if (per_cpu(vector_irq, new_cpu)[vector] != -1) | 1143 | if (per_cpu(vector_irq, new_cpu)[vector] > VECTOR_UNDEFINED) |
1147 | goto next; | 1144 | goto next; |
1145 | } | ||
1148 | /* Found one! */ | 1146 | /* Found one! */ |
1149 | current_vector = vector; | 1147 | current_vector = vector; |
1150 | current_offset = offset; | 1148 | current_offset = offset; |
@@ -1183,7 +1181,7 @@ static void __clear_irq_vector(int irq, struct irq_cfg *cfg) | |||
1183 | 1181 | ||
1184 | vector = cfg->vector; | 1182 | vector = cfg->vector; |
1185 | for_each_cpu_and(cpu, cfg->domain, cpu_online_mask) | 1183 | for_each_cpu_and(cpu, cfg->domain, cpu_online_mask) |
1186 | per_cpu(vector_irq, cpu)[vector] = -1; | 1184 | per_cpu(vector_irq, cpu)[vector] = VECTOR_UNDEFINED; |
1187 | 1185 | ||
1188 | cfg->vector = 0; | 1186 | cfg->vector = 0; |
1189 | cpumask_clear(cfg->domain); | 1187 | cpumask_clear(cfg->domain); |
@@ -1191,11 +1189,10 @@ static void __clear_irq_vector(int irq, struct irq_cfg *cfg) | |||
1191 | if (likely(!cfg->move_in_progress)) | 1189 | if (likely(!cfg->move_in_progress)) |
1192 | return; | 1190 | return; |
1193 | for_each_cpu_and(cpu, cfg->old_domain, cpu_online_mask) { | 1191 | for_each_cpu_and(cpu, cfg->old_domain, cpu_online_mask) { |
1194 | for (vector = FIRST_EXTERNAL_VECTOR; vector < NR_VECTORS; | 1192 | for (vector = FIRST_EXTERNAL_VECTOR; vector < NR_VECTORS; vector++) { |
1195 | vector++) { | ||
1196 | if (per_cpu(vector_irq, cpu)[vector] != irq) | 1193 | if (per_cpu(vector_irq, cpu)[vector] != irq) |
1197 | continue; | 1194 | continue; |
1198 | per_cpu(vector_irq, cpu)[vector] = -1; | 1195 | per_cpu(vector_irq, cpu)[vector] = VECTOR_UNDEFINED; |
1199 | break; | 1196 | break; |
1200 | } | 1197 | } |
1201 | } | 1198 | } |
@@ -1228,12 +1225,12 @@ void __setup_vector_irq(int cpu) | |||
1228 | /* Mark the free vectors */ | 1225 | /* Mark the free vectors */ |
1229 | for (vector = 0; vector < NR_VECTORS; ++vector) { | 1226 | for (vector = 0; vector < NR_VECTORS; ++vector) { |
1230 | irq = per_cpu(vector_irq, cpu)[vector]; | 1227 | irq = per_cpu(vector_irq, cpu)[vector]; |
1231 | if (irq < 0) | 1228 | if (irq <= VECTOR_UNDEFINED) |
1232 | continue; | 1229 | continue; |
1233 | 1230 | ||
1234 | cfg = irq_cfg(irq); | 1231 | cfg = irq_cfg(irq); |
1235 | if (!cpumask_test_cpu(cpu, cfg->domain)) | 1232 | if (!cpumask_test_cpu(cpu, cfg->domain)) |
1236 | per_cpu(vector_irq, cpu)[vector] = -1; | 1233 | per_cpu(vector_irq, cpu)[vector] = VECTOR_UNDEFINED; |
1237 | } | 1234 | } |
1238 | raw_spin_unlock(&vector_lock); | 1235 | raw_spin_unlock(&vector_lock); |
1239 | } | 1236 | } |
@@ -2202,13 +2199,13 @@ asmlinkage void smp_irq_move_cleanup_interrupt(void) | |||
2202 | 2199 | ||
2203 | me = smp_processor_id(); | 2200 | me = smp_processor_id(); |
2204 | for (vector = FIRST_EXTERNAL_VECTOR; vector < NR_VECTORS; vector++) { | 2201 | for (vector = FIRST_EXTERNAL_VECTOR; vector < NR_VECTORS; vector++) { |
2205 | unsigned int irq; | 2202 | int irq; |
2206 | unsigned int irr; | 2203 | unsigned int irr; |
2207 | struct irq_desc *desc; | 2204 | struct irq_desc *desc; |
2208 | struct irq_cfg *cfg; | 2205 | struct irq_cfg *cfg; |
2209 | irq = __this_cpu_read(vector_irq[vector]); | 2206 | irq = __this_cpu_read(vector_irq[vector]); |
2210 | 2207 | ||
2211 | if (irq == -1) | 2208 | if (irq <= VECTOR_UNDEFINED) |
2212 | continue; | 2209 | continue; |
2213 | 2210 | ||
2214 | desc = irq_to_desc(irq); | 2211 | desc = irq_to_desc(irq); |