Commit e950bea8 authored by Alexey Starikovskiy's avatar Alexey Starikovskiy Committed by Ingo Molnar

x86: unify smp_read_mpc

Signed-off-by: default avatarAlexey Starikovskiy <astarikovskiy@suse.de>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent f8924e77
...@@ -288,39 +288,40 @@ static int __init smp_read_mpc(struct mp_config_table *mpc, unsigned early) ...@@ -288,39 +288,40 @@ static int __init smp_read_mpc(struct mp_config_table *mpc, unsigned early)
unsigned char *mpt = ((unsigned char *)mpc) + count; unsigned char *mpt = ((unsigned char *)mpc) + count;
if (memcmp(mpc->mpc_signature, MPC_SIGNATURE, 4)) { if (memcmp(mpc->mpc_signature, MPC_SIGNATURE, 4)) {
printk(KERN_ERR "SMP mptable: bad signature [0x%x]!\n", printk(KERN_ERR "MPTABLE: bad signature [%c%c%c%c]!\n",
*(u32 *) mpc->mpc_signature); mpc->mpc_signature[0], mpc->mpc_signature[1],
mpc->mpc_signature[2], mpc->mpc_signature[3]);
return 0; return 0;
} }
if (mpf_checksum((unsigned char *)mpc, mpc->mpc_length)) { if (mpf_checksum((unsigned char *)mpc, mpc->mpc_length)) {
printk(KERN_ERR "SMP mptable: checksum error!\n"); printk(KERN_ERR "MPTABLE: checksum error!\n");
return 0; return 0;
} }
if (mpc->mpc_spec != 0x01 && mpc->mpc_spec != 0x04) { if (mpc->mpc_spec != 0x01 && mpc->mpc_spec != 0x04) {
printk(KERN_ERR "SMP mptable: bad table version (%d)!!\n", printk(KERN_ERR "MPTABLE: bad table version (%d)!!\n",
mpc->mpc_spec); mpc->mpc_spec);
return 0; return 0;
} }
if (!mpc->mpc_lapic) { if (!mpc->mpc_lapic) {
printk(KERN_ERR "SMP mptable: null local APIC address!\n"); printk(KERN_ERR "MPTABLE: null local APIC address!\n");
return 0; return 0;
} }
memcpy(oem, mpc->mpc_oem, 8); memcpy(oem, mpc->mpc_oem, 8);
oem[8] = 0; oem[8] = 0;
printk(KERN_INFO "OEM ID: %s ", oem); printk(KERN_INFO "MPTABLE: OEM ID: %s ", oem);
memcpy(str, mpc->mpc_productid, 12); memcpy(str, mpc->mpc_productid, 12);
str[12] = 0; str[12] = 0;
printk("Product ID: %s ", str); printk("Product ID: %s ", str);
#ifdef CONFIG_X86_32
mps_oem_check(mpc, oem, str); mps_oem_check(mpc, oem, str);
#endif
printk(KERN_INFO "MPTABLE: Product ID: %s ", str);
printk("APIC at: 0x%X\n", mpc->mpc_lapic); printk(KERN_INFO "MPTABLE: APIC at: 0x%X\n", mpc->mpc_lapic);
/* /* save the local APIC address, it might be non-default */
* Save the local APIC address (it might be non-default) -- but only
* if we're not using ACPI.
*/
if (!acpi_lapic) if (!acpi_lapic)
mp_lapic_addr = mpc->mpc_lapic; mp_lapic_addr = mpc->mpc_lapic;
...@@ -399,7 +400,7 @@ static int __init smp_read_mpc(struct mp_config_table *mpc, unsigned early) ...@@ -399,7 +400,7 @@ static int __init smp_read_mpc(struct mp_config_table *mpc, unsigned early)
} }
setup_apic_routing(); setup_apic_routing();
if (!num_processors) if (!num_processors)
printk(KERN_ERR "SMP mptable: no processors registered!\n"); printk(KERN_ERR "MPTABLE: no processors registered!\n");
return num_processors; return num_processors;
} }
......
...@@ -188,13 +188,13 @@ static void __init MP_lintsrc_info(struct mpc_config_lintsrc *m) ...@@ -188,13 +188,13 @@ static void __init MP_lintsrc_info(struct mpc_config_lintsrc *m)
static int __init smp_read_mpc(struct mp_config_table *mpc, unsigned early) static int __init smp_read_mpc(struct mp_config_table *mpc, unsigned early)
{ {
char str[16]; char str[16];
char oem[10];
int count = sizeof(*mpc); int count = sizeof(*mpc);
unsigned char *mpt = ((unsigned char *)mpc) + count; unsigned char *mpt = ((unsigned char *)mpc) + count;
if (memcmp(mpc->mpc_signature, MPC_SIGNATURE, 4)) { if (memcmp(mpc->mpc_signature, MPC_SIGNATURE, 4)) {
printk(KERN_ERR "MPTABLE: bad signature [%c%c%c%c]!\n", printk(KERN_ERR "MPTABLE: bad signature [%c%c%c%c]!\n",
mpc->mpc_signature[0], mpc->mpc_signature[0], mpc->mpc_signature[1],
mpc->mpc_signature[1],
mpc->mpc_signature[2], mpc->mpc_signature[3]); mpc->mpc_signature[2], mpc->mpc_signature[3]);
return 0; return 0;
} }
...@@ -211,12 +211,17 @@ static int __init smp_read_mpc(struct mp_config_table *mpc, unsigned early) ...@@ -211,12 +211,17 @@ static int __init smp_read_mpc(struct mp_config_table *mpc, unsigned early)
printk(KERN_ERR "MPTABLE: null local APIC address!\n"); printk(KERN_ERR "MPTABLE: null local APIC address!\n");
return 0; return 0;
} }
memcpy(str, mpc->mpc_oem, 8); memcpy(oem, mpc->mpc_oem, 8);
str[8] = 0; oem[8] = 0;
printk(KERN_INFO "MPTABLE: OEM ID: %s ", str); printk(KERN_INFO "MPTABLE: OEM ID: %s ", oem);
memcpy(str, mpc->mpc_productid, 12); memcpy(str, mpc->mpc_productid, 12);
str[12] = 0; str[12] = 0;
printk("Product ID: %s ", str);
#ifdef CONFIG_X86_32
mps_oem_check(mpc, oem, str);
#endif
printk(KERN_INFO "MPTABLE: Product ID: %s ", str); printk(KERN_INFO "MPTABLE: Product ID: %s ", str);
printk(KERN_INFO "MPTABLE: APIC at: 0x%X\n", mpc->mpc_lapic); printk(KERN_INFO "MPTABLE: APIC at: 0x%X\n", mpc->mpc_lapic);
...@@ -231,12 +236,16 @@ static int __init smp_read_mpc(struct mp_config_table *mpc, unsigned early) ...@@ -231,12 +236,16 @@ static int __init smp_read_mpc(struct mp_config_table *mpc, unsigned early)
/* /*
* Now process the configuration blocks. * Now process the configuration blocks.
*/ */
#ifdef CONFIG_X86_NUMAQ
mpc_record = 0;
#endif
while (count < mpc->mpc_length) { while (count < mpc->mpc_length) {
switch (*mpt) { switch (*mpt) {
case MP_PROCESSOR: case MP_PROCESSOR:
{ {
struct mpc_config_processor *m = struct mpc_config_processor *m =
(struct mpc_config_processor *)mpt; (struct mpc_config_processor *)mpt;
/* ACPI may have already provided this data */
if (!acpi_lapic) if (!acpi_lapic)
MP_processor_info(m); MP_processor_info(m);
mpt += sizeof(*m); mpt += sizeof(*m);
...@@ -280,7 +289,15 @@ static int __init smp_read_mpc(struct mp_config_table *mpc, unsigned early) ...@@ -280,7 +289,15 @@ static int __init smp_read_mpc(struct mp_config_table *mpc, unsigned early)
count += sizeof(*m); count += sizeof(*m);
break; break;
} }
default:
{
count = mpc->mpc_length;
break;
}
} }
#ifdef CONFIG_X86_NUMAQ
++mpc_record;
#endif
} }
setup_apic_routing(); setup_apic_routing();
if (!num_processors) if (!num_processors)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment