|
@@ -20,6 +20,10 @@
|
|
|
#include <asm/smp.h>
|
|
|
#include <asm/ipi.h>
|
|
|
|
|
|
+#if defined(CONFIG_ACPI_BUS)
|
|
|
+#include <acpi/acpi_bus.h>
|
|
|
+#endif
|
|
|
+
|
|
|
/* which logical CPU number maps to which CPU (physical APIC ID) */
|
|
|
u8 x86_cpu_to_apicid[NR_CPUS] = { [0 ... NR_CPUS-1] = BAD_APICID };
|
|
|
EXPORT_SYMBOL(x86_cpu_to_apicid);
|
|
@@ -47,6 +51,18 @@ void __init clustered_apic_check(void)
|
|
|
goto print;
|
|
|
}
|
|
|
|
|
|
+#if defined(CONFIG_ACPI_BUS)
|
|
|
+ /*
|
|
|
+ * Some x86_64 machines use physical APIC mode regardless of how many
|
|
|
+ * procs/clusters are present (x86_64 ES7000 is an example).
|
|
|
+ */
|
|
|
+ if (acpi_fadt.revision > FADT2_REVISION_ID)
|
|
|
+ if (acpi_fadt.force_apic_physical_destination_mode) {
|
|
|
+ genapic = &apic_cluster;
|
|
|
+ goto print;
|
|
|
+ }
|
|
|
+#endif
|
|
|
+
|
|
|
memset(cluster_cnt, 0, sizeof(cluster_cnt));
|
|
|
|
|
|
for (i = 0; i < NR_CPUS; i++) {
|