lkml.org 
[lkml]   [2008]   [Jun]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] x86: early check if one system is numaq v2
    Date

    so could fallback one node numa
    v2: using found_numaq with MP_processor_info and MP_bus_info

    Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com>

    Index: linux-2.6/arch/x86/kernel/mpparse.c
    ===================================================================
    --- linux-2.6.orig/arch/x86/kernel/mpparse.c
    +++ linux-2.6/arch/x86/kernel/mpparse.c
    @@ -70,7 +70,10 @@ static void __cpuinit MP_processor_info(
    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 mp
    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 mp
    #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
    {
    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: linux-2.6/arch/x86/kernel/numaq_32.c
    ===================================================================
    --- linux-2.6.orig/arch/x86/kernel/numaq_32.c
    +++ linux-2.6/arch/x86/kernel/numaq_32.c
    @@ -31,9 +31,12 @@
    #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: linux-2.6/include/asm-x86/numaq.h
    ===================================================================
    --- linux-2.6.orig/include/asm-x86/numaq.h
    +++ linux-2.6/include/asm-x86/numaq.h
    @@ -28,6 +28,7 @@

    #ifdef CONFIG_X86_NUMAQ

    +extern int found_numaq;
    extern int get_memcfg_numaq(void);

    /*
    Index: linux-2.6/include/asm-x86/mpspec.h
    ===================================================================
    --- linux-2.6.orig/include/asm-x86/mpspec.h
    +++ linux-2.6/include/asm-x86/mpspec.h
    @@ -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

    \
     
     \ /
      Last update: 2008-06-03 19:29    [W:4.058 / U:0.480 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site