aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel')
-rw-r--r--arch/x86/kernel/apic/io_apic.c9
1 files changed, 1 insertions, 8 deletions
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
index ce16b65cfdc..e9e5b02c3af 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -1161,7 +1161,7 @@ __assign_irq_vector(int irq, struct irq_cfg *cfg, const struct cpumask *mask)
1161 int cpu, err; 1161 int cpu, err;
1162 cpumask_var_t tmp_mask; 1162 cpumask_var_t tmp_mask;
1163 1163
1164 if ((cfg->move_in_progress) || cfg->move_cleanup_count) 1164 if (cfg->move_in_progress)
1165 return -EBUSY; 1165 return -EBUSY;
1166 1166
1167 if (!alloc_cpumask_var(&tmp_mask, GFP_ATOMIC)) 1167 if (!alloc_cpumask_var(&tmp_mask, GFP_ATOMIC))
@@ -2234,14 +2234,10 @@ void send_cleanup_vector(struct irq_cfg *cfg)
2234 2234
2235 if (unlikely(!alloc_cpumask_var(&cleanup_mask, GFP_ATOMIC))) { 2235 if (unlikely(!alloc_cpumask_var(&cleanup_mask, GFP_ATOMIC))) {
2236 unsigned int i; 2236 unsigned int i;
2237 cfg->move_cleanup_count = 0;
2238 for_each_cpu_and(i, cfg->old_domain, cpu_online_mask)
2239 cfg->move_cleanup_count++;
2240 for_each_cpu_and(i, cfg->old_domain, cpu_online_mask) 2237 for_each_cpu_and(i, cfg->old_domain, cpu_online_mask)
2241 apic->send_IPI_mask(cpumask_of(i), IRQ_MOVE_CLEANUP_VECTOR); 2238 apic->send_IPI_mask(cpumask_of(i), IRQ_MOVE_CLEANUP_VECTOR);
2242 } else { 2239 } else {
2243 cpumask_and(cleanup_mask, cfg->old_domain, cpu_online_mask); 2240 cpumask_and(cleanup_mask, cfg->old_domain, cpu_online_mask);
2244 cfg->move_cleanup_count = cpumask_weight(cleanup_mask);
2245 apic->send_IPI_mask(cleanup_mask, IRQ_MOVE_CLEANUP_VECTOR); 2241 apic->send_IPI_mask(cleanup_mask, IRQ_MOVE_CLEANUP_VECTOR);
2246 free_cpumask_var(cleanup_mask); 2242 free_cpumask_var(cleanup_mask);
2247 } 2243 }
@@ -2430,8 +2426,6 @@ asmlinkage void smp_irq_move_cleanup_interrupt(void)
2430 2426
2431 cfg = irq_cfg(irq); 2427 cfg = irq_cfg(irq);
2432 spin_lock(&desc->lock); 2428 spin_lock(&desc->lock);
2433 if (!cfg->move_cleanup_count)
2434 goto unlock;
2435 2429
2436 if (vector == cfg->vector && cpumask_test_cpu(me, cfg->domain)) 2430 if (vector == cfg->vector && cpumask_test_cpu(me, cfg->domain))
2437 goto unlock; 2431 goto unlock;
@@ -2449,7 +2443,6 @@ asmlinkage void smp_irq_move_cleanup_interrupt(void)
2449 goto unlock; 2443 goto unlock;
2450 } 2444 }
2451 __get_cpu_var(vector_irq)[vector] = -1; 2445 __get_cpu_var(vector_irq)[vector] = -1;
2452 cfg->move_cleanup_count--;
2453unlock: 2446unlock:
2454 spin_unlock(&desc->lock); 2447 spin_unlock(&desc->lock);
2455 } 2448 }