blob: 38c65de659c5a8453355e2cad4967e2fcf5152ac [file] [log] [blame]
From b47f200ddbd4cf1c776a3d5b87e0a6073e3861a9 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>
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
index fe923da..dced1f6 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -2665,6 +2665,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.1.1