lkml.org 
[lkml]   [2011]   [Feb]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 19/33] x86-64, NUMA: Separate out numa_cleanup_meminfo()
    Date
    Separate out numa_cleanup_meminfo() from numa_register_memblks().
    node_possible_map initialization is moved to the top of the split
    numa_register_memblks().

    This patch doesn't cause behavior change.

    Signed-off-by: Tejun Heo <tj@kernel.org>
    Cc: Yinghai Lu <yinghai@kernel.org>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: Cyrill Gorcunov <gorcunov@gmail.com>
    Cc: Shaohui Zheng <shaohui.zheng@intel.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: H. Peter Anvin <hpa@linux.intel.com>
    ---
    arch/x86/mm/numa_64.c | 83 +++++++++++++++++++++++++++----------------------
    1 files changed, 46 insertions(+), 37 deletions(-)

    diff --git a/arch/x86/mm/numa_64.c b/arch/x86/mm/numa_64.c
    index c3496e2..f2721de 100644
    --- a/arch/x86/mm/numa_64.c
    +++ b/arch/x86/mm/numa_64.c
    @@ -292,40 +292,8 @@ setup_node_bootmem(int nodeid, unsigned long start, unsigned long end)
    node_set_online(nodeid);
    }

    -/*
    - * Sanity check to catch more bad NUMA configurations (they are amazingly
    - * common). Make sure the nodes cover all memory.
    - */
    -static int __init nodes_cover_memory(const struct bootnode *nodes)
    +static int __init numa_cleanup_meminfo(struct numa_meminfo *mi)
    {
    - unsigned long numaram, e820ram;
    - int i;
    -
    - numaram = 0;
    - for_each_node_mask(i, mem_nodes_parsed) {
    - unsigned long s = nodes[i].start >> PAGE_SHIFT;
    - unsigned long e = nodes[i].end >> PAGE_SHIFT;
    - numaram += e - s;
    - numaram -= __absent_pages_in_range(i, s, e);
    - if ((long)numaram < 0)
    - numaram = 0;
    - }
    -
    - e820ram = max_pfn -
    - (memblock_x86_hole_size(0, max_pfn<<PAGE_SHIFT) >> PAGE_SHIFT);
    - /* We seem to lose 3 pages somewhere. Allow 1M of slack. */
    - if ((long)(e820ram - numaram) >= (1<<(20 - PAGE_SHIFT))) {
    - printk(KERN_ERR "NUMA: nodes only cover %luMB of your %luMB e820 RAM. Not used.\n",
    - (numaram << PAGE_SHIFT) >> 20,
    - (e820ram << PAGE_SHIFT) >> 20);
    - return 0;
    - }
    - return 1;
    -}
    -
    -static int __init numa_register_memblks(void)
    -{
    - struct numa_meminfo *mi = &numa_meminfo;
    int i;

    /*
    @@ -368,6 +336,49 @@ static int __init numa_register_memblks(void)
    }
    }

    + return 0;
    +}
    +
    +/*
    + * Sanity check to catch more bad NUMA configurations (they are amazingly
    + * common). Make sure the nodes cover all memory.
    + */
    +static int __init nodes_cover_memory(const struct bootnode *nodes)
    +{
    + unsigned long numaram, e820ram;
    + int i;
    +
    + numaram = 0;
    + for_each_node_mask(i, mem_nodes_parsed) {
    + unsigned long s = nodes[i].start >> PAGE_SHIFT;
    + unsigned long e = nodes[i].end >> PAGE_SHIFT;
    + numaram += e - s;
    + numaram -= __absent_pages_in_range(i, s, e);
    + if ((long)numaram < 0)
    + numaram = 0;
    + }
    +
    + e820ram = max_pfn - (memblock_x86_hole_size(0,
    + max_pfn << PAGE_SHIFT) >> PAGE_SHIFT);
    + /* We seem to lose 3 pages somewhere. Allow 1M of slack. */
    + if ((long)(e820ram - numaram) >= (1 << (20 - PAGE_SHIFT))) {
    + printk(KERN_ERR "NUMA: nodes only cover %luMB of your %luMB e820 RAM. Not used.\n",
    + (numaram << PAGE_SHIFT) >> 20,
    + (e820ram << PAGE_SHIFT) >> 20);
    + return 0;
    + }
    + return 1;
    +}
    +
    +static int __init numa_register_memblks(struct numa_meminfo *mi)
    +{
    + int i;
    +
    + /* Account for nodes with cpus and no memory */
    + nodes_or(node_possible_map, mem_nodes_parsed, cpu_nodes_parsed);
    + if (WARN_ON(nodes_empty(node_possible_map)))
    + return -EINVAL;
    +
    memnode_shift = compute_hash_shift(mi);
    if (memnode_shift < 0) {
    printk(KERN_ERR "NUMA: No NUMA node hash function found. Contact maintainer\n");
    @@ -823,12 +834,10 @@ void __init initmem_init(void)
    nodes_clear(node_possible_map);
    nodes_clear(node_online_map);
    #endif
    - /* Account for nodes with cpus and no memory */
    - nodes_or(node_possible_map, mem_nodes_parsed, cpu_nodes_parsed);
    - if (WARN_ON(nodes_empty(node_possible_map)))
    + if (numa_cleanup_meminfo(&numa_meminfo) < 0)
    continue;

    - if (numa_register_memblks() < 0)
    + if (numa_register_memblks(&numa_meminfo) < 0)
    continue;

    for (j = 0; j < nr_cpu_ids; j++) {
    --
    1.7.1


    \
     
     \ /
      Last update: 2011-02-16 13:25    [W:0.029 / U:0.160 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site