ソースを参照

x86: unify smp_read_mpc

Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Alexey Starikovskiy 17 年 前
コミット
e950bea8bf
2 ファイル変更35 行追加17 行削除
  1. 13 12
      arch/x86/kernel/mpparse_32.c
  2. 22 5
      arch/x86/kernel/mpparse_64.c

+ 13 - 12
arch/x86/kernel/mpparse_32.c

@@ -288,39 +288,40 @@ static int __init smp_read_mpc(struct mp_config_table *mpc, unsigned early)
 	unsigned char *mpt = ((unsigned char *)mpc) + count;
 
 	if (memcmp(mpc->mpc_signature, MPC_SIGNATURE, 4)) {
-		printk(KERN_ERR "SMP mptable: bad signature [0x%x]!\n",
-		       *(u32 *) mpc->mpc_signature);
+		printk(KERN_ERR "MPTABLE: bad signature [%c%c%c%c]!\n",
+		       mpc->mpc_signature[0], mpc->mpc_signature[1],
+		       mpc->mpc_signature[2], mpc->mpc_signature[3]);
 		return 0;
 	}
 	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;
 	}
 	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);
 		return 0;
 	}
 	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;
 	}
 	memcpy(oem, mpc->mpc_oem, 8);
 	oem[8] = 0;
-	printk(KERN_INFO "OEM ID: %s ", oem);
+	printk(KERN_INFO "MPTABLE: OEM ID: %s ", oem);
 
 	memcpy(str, mpc->mpc_productid, 12);
 	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("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) -- but only
-	 * if we're not using ACPI.
-	 */
+	/* save the local APIC address, it might be non-default */
 	if (!acpi_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();
 	if (!num_processors)
-		printk(KERN_ERR "SMP mptable: no processors registered!\n");
+		printk(KERN_ERR "MPTABLE: no processors registered!\n");
 	return num_processors;
 }
 

+ 22 - 5
arch/x86/kernel/mpparse_64.c

@@ -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)
 {
 	char str[16];
+	char oem[10];
 	int count = sizeof(*mpc);
 	unsigned char *mpt = ((unsigned char *)mpc) + count;
 
 	if (memcmp(mpc->mpc_signature, MPC_SIGNATURE, 4)) {
 		printk(KERN_ERR "MPTABLE: bad signature [%c%c%c%c]!\n",
-		       mpc->mpc_signature[0],
-		       mpc->mpc_signature[1],
+		       mpc->mpc_signature[0], mpc->mpc_signature[1],
 		       mpc->mpc_signature[2], mpc->mpc_signature[3]);
 		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");
 		return 0;
 	}
-	memcpy(str, mpc->mpc_oem, 8);
-	str[8] = 0;
-	printk(KERN_INFO "MPTABLE: OEM ID: %s ", str);
+	memcpy(oem, mpc->mpc_oem, 8);
+	oem[8] = 0;
+	printk(KERN_INFO "MPTABLE: OEM ID: %s ", oem);
 
 	memcpy(str, mpc->mpc_productid, 12);
 	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: 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.
 	 */
+#ifdef CONFIG_X86_NUMAQ
+	mpc_record = 0;
+#endif
 	while (count < mpc->mpc_length) {
 		switch (*mpt) {
 		case MP_PROCESSOR:
 			{
 				struct mpc_config_processor *m =
 				    (struct mpc_config_processor *)mpt;
+				/* ACPI may have already provided this data */
 				if (!acpi_lapic)
 					MP_processor_info(m);
 				mpt += sizeof(*m);
@@ -280,7 +289,15 @@ static int __init smp_read_mpc(struct mp_config_table *mpc, unsigned early)
 				count += sizeof(*m);
 				break;
 			}
+		default:
+			{
+				count = mpc->mpc_length;
+				break;
+			}
 		}
+#ifdef CONFIG_X86_NUMAQ
+		++mpc_record;
+#endif
 	}
 	setup_apic_routing();
 	if (!num_processors)