From 66b6d2521b4ee20dd32675a2c1dd21e00064b682 Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Fri, 7 Nov 2008 12:33:49 +0100 Subject: [PATCH] --- yaml --- r: 119423 b: refs/heads/master c: 6c2e94033df5ca11149e52dd179b8dde3172e9bf h: refs/heads/master i: 119421: 08aea0130daedc5ccf0fab2c4d2181afee8bb0f9 119419: 4cf20a70b9cc0c359a4a845e0d69673e7b68064d 119415: 973c84add11337bad45ab3e4e5c566107aa1c130 119407: ec55759462c4844b344b2fe6b4035d6cd438867b 119391: f9a319e2e0c4e0637677f41896a9afc5e223d4a0 119359: e5a961e9edd314cb4451cc245b4b04b0c3464c96 119295: 94b6e5abecc95c93db87f64c8205b503b5e959ff v: v3 --- [refs] | 2 +- trunk/arch/x86/kernel/io_apic.c | 26 +++++++++++++++++++++----- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 92cd381adb00..502c9b5c151e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 612e3684c1b7752d2890510e4f90115fd1eb2afb +refs/heads/master: 6c2e94033df5ca11149e52dd179b8dde3172e9bf diff --git a/trunk/arch/x86/kernel/io_apic.c b/trunk/arch/x86/kernel/io_apic.c index 7a3f2028e2eb..988ee89467d3 100644 --- a/trunk/arch/x86/kernel/io_apic.c +++ b/trunk/arch/x86/kernel/io_apic.c @@ -3761,7 +3761,9 @@ int acpi_get_override_irq(int bus_irq, int *trigger, int *polarity) void __init setup_ioapic_dest(void) { int pin, ioapic, irq, irq_entry; + struct irq_desc *desc; struct irq_cfg *cfg; + cpumask_t mask; if (skip_ioapic_setup == 1) return; @@ -3778,16 +3780,30 @@ void __init setup_ioapic_dest(void) * cpu is online. */ cfg = irq_cfg(irq); - if (!cfg->vector) + if (!cfg->vector) { setup_IO_APIC_irq(ioapic, pin, irq, irq_trigger(irq_entry), irq_polarity(irq_entry)); + continue; + + } + + /* + * Honour affinities which have been set in early boot + */ + desc = irq_to_desc(irq); + if (desc->status & + (IRQ_NO_BALANCING | IRQ_AFFINITY_SET)) + mask = desc->affinity; + else + mask = TARGET_CPUS; + #ifdef CONFIG_INTR_REMAP - else if (intr_remapping_enabled) - set_ir_ioapic_affinity_irq(irq, TARGET_CPUS); -#endif + if (intr_remapping_enabled) + set_ir_ioapic_affinity_irq(irq, mask); else - set_ioapic_affinity_irq(irq, TARGET_CPUS); +#endif + set_ioapic_affinity_irq(irq, mask); } }