Messages in this thread Patch in this message | | | Date | Wed, 19 Nov 2008 20:50:53 -0800 | From | Yinghai Lu <> | Subject | Re: [PATCH] x86: fix wakeup_cpu with numaq/es7000 v2 - fix v2 |
| |
Ingo Molnar wrote: > * Yinghai Lu <yinghai@kernel.org> wrote: > >> Impact: fix wakeup_secondary_cpu with hotplug >> >> We can not put that in x86_quirks, because that is __initdata. >> So try to move that to genapic, and add update_genapic in x86_quirks. >> >> later we even could use that stub to >> 1. autodetect CONFIG_ES7000_CLUSTERED_APIC >> 2. more correct inquire_remote_apic with apic_verbosity setting. > > thanks - this patch and the next one did the trick to stabilize the > tip/x86/quirks topic tree - no more hotplug crashes and no more build > failures either. The lineup is: > > b5fe363: x86: use update_genapic to get rid of ES7000_CLUSTERED_APIC v2 > f632ddc: x86: fix wakeup_cpu with numaq/es7000, v2, fix #2 > 54ac14a: x86: fix wakeup_cpu with numaq/es7000, v2, fix > 569712b: x86: fix wakeup_cpu with numaq/es7000, v2 > > and i've merged them into tip/master as well. >
need more update_genapic calling
diff --git a/arch/x86/mach-generic/probe.c b/arch/x86/mach-generic/probe.c index 90b134f..c346d9d 100644 --- a/arch/x86/mach-generic/probe.c +++ b/arch/x86/mach-generic/probe.c @@ -76,12 +76,15 @@ void __init generic_bigsmp_probe(void) * - we find more than 8 CPUs in acpi LAPIC listing with xAPIC support */ - if (!cmdline_apic && genapic == &apic_default) + if (!cmdline_apic && genapic == &apic_default) { if (apic_bigsmp.probe()) { genapic = &apic_bigsmp; + if (x86_quirks->update_genapic) + x86_quirks->update_genapic(); printk(KERN_INFO "Overriding APIC driver with %s\n", genapic->name); } + } #endif } @@ -98,6 +101,9 @@ void __init generic_apic_probe(void) /* Not visible without early console */ if (!apic_probe[i]) panic("Didn't find an APIC driver"); + + if (x86_quirks->update_genapic) + x86_quirks->update_genapic(); } printk(KERN_INFO "Using APIC driver %s\n", genapic->name); } @@ -112,6 +118,8 @@ int __init mps_oem_check(struct mp_config_table *mpc, char *oem, if (apic_probe[i]->mps_oem_check(mpc, oem, productid)) { if (!cmdline_apic) { genapic = apic_probe[i]; + if (x86_quirks->update_genapic) + x86_quirks->update_genapic(); printk(KERN_INFO "Switched to APIC driver `%s'.\n", genapic->name); } @@ -128,6 +136,8 @@ int __init acpi_madt_oem_check(char *oem_id, char *oem_table_id) if (apic_probe[i]->acpi_madt_oem_check(oem_id, oem_table_id)) { if (!cmdline_apic) { genapic = apic_probe[i]; + if (x86_quirks->update_genapic) + x86_quirks->update_genapic(); printk(KERN_INFO "Switched to APIC driver `%s'.\n", genapic->name); }
| |