|
@@ -38,6 +38,12 @@
|
|
|
int smp_found_config;
|
|
|
unsigned int __initdata maxcpus = NR_CPUS;
|
|
|
|
|
|
+#ifdef CONFIG_HOTPLUG_CPU
|
|
|
+#define CPU_HOTPLUG_ENABLED (1)
|
|
|
+#else
|
|
|
+#define CPU_HOTPLUG_ENABLED (0)
|
|
|
+#endif
|
|
|
+
|
|
|
/*
|
|
|
* Various Linux-internal data structures created from the
|
|
|
* MP-table.
|
|
@@ -219,14 +225,18 @@ static void __devinit MP_processor_info (struct mpc_config_processor *m)
|
|
|
cpu_set(num_processors, cpu_possible_map);
|
|
|
num_processors++;
|
|
|
|
|
|
- if ((num_processors > 8) &&
|
|
|
- ((APIC_XAPIC(ver) &&
|
|
|
- (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL)) ||
|
|
|
- (boot_cpu_data.x86_vendor == X86_VENDOR_AMD)))
|
|
|
- def_to_bigsmp = 1;
|
|
|
- else
|
|
|
- def_to_bigsmp = 0;
|
|
|
-
|
|
|
+ if (CPU_HOTPLUG_ENABLED || (num_processors > 8)) {
|
|
|
+ switch (boot_cpu_data.x86_vendor) {
|
|
|
+ case X86_VENDOR_INTEL:
|
|
|
+ if (!APIC_XAPIC(ver)) {
|
|
|
+ def_to_bigsmp = 0;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ /* If P4 and above fall through */
|
|
|
+ case X86_VENDOR_AMD:
|
|
|
+ def_to_bigsmp = 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
bios_cpu_apicid[num_processors - 1] = m->mpc_apicid;
|
|
|
}
|
|
|
|