diff options
author | Venkatesh Pallipadi <venkatesh.pallipadi@intel.com> | 2005-09-03 18:56:31 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@evo.osdl.org> | 2005-09-05 03:06:10 -0400 |
commit | 911a62d42365076209e2c327e7688db296e35d62 (patch) | |
tree | 51e6d8525cd3547ea43129b5dd20339655674d57 /arch/i386/kernel | |
parent | 484b90c4b965d54037ff99b198d84cdf144f8a35 (diff) |
[PATCH] x86: sutomatically enable bigsmp when we have more than 8 CPUs
i386 generic subarchitecture requires explicit dmi strings or command line
to enable bigsmp mode. The patch below removes that restriction, and uses
bigsmp as soon as it finds more than 8 logical CPUs, Intel processors and
xAPIC support.
Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/i386/kernel')
-rw-r--r-- | arch/i386/kernel/acpi/boot.c | 3 | ||||
-rw-r--r-- | arch/i386/kernel/mpparse.c | 9 | ||||
-rw-r--r-- | arch/i386/kernel/setup.c | 8 |
3 files changed, 19 insertions, 1 deletions
diff --git a/arch/i386/kernel/acpi/boot.c b/arch/i386/kernel/acpi/boot.c index b7808a89d94..34ee500c26e 100644 --- a/arch/i386/kernel/acpi/boot.c +++ b/arch/i386/kernel/acpi/boot.c | |||
@@ -833,6 +833,9 @@ acpi_process_madt(void) | |||
833 | if (!error) { | 833 | if (!error) { |
834 | acpi_lapic = 1; | 834 | acpi_lapic = 1; |
835 | 835 | ||
836 | #ifdef CONFIG_X86_GENERICARCH | ||
837 | generic_bigsmp_probe(); | ||
838 | #endif | ||
836 | /* | 839 | /* |
837 | * Parse MADT IO-APIC entries | 840 | * Parse MADT IO-APIC entries |
838 | */ | 841 | */ |
diff --git a/arch/i386/kernel/mpparse.c b/arch/i386/kernel/mpparse.c index ce838abb27d..788efffa993 100644 --- a/arch/i386/kernel/mpparse.c +++ b/arch/i386/kernel/mpparse.c | |||
@@ -65,6 +65,8 @@ int nr_ioapics; | |||
65 | int pic_mode; | 65 | int pic_mode; |
66 | unsigned long mp_lapic_addr; | 66 | unsigned long mp_lapic_addr; |
67 | 67 | ||
68 | unsigned int def_to_bigsmp = 0; | ||
69 | |||
68 | /* Processor that is doing the boot up */ | 70 | /* Processor that is doing the boot up */ |
69 | unsigned int boot_cpu_physical_apicid = -1U; | 71 | unsigned int boot_cpu_physical_apicid = -1U; |
70 | /* Internal processor count */ | 72 | /* Internal processor count */ |
@@ -213,6 +215,13 @@ static void __init MP_processor_info (struct mpc_config_processor *m) | |||
213 | ver = 0x10; | 215 | ver = 0x10; |
214 | } | 216 | } |
215 | apic_version[m->mpc_apicid] = ver; | 217 | apic_version[m->mpc_apicid] = ver; |
218 | if ((num_processors > 8) && | ||
219 | APIC_XAPIC(ver) && | ||
220 | (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL)) | ||
221 | def_to_bigsmp = 1; | ||
222 | else | ||
223 | def_to_bigsmp = 0; | ||
224 | |||
216 | bios_cpu_apicid[num_processors - 1] = m->mpc_apicid; | 225 | bios_cpu_apicid[num_processors - 1] = m->mpc_apicid; |
217 | } | 226 | } |
218 | 227 | ||
diff --git a/arch/i386/kernel/setup.c b/arch/i386/kernel/setup.c index 9adbf710ec8..294bcca985a 100644 --- a/arch/i386/kernel/setup.c +++ b/arch/i386/kernel/setup.c | |||
@@ -1585,8 +1585,14 @@ void __init setup_arch(char **cmdline_p) | |||
1585 | */ | 1585 | */ |
1586 | acpi_boot_table_init(); | 1586 | acpi_boot_table_init(); |
1587 | acpi_boot_init(); | 1587 | acpi_boot_init(); |
1588 | #endif | ||
1589 | 1588 | ||
1589 | #if defined(CONFIG_SMP) && defined(CONFIG_X86_PC) | ||
1590 | if (def_to_bigsmp) | ||
1591 | printk(KERN_WARNING "More than 8 CPUs detected and " | ||
1592 | "CONFIG_X86_PC cannot handle it.\nUse " | ||
1593 | "CONFIG_X86_GENERICARCH or CONFIG_X86_BIGSMP.\n"); | ||
1594 | #endif | ||
1595 | #endif | ||
1590 | #ifdef CONFIG_X86_LOCAL_APIC | 1596 | #ifdef CONFIG_X86_LOCAL_APIC |
1591 | if (smp_found_config) | 1597 | if (smp_found_config) |
1592 | get_smp_config(); | 1598 | get_smp_config(); |