diff options
Diffstat (limited to 'arch/x86/kernel/irq.c')
-rw-r--r-- | arch/x86/kernel/irq.c | 11 |
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 | ||