diff options
author | Tony Lindgren <tony@atomide.com> | 2010-02-17 14:08:58 -0800 |
---|---|---|
committer | Tony Lindgren <tony@atomide.com> | 2010-02-17 14:08:58 -0800 |
commit | 80c20d543d142ee54ec85259b77aaf0b83c32db5 (patch) | |
tree | 364017b2c001939bbb645dcc20d565c1f71b13a8 /arch/x86/kernel/apic/probe_32.c | |
parent | d6a2d9b800276140abf352908abbd0c240890692 (diff) | |
parent | b72c7d543589736d43da531566490dd31572f5ca (diff) |
Merge branch 'omap-fixes-for-linus' into omap-for-linus
Diffstat (limited to 'arch/x86/kernel/apic/probe_32.c')
-rw-r--r-- | arch/x86/kernel/apic/probe_32.c | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/arch/x86/kernel/apic/probe_32.c b/arch/x86/kernel/apic/probe_32.c index 1a6559f6768..99d2fe01608 100644 --- a/arch/x86/kernel/apic/probe_32.c +++ b/arch/x86/kernel/apic/probe_32.c @@ -52,7 +52,32 @@ static int __init print_ipi_mode(void) } late_initcall(print_ipi_mode); -void default_setup_apic_routing(void) +void __init default_setup_apic_routing(void) +{ + int version = apic_version[boot_cpu_physical_apicid]; + + if (num_possible_cpus() > 8) { + switch (boot_cpu_data.x86_vendor) { + case X86_VENDOR_INTEL: + if (!APIC_XAPIC(version)) { + def_to_bigsmp = 0; + break; + } + /* If P4 and above fall through */ + case X86_VENDOR_AMD: + def_to_bigsmp = 1; + } + } + +#ifdef CONFIG_X86_BIGSMP + generic_bigsmp_probe(); +#endif + + if (apic->setup_apic_routing) + apic->setup_apic_routing(); +} + +static void setup_apic_flat_routing(void) { #ifdef CONFIG_X86_IO_APIC printk(KERN_INFO @@ -103,7 +128,7 @@ struct apic apic_default = { .init_apic_ldr = default_init_apic_ldr, .ioapic_phys_id_map = default_ioapic_phys_id_map, - .setup_apic_routing = default_setup_apic_routing, + .setup_apic_routing = setup_apic_flat_routing, .multi_timer_check = NULL, .apicid_to_node = default_apicid_to_node, .cpu_to_logical_apicid = default_cpu_to_logical_apicid, |