diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86/include/asm/hw_irq.h | 1 | ||||
-rw-r--r-- | arch/x86/kernel/apic/io_apic.c | 9 |
2 files changed, 1 insertions, 9 deletions
diff --git a/arch/x86/include/asm/hw_irq.h b/arch/x86/include/asm/hw_irq.h index 1984ce9a13d..6e124269fd4 100644 --- a/arch/x86/include/asm/hw_irq.h +++ b/arch/x86/include/asm/hw_irq.h | |||
@@ -94,7 +94,6 @@ struct irq_cfg { | |||
94 | struct irq_pin_list *irq_2_pin; | 94 | struct irq_pin_list *irq_2_pin; |
95 | cpumask_var_t domain; | 95 | cpumask_var_t domain; |
96 | cpumask_var_t old_domain; | 96 | cpumask_var_t old_domain; |
97 | unsigned move_cleanup_count; | ||
98 | u8 vector; | 97 | u8 vector; |
99 | u8 move_in_progress : 1; | 98 | u8 move_in_progress : 1; |
100 | }; | 99 | }; |
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--; | ||
2453 | unlock: | 2446 | unlock: |
2454 | spin_unlock(&desc->lock); | 2447 | spin_unlock(&desc->lock); |
2455 | } | 2448 | } |