This adds machine a type detection hook to the acpi code, and renames
raw_phys_apicid to bios_cpu_apicid (it's an array of apicid's to boot,
indexed by the bios' cpu numbering), and I other large machines will
need to use it later ... not necessarily using physical interrupts.
diff -Nru a/arch/i386/kernel/acpi.c b/arch/i386/kernel/acpi.c
--- a/arch/i386/kernel/acpi.c Tue Jan 14 00:41:17 2003
+++ b/arch/i386/kernel/acpi.c Tue Jan 14 00:41:17 2003
@@ -44,6 +44,8 @@
#include <asm/io_apic.h>
#include <asm/tlbflush.h>
+#include <mach_apic.h>
+#include <mach_mpparse.h>
#define PREFIX "ACPI: "
@@ -126,6 +128,8 @@
printk(KERN_INFO PREFIX "Local APIC address 0x%08x\n",
madt->lapic_address);
+ acpi_madt_oem_check(madt->header.oem_id, madt->header.oem_table_id);
+
return 0;
}
@@ -430,8 +434,10 @@
#endif /*CONFIG_X86_IO_APIC*/
#ifdef CONFIG_X86_LOCAL_APIC
- if (acpi_lapic && acpi_ioapic)
+ if (acpi_lapic && acpi_ioapic) {
smp_found_config = 1;
+ clustered_apic_check();
+ }
#endif
return 0;
diff -Nru a/arch/i386/kernel/mpparse.c b/arch/i386/kernel/mpparse.c
--- a/arch/i386/kernel/mpparse.c Tue Jan 14 00:41:17 2003
+++ b/arch/i386/kernel/mpparse.c Tue Jan 14 00:41:17 2003
@@ -72,8 +72,8 @@
/* Bitmask of physically existing CPUs */
unsigned long phys_cpu_present_map;
-int summit_x86 = 0;
-u8 raw_phys_apicid[NR_CPUS] = { [0 ... NR_CPUS-1] = BAD_APICID };
+int x86_summit = 0;
+u8 bios_cpu_apicid[NR_CPUS] = { [0 ... NR_CPUS-1] = BAD_APICID };
/*
* Intel MP BIOS table parsing routines:
@@ -186,7 +186,7 @@
ver = 0x10;
}
apic_version[m->mpc_apicid] = ver;
- raw_phys_apicid[num_processors - 1] = m->mpc_apicid;
+ bios_cpu_apicid[num_processors - 1] = m->mpc_apicid;
}
static void __init MP_bus_info (struct mpc_config_bus *m)
diff -Nru a/include/asm-i386/mach-bigsmp/mach_apic.h b/include/asm-i386/mach-bigsmp/mach_apic.h
--- a/include/asm-i386/mach-bigsmp/mach_apic.h Tue Jan 14 00:41:17 2003
+++ b/include/asm-i386/mach-bigsmp/mach_apic.h Tue Jan 14 00:41:17 2003
@@ -67,11 +67,11 @@
return 0;
}
-extern u8 raw_phys_apicid[];
+extern u8 bios_cpu_apicid[];
static inline int cpu_present_to_apicid(int mps_cpu)
{
- return (int) raw_phys_apicid[mps_cpu];
+ return (int) bios_cpu_apicid[mps_cpu];
}
static inline unsigned long apicid_to_cpu_present(int phys_apicid)
diff -Nru a/include/asm-i386/mach-default/mach_mpparse.h b/include/asm-i386/mach-default/mach_mpparse.h
--- a/include/asm-i386/mach-default/mach_mpparse.h Tue Jan 14 00:41:17 2003
+++ b/include/asm-i386/mach-default/mach_mpparse.h Tue Jan 14 00:41:17 2003
@@ -17,4 +17,10 @@
{
}
+/* Hook from generic ACPI tables.c */
+static inline void acpi_madt_oem_check(char *oem_id, char *oem_table_id)
+{
+}
+
+
#endif /* __ASM_MACH_MPPARSE_H */
diff -Nru a/include/asm-i386/mach-numaq/mach_mpparse.h b/include/asm-i386/mach-numaq/mach_mpparse.h
--- a/include/asm-i386/mach-numaq/mach_mpparse.h Tue Jan 14 00:41:17 2003
+++ b/include/asm-i386/mach-numaq/mach_mpparse.h Tue Jan 14 00:41:17 2003
@@ -34,4 +34,9 @@
mpc->mpc_oemsize);
}
+/* Hook from generic ACPI tables.c */
+static inline void acpi_madt_oem_check(char *oem_id, char *oem_table_id)
+{
+}
+
#endif /* __ASM_MACH_MPPARSE_H */
diff -Nru a/include/asm-i386/mach-summit/mach_apic.h b/include/asm-i386/mach-summit/mach_apic.h
--- a/include/asm-i386/mach-summit/mach_apic.h Tue Jan 14 00:41:17 2003
+++ b/include/asm-i386/mach-summit/mach_apic.h Tue Jan 14 00:41:17 2003
@@ -45,7 +45,7 @@
static inline int cpu_present_to_apicid(int mps_cpu)
{
if (x86_summit)
- return (int) raw_phys_apicid[mps_cpu];
+ return (int) bios_cpu_apicid[mps_cpu];
else
return mps_cpu;
}
diff -Nru a/include/asm-i386/mach-summit/mach_mpparse.h b/include/asm-i386/mach-summit/mach_mpparse.h
--- a/include/asm-i386/mach-summit/mach_mpparse.h Tue Jan 14 00:41:17 2003
+++ b/include/asm-i386/mach-summit/mach_mpparse.h Tue Jan 14 00:41:17 2003
@@ -19,4 +19,10 @@
x86_summit = 1;
}
+/* Hook from generic ACPI tables.c */
+static inline void acpi_madt_oem_check(char *oem_id, char *oem_table_id)
+{
+ if (!strncmp(oem_id, "IBM", 3) && !strncmp(oem_table_id, "SERVIGIL", 8))
+ x86_summit = 1;
+}
#endif /* __ASM_MACH_MPPARSE_H */
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/