lkml.org 
[lkml]   [2011]   [Feb]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4/7] x86-64, NUMA: Wrap node ID during emulation
    Date
    Both emulation layout functions - split_nodes[_size]_interleave() -
    didn't wrap emulated nid while laying out the fake nodes and tried to
    avoid interating over the specified number of nodes, which is fragile.

    Now that the emulation code generates numa_meminfo, the node memblks
    don't need to be consecutive and emulated node IDs can simply wrap.
    This makes the code more robust and is necessary for updates to better
    handle the cases where the physical nodes are interleaved.

    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 | 12 ++----------
    1 files changed, 2 insertions(+), 10 deletions(-)

    diff --git a/arch/x86/mm/numa_64.c b/arch/x86/mm/numa_64.c
    index 093530f..f26e7cd 100644
    --- a/arch/x86/mm/numa_64.c
    +++ b/arch/x86/mm/numa_64.c
    @@ -766,15 +766,7 @@ static int __init split_nodes_interleave(struct numa_meminfo *ei,
    memblock_x86_hole_size(end, physnodes[i].end) < size)
    end = physnodes[i].end;

    - /*
    - * Avoid allocating more nodes than requested, which can
    - * happen as a result of rounding down each node's size
    - * to FAKE_NODE_MIN_SIZE.
    - */
    - if (nodes_weight(physnode_mask) + nid >= nr_nodes)
    - end = physnodes[i].end;
    -
    - ret = emu_setup_memblk(ei, nid++, i,
    + ret = emu_setup_memblk(ei, nid++ % nr_nodes, i,
    physnodes[i].start,
    min(end, physnodes[i].end));
    if (ret < 0)
    @@ -871,7 +863,7 @@ static int __init split_nodes_size_interleave(struct numa_meminfo *ei,
    memblock_x86_hole_size(end, physnodes[i].end) < size)
    end = physnodes[i].end;

    - ret = emu_setup_memblk(ei, nid++, i,
    + ret = emu_setup_memblk(ei, nid++ % MAX_NUMNODES, i,
    physnodes[i].start,
    min(end, physnodes[i].end));
    if (ret < 0)
    --
    1.7.1


    \
     
     \ /
      Last update: 2011-02-14 20:31    [W:2.493 / U:0.124 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site