aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/irq.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/irq.c')
-rw-r--r--arch/x86/kernel/irq.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/arch/x86/kernel/irq.c b/arch/x86/kernel/irq.c
index f8062aaf5df9..61521dc19c10 100644
--- a/arch/x86/kernel/irq.c
+++ b/arch/x86/kernel/irq.c
@@ -462,7 +462,7 @@ void fixup_irqs(void)
462 * non intr-remapping case, we can't wait till this interrupt 462 * non intr-remapping case, we can't wait till this interrupt
463 * arrives at this cpu before completing the irq move. 463 * arrives at this cpu before completing the irq move.
464 */ 464 */
465 irq_force_complete_move(irq); 465 irq_force_complete_move(desc);
466 466
467 if (cpumask_any_and(affinity, cpu_online_mask) >= nr_cpu_ids) { 467 if (cpumask_any_and(affinity, cpu_online_mask) >= nr_cpu_ids) {
468 break_affinity = 1; 468 break_affinity = 1;
@@ -470,6 +470,15 @@ void fixup_irqs(void)
470 } 470 }
471 471
472 chip = irq_data_get_irq_chip(data); 472 chip = irq_data_get_irq_chip(data);
473 /*
474 * The interrupt descriptor might have been cleaned up
475 * already, but it is not yet removed from the radix tree
476 */
477 if (!chip) {
478 raw_spin_unlock(&desc->lock);
479 continue;
480 }
481
473 if (!irqd_can_move_in_process_context(data) && chip->irq_mask) 482 if (!irqd_can_move_in_process_context(data) && chip->irq_mask)
474 chip->irq_mask(data); 483 chip->irq_mask(data);
475 484