]> nv-tegra.nvidia Code Review - linux-2.6.git/commitdiff
x86: early check if a system is numaq
authorYinghai Lu <yhlu.kernel@gmail.com>
Tue, 3 Jun 2008 17:25:54 +0000 (10:25 -0700)
committerIngo Molnar <mingo@elte.hu>
Wed, 4 Jun 2008 10:01:06 +0000 (12:01 +0200)
so we could fall back to one node numa.

Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/kernel/mpparse.c
arch/x86/kernel/numaq_32.c
include/asm-x86/mpspec.h
include/asm-x86/numaq.h

index 8898aa49079d37ec9b7b996ec11cc7d4c1420b3e..b4a950da2f97c416b73e0e7d4807fd47e0113ac8 100644 (file)
@@ -70,7 +70,10 @@ static void __cpuinit MP_processor_info(struct mpc_config_processor *m)
                return;
        }
 #ifdef CONFIG_X86_NUMAQ
-       apicid = mpc_apic_id(m, translation_table[mpc_record]);
+       if (found_numaq)
+               apicid = mpc_apic_id(m, translation_table[mpc_record]);
+       else
+               apicid = m->mpc_apicid;
 #else
        apicid = m->mpc_apicid;
 #endif
@@ -91,7 +94,8 @@ static void __init MP_bus_info(struct mpc_config_bus *m)
        str[6] = 0;
 
 #ifdef CONFIG_X86_NUMAQ
-       mpc_oem_bus_info(m, str, translation_table[mpc_record]);
+       if (found_numaq)
+               mpc_oem_bus_info(m, str, translation_table[mpc_record]);
 #else
        printk(KERN_INFO "Bus #%d is %s\n", m->mpc_busid, str);
 #endif
@@ -112,7 +116,8 @@ static void __init MP_bus_info(struct mpc_config_bus *m)
 #endif
        } else if (strncmp(str, BUSTYPE_PCI, sizeof(BUSTYPE_PCI) - 1) == 0) {
 #ifdef CONFIG_X86_NUMAQ
-               mpc_oem_pci_bus(m, translation_table[mpc_record]);
+               if (found_numaq)
+                       mpc_oem_pci_bus(m, translation_table[mpc_record]);
 #endif
                clear_bit(m->mpc_busid, mp_bus_not_pci);
 #if defined(CONFIG_EISA) || defined (CONFIG_MCA)
@@ -321,6 +326,9 @@ static inline void mps_oem_check(struct mp_config_table *mpc, char *oem,
 {
        if (strncmp(oem, "IBM NUMA", 8))
                printk("Warning!  May not be a NUMA-Q system!\n");
+       else
+               found_numaq = 1;
+
        if (mpc->mpc_oemptr)
                smp_read_mpc_oem((struct mp_config_oemtable *)mpc->mpc_oemptr,
                                 mpc->mpc_oemsize);
index e65281b1634b790bd151c479fc96f3846febe87d..922be66668b8349b7be69d0130e9d81616da0164 100644 (file)
 #include <asm/numaq.h>
 #include <asm/topology.h>
 #include <asm/processor.h>
+#include <asm/mpspec.h>
 
 #define        MB_TO_PAGES(addr) ((addr) << (20 - PAGE_SHIFT))
 
+int found_numaq;
+
 /*
  * Function: smp_dump_qct()
  *
@@ -67,13 +70,24 @@ static void __init smp_dump_qct(void)
        }
 }
 
-/*
- * Unlike Summit, we don't really care to let the NUMA-Q
- * fall back to flat mode.  Don't compile for NUMA-Q
- * unless you really need it!
- */
+static __init void early_check_numaq(void)
+{
+       /*
+        * Find possible boot-time SMP configuration:
+        */
+       early_find_smp_config();
+       /*
+        * get boot-time SMP configuration:
+        */
+       if (smp_found_config)
+               early_get_smp_config();
+}
+
 int __init get_memcfg_numaq(void)
 {
+       early_check_numaq();
+       if (!found_numaq)
+               return 0;
        smp_dump_qct();
        return 1;
 }
index dbbf363dafb542d37eef36efff0cfb279cf1aed2..f38b68e8de5a259b611488efc8b530ade379906e 100644 (file)
@@ -21,11 +21,11 @@ extern int pic_mode;
 /* Each PCI slot may be a combo card with its own bus.  4 IRQ pins per slot. */
 #define MAX_IRQ_SOURCES (MAX_MP_BUSSES * 4)
 
+#endif
+
 extern void early_find_smp_config(void);
 extern void early_get_smp_config(void);
 
-#endif
-
 #if defined(CONFIG_MCA) || defined(CONFIG_EISA)
 extern int mp_bus_id_to_type[MAX_MP_BUSSES];
 #endif
index 94b86c31239aad607ff00e344e67233b42882f82..739d16484b8c4064d0f8c4c7172d00402ff221ba 100644 (file)
@@ -28,6 +28,7 @@
 
 #ifdef CONFIG_X86_NUMAQ
 
+extern int found_numaq;
 extern int get_memcfg_numaq(void);
 
 /*