| From 141e2a07463caa77d10cd52b4b36e4ee77bf13a3 Mon Sep 17 00:00:00 2001 |
| From: Ingo Molnar <mingo@elte.hu> |
| Date: Fri, 3 Jul 2009 08:29:27 -0500 |
| Subject: [PATCH] x86: Do not unmask io_apic when interrupt is in progress |
| |
| commit 3f87904e73bfb67c331016bcb8846771cce43bfc in tip. |
| |
| With threaded interrupts we might see an interrupt in progress on |
| migration. Do not unmask it when this is the case. |
| |
| Signed-off-by: Ingo Molnar <mingo@elte.hu> |
| Signed-off-by: Thomas Gleixner <tglx@linutronix.de> |
| |
| diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c |
| index 53243ca..678dc18 100644 |
| --- a/arch/x86/kernel/apic/io_apic.c |
| +++ b/arch/x86/kernel/apic/io_apic.c |
| @@ -2570,7 +2570,8 @@ static void ack_apic_level(unsigned int irq) |
| irq_complete_move(&desc); |
| #ifdef CONFIG_GENERIC_PENDING_IRQ |
| /* If we are moving the irq we need to mask it */ |
| - if (unlikely(desc->status & IRQ_MOVE_PENDING)) { |
| + if (unlikely(desc->status & IRQ_MOVE_PENDING) && |
| + !(desc->status & IRQ_INPROGRESS)) { |
| do_unmask_irq = 1; |
| mask_IO_APIC_irq_desc(desc); |
| } |
| -- |
| 1.7.1.1 |
| |