lkml.org 
[lkml]   [2009]   [Jan]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 10/17] x86-64: Move nodenumber from PDA to per-cpu.
    Date
    Signed-off-by: Brian Gerst <brgerst@gmail.com>
    ---
    arch/x86/include/asm/pda.h | 1 -
    arch/x86/include/asm/topology.h | 3 ++-
    arch/x86/kernel/cpu/common.c | 11 ++++++-----
    arch/x86/kernel/setup_percpu.c | 4 +++-
    4 files changed, 11 insertions(+), 8 deletions(-)

    diff --git a/arch/x86/include/asm/pda.h b/arch/x86/include/asm/pda.h
    index 4527d70..b30ef6b 100644
    --- a/arch/x86/include/asm/pda.h
    +++ b/arch/x86/include/asm/pda.h
    @@ -22,7 +22,6 @@ struct x8664_pda {
    /* gcc-ABI: this canary MUST be at
    offset 40!!! */
    #endif
    - short nodenumber; /* number of current node (32k max) */
    short in_bootmem; /* pda lives in bootmem */
    short isidle;
    } ____cacheline_aligned_in_smp;
    diff --git a/arch/x86/include/asm/topology.h b/arch/x86/include/asm/topology.h
    index 87ca3fd..90a8a15 100644
    --- a/arch/x86/include/asm/topology.h
    +++ b/arch/x86/include/asm/topology.h
    @@ -83,7 +83,8 @@ extern cpumask_t *node_to_cpumask_map;
    DECLARE_EARLY_PER_CPU(int, x86_cpu_to_node_map);

    /* Returns the number of the current Node. */
    -#define numa_node_id() read_pda(nodenumber)
    +DECLARE_PER_CPU(int, nodenumber);
    +#define numa_node_id() percpu_read(nodenumber)

    #ifdef CONFIG_DEBUG_PER_CPU_MAPS
    extern int cpu_to_node(int cpu);
    diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
    index 62f9665..ccc6f8a 100644
    --- a/arch/x86/kernel/cpu/common.c
    +++ b/arch/x86/kernel/cpu/common.c
    @@ -899,11 +899,6 @@ void __cpuinit pda_init(int cpu)
    loadsegment(gs, 0);

    load_pda_offset(cpu);
    -
    - if (cpu != 0) {
    - if (pda->nodenumber == 0 && cpu_to_node(cpu) != NUMA_NO_NODE)
    - pda->nodenumber = cpu_to_node(cpu);
    - }
    }

    static DEFINE_PER_CPU_PAGE_ALIGNED(char, exception_stacks
    @@ -973,6 +968,12 @@ void __cpuinit cpu_init(void)
    if (cpu != 0)
    pda_init(cpu);

    +#ifdef CONFIG_NUMA
    + if (cpu != 0 && percpu_read(nodenumber) == 0 &&
    + cpu_to_node(cpu) != NUMA_NO_NODE)
    + percpu_write(nodenumber, cpu_to_node(cpu));
    +#endif
    +
    me = current;

    if (cpumask_test_and_set_cpu(cpu, cpu_initialized_mask))
    diff --git a/arch/x86/kernel/setup_percpu.c b/arch/x86/kernel/setup_percpu.c
    index bd38127..0ddb184 100644
    --- a/arch/x86/kernel/setup_percpu.c
    +++ b/arch/x86/kernel/setup_percpu.c
    @@ -44,6 +44,8 @@ EXPORT_EARLY_PER_CPU_SYMBOL(x86_bios_cpu_apicid);

    #if defined(CONFIG_NUMA) && defined(CONFIG_X86_64)
    #define X86_64_NUMA 1 /* (used later) */
    +DEFINE_PER_CPU(int, nodenumber) = 0;
    +EXPORT_PER_CPU_SYMBOL(nodenumber);

    /*
    * Map cpu index to node index
    @@ -276,7 +278,7 @@ void __cpuinit numa_set_node(int cpu, int node)
    per_cpu(x86_cpu_to_node_map, cpu) = node;

    if (node != NUMA_NO_NODE)
    - cpu_pda(cpu)->nodenumber = node;
    + per_cpu(nodenumber, cpu) = node;
    }

    void __cpuinit numa_clear_node(int cpu)
    --
    1.6.1.rc1


    \
     
     \ /
      Last update: 2009-01-16 15:21    [W:0.034 / U:0.012 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site