x86: unify smp_read_mpc
Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
f8924e770e
commit
e950bea8bf
2 changed files with 35 additions and 17 deletions
|
@ -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)
|
||||||
}
|
}
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
/*
|
/*
|
||||||
* 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)
|
||||||
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)
|
||||||
|
|
Loading…
Add table
Reference in a new issue