Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932168AbdHWOmr (ORCPT ); Wed, 23 Aug 2017 10:42:47 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:42921 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932118AbdHWOm1 (ORCPT ); Wed, 23 Aug 2017 10:42:27 -0400 Subject: Re: [PATCH V9 2/2] powerpc/nodes: Ensure enough nodes avail for operations To: Michael Bringmann , linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org Cc: Michael Ellerman , John Allen , 9e5050e1-e0cc-0e0e-7b31-5dcb38b307f4@linux.vnet.ibm.com References: <83b05ed2-8d18-3d5c-2003-b022d0d55eb2@linux.vnet.ibm.com> From: Nathan Fontenot Date: Wed, 23 Aug 2017 09:42:22 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 In-Reply-To: <83b05ed2-8d18-3d5c-2003-b022d0d55eb2@linux.vnet.ibm.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-TM-AS-GCONF: 00 x-cbid: 17082314-0024-0000-0000-000017167F30 X-IBM-SpamModules-Scores: X-IBM-SpamModules-Versions: BY=3.00007597; HX=3.00000241; KW=3.00000007; PH=3.00000004; SC=3.00000224; SDB=6.00906517; UDB=6.00454364; IPR=6.00686719; BA=6.00005550; NDR=6.00000001; ZLA=6.00000005; ZF=6.00000009; ZB=6.00000000; ZP=6.00000000; ZH=6.00000000; ZU=6.00000002; MB=3.00016830; XFM=3.00000015; UTC=2017-08-23 14:42:24 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17082314-0025-0000-0000-00004C6D4EAD Message-Id: X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-08-23_05:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1707230000 definitions=main-1708230220 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3586 Lines: 112 On 08/21/2017 04:44 PM, Michael Bringmann wrote: > To: linuxppc-dev@lists.ozlabs.org > > From: Michael Bringmann > > To: linux-kernel@vger.kernel.org > Cc: Michael Ellerman > Cc: Michael Bringmann > Cc: John Allen > Cc: Nathan Fontenot > Subject: [PATCH V9 2/2] powerpc/nodes: Ensure enough nodes avail for operations > > powerpc/nodes: On systems like PowerPC which allow 'hot-add' of CPU > or memory resources, it may occur that the new resources are to be > inserted into nodes that were not used for these resources at bootup. > In the kernel, any node that is used must be defined and initialized > at boot. > > This patch extracts the value of the lowest domain level (number of > allocable resources) from the "rtas" device tree property > "ibm,max-associativity-domains" to use as the maximum number of nodes > to setup as possibly available in the system. This new setting will > override the instruction, > > nodes_and(node_possible_map, node_possible_map, node_online_map); > > presently seen in the function arch/powerpc/mm/numa.c:initmem_init(). > > If the property is not present at boot, no operation will be performed > to define or enable additional nodes. > > Signed-off-by: Michael Bringmann > --- > arch/powerpc/mm/numa.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 44 insertions(+) > > diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c > index 3fd4536..3ae6510 100644 > --- a/arch/powerpc/mm/numa.c > +++ b/arch/powerpc/mm/numa.c > @@ -893,6 +893,48 @@ static void __init setup_node_data(int nid, u64 start_pfn, u64 end_pfn) > NODE_DATA(nid)->node_spanned_pages = spanned_pages; > } > > +static void __init node_associativity_setup(void) > +{ > + struct device_node *rtas; > + printk(KERN_INFO "%s:%d\n", __FUNCTION__, __LINE__); Is there a reson we need to have all these KERN_INFO printk's? This looks like debug statements that accidentally were left in. > + > + rtas = of_find_node_by_path("/rtas"); > + if (rtas) { > + const __be32 *prop; > + u32 len, entries, levelval, i; > + printk(KERN_INFO "%s:%d\n", __FUNCTION__, __LINE__); > + > + prop = of_get_property(rtas, "ibm,max-associativity-domains", &len); You could put the of_node_put() call here after getting the property and get rid of all the goto's. > + if (!prop || len < sizeof(unsigned int)) { > + printk(KERN_INFO "%s:%d\n", __FUNCTION__, __LINE__); > + goto endit; > + } > + > + entries = of_read_number(prop++, 1); > + > + if (len < (entries * sizeof(unsigned int))) { > + printk(KERN_INFO "%s:%d\n", __FUNCTION__, __LINE__); > + goto endit; > + } > + > + for (i = 0; i < entries; i++) > + levelval = of_read_number(prop++, 1); Couldn't you just read the last enbtry instead of doing a loop reading each entry until you get to the last one? -Nathan > + > + printk(KERN_INFO "Numa nodes avail: %d (%d) \n", (int) levelval, (int) entries); > + > + for (i = 0; i < levelval; i++) { > + if (!node_possible(i)) { > + setup_node_data(i, 0, 0); > + node_set(i, node_possible_map); > + } > + } > + } > + > +endit: > + if (rtas) > + of_node_put(rtas)> +} > + > void __init initmem_init(void) > { > int nid, cpu; > @@ -912,6 +954,8 @@ void __init initmem_init(void) > */ > nodes_and(node_possible_map, node_possible_map, node_online_map); > > + node_associativity_setup(); > + > for_each_online_node(nid) { > unsigned long start_pfn, end_pfn; >