aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/apic/io_apic.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/apic/io_apic.c')
-rw-r--r--arch/x86/kernel/apic/io_apic.c23
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);