diff options
Diffstat (limited to 'arch/x86/kernel/mpparse.c')
| -rw-r--r-- | arch/x86/kernel/mpparse.c | 18 | 
1 files changed, 17 insertions, 1 deletions
diff --git a/arch/x86/kernel/mpparse.c b/arch/x86/kernel/mpparse.c index 5ae5d2426ed..d7b6f7fb4fe 100644 --- a/arch/x86/kernel/mpparse.c +++ b/arch/x86/kernel/mpparse.c @@ -123,7 +123,7 @@ static void __init MP_ioapic_info(struct mpc_ioapic *m)  	printk(KERN_INFO "I/O APIC #%d Version %d at 0x%X.\n",  	       m->apicid, m->apicver, m->apicaddr); -	mp_register_ioapic(m->apicid, m->apicaddr, gsi_end + 1); +	mp_register_ioapic(m->apicid, m->apicaddr, gsi_top);  }  static void print_MP_intsrc_info(struct mpc_intsrc *m) @@ -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);  | 
