From patchwork Thu May 26 02:43:58 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhen Lei X-Patchwork-Id: 68658 Delivered-To: patch@linaro.org Received: by 10.140.92.199 with SMTP id b65csp171286qge; Wed, 25 May 2016 19:44:45 -0700 (PDT) X-Received: by 10.98.21.210 with SMTP id 201mr10566565pfv.51.1464230685621; Wed, 25 May 2016 19:44:45 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r11si3076743pfj.75.2016.05.25.19.44.45; Wed, 25 May 2016 19:44:45 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of devicetree-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of devicetree-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=devicetree-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752826AbcEZCoo (ORCPT + 7 others); Wed, 25 May 2016 22:44:44 -0400 Received: from szxga02-in.huawei.com ([119.145.14.65]:29043 "EHLO szxga02-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752818AbcEZCon (ORCPT ); Wed, 25 May 2016 22:44:43 -0400 Received: from 172.24.1.60 (EHLO szxeml422-hub.china.huawei.com) ([172.24.1.60]) by szxrg02-dlp.huawei.com (MOS 4.3.7-GA FastPath queued) with ESMTP id DHT32596; Thu, 26 May 2016 10:44:35 +0800 (CST) Received: from localhost (10.177.23.164) by szxeml422-hub.china.huawei.com (10.82.67.152) with Microsoft SMTP Server id 14.3.235.1; Thu, 26 May 2016 10:44:25 +0800 From: Zhen Lei To: Catalin Marinas , Will Deacon , linux-arm-kernel , Ganapatrao Kulkarni , Robert Richter , "David Daney" , Rob Herring , "Frank Rowand" , Grant Likely , devicetree , linux-kernel CC: Zefan Li , Xinwei Hu , "Tianhong Ding" , Hanjun Guo , Zhen Lei Subject: [PATCH 2/3] of/numa: fix a memory@ dt node can only contains one memory block Date: Thu, 26 May 2016 10:43:58 +0800 Message-ID: <1464230639-9852-2-git-send-email-thunder.leizhen@huawei.com> X-Mailer: git-send-email 1.9.5.msysgit.1 In-Reply-To: <1464230639-9852-1-git-send-email-thunder.leizhen@huawei.com> References: <1464230639-9852-1-git-send-email-thunder.leizhen@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.177.23.164] X-CFilter-Loop: Reflected X-Mirapoint-Virus-RAPID-Raw: score=unknown(0), refid=str=0001.0A090206.57466315.001D, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0, ip=0.0.0.0, so=2013-06-18 04:22:30, dmn=2013-03-21 17:37:32 X-Mirapoint-Loop-Id: 890e7c4cdd6950eb11adc0be680a2129 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org 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 --- drivers/of/of_numa.c | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) -- 2.5.0 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/drivers/of/of_numa.c b/drivers/of/of_numa.c index 21d831f..2c5f249 100644 --- a/drivers/of/of_numa.c +++ b/drivers/of/of_numa.c @@ -63,7 +63,7 @@ static int __init of_numa_parse_memory_nodes(void) struct device_node *np = NULL; struct resource rsrc; u32 nid; - int r = 0; + int i, r = 0; for (;;) { np = of_find_node_by_type(np, "memory"); @@ -82,17 +82,27 @@ static int __init of_numa_parse_memory_nodes(void) /* 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; ; i++) { + r = of_address_to_resource(np, i, &rsrc); + if (r) { + /* reached the end of of_address */ + if (i > 0) { + r = 0; + break; + } + + pr_err("NUMA: bad reg property in memory node\n"); + goto finished; + } + + r = numa_add_memblk(nid, rsrc.start, + rsrc.end - rsrc.start + 1); + if (r) + goto finished; } - - r = numa_add_memblk(nid, rsrc.start, - rsrc.end - rsrc.start + 1); - if (r) - break; } + +finished: of_node_put(np); return r;