summaryrefslogtreecommitdiff
path: root/arch/x86/kernel/irq.c
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2016-02-08 08:16:55 +0100
committerTakashi Iwai <tiwai@suse.de>2016-02-08 08:16:55 +0100
commitc9e9daccc7a6a670a6619723138ace6752f4773b (patch)
treeed38356575314aec55deda66ef856a9bfeaaf282 /arch/x86/kernel/irq.c
parent1f5e35636cc2737ccf1f67815cb33b978621f0f6 (diff)
parentddce57a6f0a2d8d1bfacfa77f06043bc760403c2 (diff)
Merge branch 'topic/core-fixes' into for-next
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)
* non intr-remapping case, we can't wait till this interrupt
* arrives at this cpu before completing the irq move.
*/
- irq_force_complete_move(irq);
+ irq_force_complete_move(desc);
if (cpumask_any_and(affinity, cpu_online_mask) >= nr_cpu_ids) {
break_affinity = 1;
@@ -470,6 +470,15 @@ void fixup_irqs(void)
}
chip = irq_data_get_irq_chip(data);
+ /*
+ * The interrupt descriptor might have been cleaned up
+ * already, but it is not yet removed from the radix tree
+ */
+ if (!chip) {
+ raw_spin_unlock(&desc->lock);
+ continue;
+ }
+
if (!irqd_can_move_in_process_context(data) && chip->irq_mask)
chip->irq_mask(data);