aboutsummaryrefslogtreecommitdiffstats
path: root/arch/i386/mach-generic
diff options
context:
space:
mode:
Diffstat (limited to 'arch/i386/mach-generic')
-rw-r--r--arch/i386/mach-generic/bigsmp.c5
-rw-r--r--arch/i386/mach-generic/probe.c20
2 files changed, 24 insertions, 1 deletions
diff --git a/arch/i386/mach-generic/bigsmp.c b/arch/i386/mach-generic/bigsmp.c
index 25883b44f625..037b2af1a1f4 100644
--- a/arch/i386/mach-generic/bigsmp.c
+++ b/arch/i386/mach-generic/bigsmp.c
@@ -47,7 +47,10 @@ static struct dmi_system_id __initdata bigsmp_dmi_table[] = {
47 47
48static __init int probe_bigsmp(void) 48static __init int probe_bigsmp(void)
49{ 49{
50 dmi_check_system(bigsmp_dmi_table); 50 if (def_to_bigsmp)
51 dmi_bigsmp = 1;
52 else
53 dmi_check_system(bigsmp_dmi_table);
51 return dmi_bigsmp; 54 return dmi_bigsmp;
52} 55}
53 56
diff --git a/arch/i386/mach-generic/probe.c b/arch/i386/mach-generic/probe.c
index 5497c65a8790..cea5b3ce4b57 100644
--- a/arch/i386/mach-generic/probe.c
+++ b/arch/i386/mach-generic/probe.c
@@ -30,6 +30,25 @@ struct genapic *apic_probe[] __initdata = {
30 NULL, 30 NULL,
31}; 31};
32 32
33static int cmdline_apic;
34
35void __init generic_bigsmp_probe(void)
36{
37 /*
38 * This routine is used to switch to bigsmp mode when
39 * - There is no apic= option specified by the user
40 * - generic_apic_probe() has choosen apic_default as the sub_arch
41 * - we find more than 8 CPUs in acpi LAPIC listing with xAPIC support
42 */
43
44 if (!cmdline_apic && genapic == &apic_default)
45 if (apic_bigsmp.probe()) {
46 genapic = &apic_bigsmp;
47 printk(KERN_INFO "Overriding APIC driver with %s\n",
48 genapic->name);
49 }
50}
51
33void __init generic_apic_probe(char *command_line) 52void __init generic_apic_probe(char *command_line)
34{ 53{
35 char *s; 54 char *s;
@@ -52,6 +71,7 @@ void __init generic_apic_probe(char *command_line)
52 if (!changed) 71 if (!changed)
53 printk(KERN_ERR "Unknown genapic `%s' specified.\n", s); 72 printk(KERN_ERR "Unknown genapic `%s' specified.\n", s);
54 *p = old; 73 *p = old;
74 cmdline_apic = changed;
55 } 75 }
56 for (i = 0; !changed && apic_probe[i]; i++) { 76 for (i = 0; !changed && apic_probe[i]; i++) {
57 if (apic_probe[i]->probe()) { 77 if (apic_probe[i]->probe()) {