|
@@ -274,6 +274,18 @@ static void __init smp_dump_mptable(struct mpc_table *mpc, unsigned char *mpt)
|
|
|
|
|
|
void __init default_smp_read_mpc_oem(struct mpc_table *mpc) { }
|
|
|
|
|
|
+static void __init smp_register_lapic_address(unsigned long address)
|
|
|
+{
|
|
|
+ mp_lapic_addr = address;
|
|
|
+
|
|
|
+ set_fixmap_nocache(FIX_APIC_BASE, address);
|
|
|
+ if (boot_cpu_physical_apicid == -1U) {
|
|
|
+ boot_cpu_physical_apicid = read_apic_id();
|
|
|
+ apic_version[boot_cpu_physical_apicid] =
|
|
|
+ GET_APIC_VERSION(apic_read(APIC_LVR));
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
static int __init smp_read_mpc(struct mpc_table *mpc, unsigned early)
|
|
|
{
|
|
|
char str[16];
|
|
@@ -295,6 +307,10 @@ static int __init smp_read_mpc(struct mpc_table *mpc, unsigned early)
|
|
|
if (early)
|
|
|
return 1;
|
|
|
|
|
|
+ /* Initialize the lapic mapping */
|
|
|
+ if (!acpi_lapic)
|
|
|
+ smp_register_lapic_address(mpc->lapic);
|
|
|
+
|
|
|
if (mpc->oemptr)
|
|
|
x86_init.mpparse.smp_read_mpc_oem(mpc);
|
|
|
|