blob: 99c64812f41e0ac779e8bbff39b0f0edd16b06ba [file] [log] [blame]
From a2e1fcd1d71f4abe9ec2cc80844ffa7b89bf23a3 Mon Sep 17 00:00:00 2001
From: Ingo Molnar <mingo@elte.hu>
Date: Fri, 3 Jul 2009 08:44:15 -0500
Subject: [PATCH] x86: apic: level smp affinity
commit 526c6d2325e701c32858bd3fbddaba19b45acc96 in tip.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
---
arch/x86/kernel/apic/io_apic.c | 10 ++++++++++
1 files changed, 10 insertions(+), 0 deletions(-)
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
index 3b18625..e0f2cef 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -2732,6 +2732,16 @@ static void ack_apic_level(unsigned int irq)
move_masked_irq(irq);
unmask_IO_APIC_irq_desc(desc);
}
+
+#if (defined(CONFIG_GENERIC_PENDING_IRQ) || defined(CONFIG_IRQBALANCE)) && \
+ defined(CONFIG_PREEMPT_HARDIRQS)
+ /*
+ * With threaded interrupts, we always have IRQ_INPROGRESS
+ * when acking. CHECKME !!!!!
+ */
+ else if (unlikely(desc->status & IRQ_MOVE_PENDING))
+ move_masked_irq(irq);
+#endif
}
#ifdef CONFIG_INTR_REMAP
--
1.7.0.4