aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorSuresh Siddha <suresh.b.siddha@intel.com>2010-01-29 14:42:20 -0500
committerH. Peter Anvin <hpa@zytor.com>2010-01-29 17:47:17 -0500
commit69c89efb51510b3dc0fa336f7fa257c6e1799ee4 (patch)
tree852e875bbe24b516ea18b28dec8eef96d43e348a /arch
parent97943390b043bcafca69f9163b86bbf627b75589 (diff)
x86, irq: Update the vector domain for legacy irqs handled by io-apic
In the recent change of not reserving IRQ0_VECTOR..IRQ15_VECTOR's on all cpu's, we start with irq 0..15 getting directed to (and handled on) cpu-0. In the logical flat mode, once the AP's are online (and before irqbalance comes into picture), kernel intends to handle these IRQ's on any cpu (as the logical flat mode allows to specify multiple cpu's for the irq destination and the chipset based routing can deliver to the interrupt to any one of the specified cpu's). This was broken with our recent change, which was ending up using only cpu 0 as the destination, even when the kernel was specifying to use all online cpu's for the logical flat mode case. Fix this by updating vector allocation domain (cfg->domain) for legacy irqs, when the IO-APIC handles them. Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com> LKML-Reference: <20100129194330.207790269@sbs-t61.sc.intel.com> Tested-by: Li Zefan <lizf@cn.fujitsu.com> Cc: Yinghai Lu <yinghai@kernel.org> Cc: Eric W. Biederman <ebiederm@xmission.com> Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'arch')
-rw-r--r--arch/x86/kernel/apic/io_apic.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
index 1a30587a6bc2..2430b31c9857 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -1428,6 +1428,14 @@ static void setup_IO_APIC_irq(int apic_id, int pin, unsigned int irq, struct irq
1428 1428
1429 cfg = desc->chip_data; 1429 cfg = desc->chip_data;
1430 1430
1431 /*
1432 * For legacy irqs, cfg->domain starts with cpu 0 for legacy
1433 * controllers like 8259. Now that IO-APIC can handle this irq, update
1434 * the cfg->domain.
1435 */
1436 if (irq < nr_legacy_irqs && cpumask_test_cpu(0, cfg->domain))
1437 apic->vector_allocation_domain(0, cfg->domain);
1438
1431 if (assign_irq_vector(irq, cfg, apic->target_cpus())) 1439 if (assign_irq_vector(irq, cfg, apic->target_cpus()))
1432 return; 1440 return;
1433 1441