lkml.org 
[lkml]   [2016]   [Aug]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v5 02/14] of/numa: fix a memory@ node can only contains one memory block
    Date
    For a normal memory@ devicetree node, its reg property can contains more
    memory blocks.

    Because we don't known how many memory blocks maybe contained, so we try
    from index=0, increase 1 until error returned(the end).

    Signed-off-by: Zhen Lei <thunder.leizhen@huawei.com>
    Acked-by: Rob Herring <robh@kernel.org>
    ---
    drivers/of/of_numa.c | 29 ++++++++++-------------------
    1 file changed, 10 insertions(+), 19 deletions(-)

    diff --git a/drivers/of/of_numa.c b/drivers/of/of_numa.c
    index fb71b4e..7b3fbdc 100644
    --- a/drivers/of/of_numa.c
    +++ b/drivers/of/of_numa.c
    @@ -63,13 +63,9 @@ static int __init of_numa_parse_memory_nodes(void)
    struct device_node *np = NULL;
    struct resource rsrc;
    u32 nid;
    - int r = 0;
    -
    - for (;;) {
    - np = of_find_node_by_type(np, "memory");
    - if (!np)
    - break;
    + int i, r;

    + for_each_node_by_type(np, "memory") {
    r = of_property_read_u32(np, "numa-node-id", &nid);
    if (r == -EINVAL)
    /*
    @@ -78,23 +74,18 @@ static int __init of_numa_parse_memory_nodes(void)
    * "numa-node-id" property
    */
    continue;
    - else if (r)
    - /* some other error */
    - break;

    - r = of_address_to_resource(np, 0, &rsrc);
    - if (r) {
    - pr_err("NUMA: bad reg property in memory node\n");
    - break;
    - }
    + for (i = 0; !r && !of_address_to_resource(np, i, &rsrc); i++)
    + r = numa_add_memblk(nid, rsrc.start, rsrc.end + 1);

    - r = numa_add_memblk(nid, rsrc.start, rsrc.end + 1);
    - if (r)
    - break;
    + if (!i || r) {
    + of_node_put(np);
    + pr_err("NUMA: bad property in memory node\n");
    + return r ? : -EINVAL;
    + }
    }
    - of_node_put(np);

    - return r;
    + return 0;
    }

    static int __init of_numa_parse_distance_map_v1(struct device_node *map)
    --
    2.5.0

    \
     
     \ /
      Last update: 2016-08-08 12:01    [W:3.375 / U:0.148 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site