lkml.org 
[lkml]   [2011]   [Apr]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 05/25] x86, NUMA: Unify 32/64bit numa_cpu_node() implementation
    Date
    Currently, the only meaningful user of apic->x86_32_numa_cpu_node() is
    NUMAQ which returns valid mapping only after CPU is initialized during
    SMP bringup; thus, the previous patch to set apicid -> node in
    setup_local_APIC() makes __apicid_to_node[] always contain the correct
    mapping whether custom apic->x86_32_numa_cpu_node() is used or not.

    So, there is no reason to keep separate 32bit implementation. We can
    always consult __apicid_to_node[]. Move 64bit implementation from
    numa_64.c to numa.c and remove 32bit implementation from numa_32.c.

    Signed-off-by: Tejun Heo <tj@kernel.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Yinghai Lu <yinghai@kernel.org>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    ---
    arch/x86/include/asm/numa.h | 10 ++++++++++
    arch/x86/include/asm/numa_32.h | 6 ------
    arch/x86/include/asm/numa_64.h | 3 ---
    arch/x86/mm/numa.c | 9 +++++++++
    arch/x86/mm/numa_32.c | 5 -----
    arch/x86/mm/numa_64.c | 9 ---------
    6 files changed, 19 insertions(+), 23 deletions(-)

    diff --git a/arch/x86/include/asm/numa.h b/arch/x86/include/asm/numa.h
    index 3d4dab4..b2bd5e6 100644
    --- a/arch/x86/include/asm/numa.h
    +++ b/arch/x86/include/asm/numa.h
    @@ -1,6 +1,8 @@
    #ifndef _ASM_X86_NUMA_H
    #define _ASM_X86_NUMA_H

    +#include <linux/nodemask.h>
    +
    #include <asm/topology.h>
    #include <asm/apicdef.h>

    @@ -22,10 +24,18 @@ static inline void set_apicid_to_node(int apicid, s16 node)
    {
    __apicid_to_node[apicid] = node;
    }
    +
    +extern int __cpuinit numa_cpu_node(int cpu);
    +
    #else /* CONFIG_NUMA */
    static inline void set_apicid_to_node(int apicid, s16 node)
    {
    }
    +
    +static inline int numa_cpu_node(int cpu)
    +{
    + return NUMA_NO_NODE;
    +}
    #endif /* CONFIG_NUMA */

    #ifdef CONFIG_X86_32
    diff --git a/arch/x86/include/asm/numa_32.h b/arch/x86/include/asm/numa_32.h
    index c6beed1..242522f 100644
    --- a/arch/x86/include/asm/numa_32.h
    +++ b/arch/x86/include/asm/numa_32.h
    @@ -5,12 +5,6 @@ extern int numa_off;

    extern int pxm_to_nid(int pxm);

    -#ifdef CONFIG_NUMA
    -extern int __cpuinit numa_cpu_node(int cpu);
    -#else /* CONFIG_NUMA */
    -static inline int numa_cpu_node(int cpu) { return NUMA_NO_NODE; }
    -#endif /* CONFIG_NUMA */
    -
    #ifdef CONFIG_HIGHMEM
    extern void set_highmem_pages_init(void);
    #else
    diff --git a/arch/x86/include/asm/numa_64.h b/arch/x86/include/asm/numa_64.h
    index 344eb17..12461eb 100644
    --- a/arch/x86/include/asm/numa_64.h
    +++ b/arch/x86/include/asm/numa_64.h
    @@ -26,7 +26,6 @@ extern void setup_node_bootmem(int nodeid, unsigned long start,

    extern nodemask_t numa_nodes_parsed __initdata;

    -extern int __cpuinit numa_cpu_node(int cpu);
    extern int __init numa_add_memblk(int nodeid, u64 start, u64 end);
    extern void __init numa_set_distance(int from, int to, int distance);

    @@ -35,8 +34,6 @@ extern void __init numa_set_distance(int from, int to, int distance);
    #define FAKE_NODE_MIN_HASH_MASK (~(FAKE_NODE_MIN_SIZE - 1UL))
    void numa_emu_cmdline(char *);
    #endif /* CONFIG_NUMA_EMU */
    -#else
    -static inline int numa_cpu_node(int cpu) { return NUMA_NO_NODE; }
    #endif

    #endif /* _ASM_X86_NUMA_64_H */
    diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c
    index 9559d36..08530e3 100644
    --- a/arch/x86/mm/numa.c
    +++ b/arch/x86/mm/numa.c
    @@ -32,6 +32,15 @@ s16 __apicid_to_node[MAX_LOCAL_APIC] __cpuinitdata = {
    [0 ... MAX_LOCAL_APIC-1] = NUMA_NO_NODE
    };

    +int __cpuinit numa_cpu_node(int cpu)
    +{
    + int apicid = early_per_cpu(x86_cpu_to_apicid, cpu);
    +
    + if (apicid != BAD_APICID)
    + return __apicid_to_node[apicid];
    + return NUMA_NO_NODE;
    +}
    +
    cpumask_var_t node_to_cpumask_map[MAX_NUMNODES];
    EXPORT_SYMBOL(node_to_cpumask_map);

    diff --git a/arch/x86/mm/numa_32.c b/arch/x86/mm/numa_32.c
    index c757c0a..e0d9716 100644
    --- a/arch/x86/mm/numa_32.c
    +++ b/arch/x86/mm/numa_32.c
    @@ -107,11 +107,6 @@ extern unsigned long highend_pfn, highstart_pfn;
    static void *node_remap_start_vaddr[MAX_NUMNODES];
    void set_pmd_pfn(unsigned long vaddr, unsigned long pfn, pgprot_t flags);

    -int __cpuinit numa_cpu_node(int cpu)
    -{
    - return apic->x86_32_numa_cpu_node(cpu);
    -}
    -
    /*
    * FLAT - support for basic PC memory model with discontig enabled, essentially
    * a single node with all available processors in it with a flat
    diff --git a/arch/x86/mm/numa_64.c b/arch/x86/mm/numa_64.c
    index 59d8a1c..3598fbf 100644
    --- a/arch/x86/mm/numa_64.c
    +++ b/arch/x86/mm/numa_64.c
    @@ -512,15 +512,6 @@ unsigned long __init numa_free_all_bootmem(void)
    return pages;
    }

    -int __cpuinit numa_cpu_node(int cpu)
    -{
    - int apicid = early_per_cpu(x86_cpu_to_apicid, cpu);
    -
    - if (apicid != BAD_APICID)
    - return __apicid_to_node[apicid];
    - return NUMA_NO_NODE;
    -}
    -
    #ifdef CONFIG_MEMORY_HOTPLUG
    int memory_add_physaddr_to_nid(u64 start)
    {
    --
    1.7.1


    \
     
     \ /
      Last update: 2011-04-29 17:37    [W:0.037 / U:0.948 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site