|
@@ -62,7 +62,7 @@ unsigned int boot_cpu_physical_apicid = -1U;
|
|
|
/*
|
|
|
* The highest APIC ID seen during enumeration.
|
|
|
*
|
|
|
- * On AMD, this determines the messaging protocol we can use: if all APIC IDs
|
|
|
+ * This determines the messaging protocol we can use: if all APIC IDs
|
|
|
* are in the 0 ... 7 range, then we can use logical addressing which
|
|
|
* has some performance advantages (better broadcasting).
|
|
|
*
|
|
@@ -1898,14 +1898,24 @@ void __cpuinit generic_processor_info(int apicid, int version)
|
|
|
max_physical_apicid = apicid;
|
|
|
|
|
|
#ifdef CONFIG_X86_32
|
|
|
- switch (boot_cpu_data.x86_vendor) {
|
|
|
- case X86_VENDOR_INTEL:
|
|
|
- if (num_processors > 8)
|
|
|
- def_to_bigsmp = 1;
|
|
|
- break;
|
|
|
- case X86_VENDOR_AMD:
|
|
|
- if (max_physical_apicid >= 8)
|
|
|
+ /*
|
|
|
+ * Would be preferable to switch to bigsmp when CONFIG_HOTPLUG_CPU=y
|
|
|
+ * but we need to work other dependencies like SMP_SUSPEND etc
|
|
|
+ * before this can be done without some confusion.
|
|
|
+ * if (CPU_HOTPLUG_ENABLED || num_processors > 8)
|
|
|
+ * - Ashok Raj <ashok.raj@intel.com>
|
|
|
+ */
|
|
|
+ if (max_physical_apicid >= 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;
|
|
|
+ }
|
|
|
}
|
|
|
#endif
|
|
|
|