From patchwork Tue Jul 11 17:36:11 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Bringmann X-Patchwork-Id: 786779 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3x6TpJ2szNz9s0Z for ; Wed, 12 Jul 2017 03:38:48 +1000 (AEST) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 3x6TpJ1w65zDqb5 for ; Wed, 12 Jul 2017 03:38:48 +1000 (AEST) X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 3x6TlT1ycRzDqgQ for ; Wed, 12 Jul 2017 03:36:21 +1000 (AEST) Received: from pps.filterd (m0098394.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id v6BHY1Qt052117 for ; Tue, 11 Jul 2017 13:36:19 -0400 Received: from e18.ny.us.ibm.com (e18.ny.us.ibm.com [129.33.205.208]) by mx0a-001b2d01.pphosted.com with ESMTP id 2bn0mx7q6n-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Tue, 11 Jul 2017 13:36:19 -0400 Received: from localhost by e18.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 11 Jul 2017 13:36:17 -0400 Received: from b01cxnp23032.gho.pok.ibm.com (9.57.198.27) by e18.ny.us.ibm.com (146.89.104.205) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Tue, 11 Jul 2017 13:36:13 -0400 Received: from b01ledav003.gho.pok.ibm.com (b01ledav003.gho.pok.ibm.com [9.57.199.108]) by b01cxnp23032.gho.pok.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id v6BHaDTu24838320; Tue, 11 Jul 2017 17:36:13 GMT Received: from b01ledav003.gho.pok.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id B4E8BB2050; Tue, 11 Jul 2017 13:33:43 -0400 (EDT) Received: from oc1554177480.ibm.com (unknown [9.53.92.155]) by b01ledav003.gho.pok.ibm.com (Postfix) with ESMTP id 3BF4AB204E; Tue, 11 Jul 2017 13:33:42 -0400 (EDT) To: linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org From: Michael Bringmann Subject: [PATCH V8 1/2] powerpc/hotplug: Ensure enough nodes avail for operations Organization: IBM Linux Technology Center In-Reply-To: Date: Tue, 11 Jul 2017 12:36:11 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.1.0 MIME-Version: 1.0 Content-Language: en-US X-TM-AS-GCONF: 00 x-cbid: 17071117-0044-0000-0000-0000036B02F1 X-IBM-SpamModules-Scores: X-IBM-SpamModules-Versions: BY=3.00007350; HX=3.00000241; KW=3.00000007; PH=3.00000004; SC=3.00000214; SDB=6.00886111; UDB=6.00442285; IPR=6.00666261; BA=6.00005468; NDR=6.00000001; ZLA=6.00000005; ZF=6.00000009; ZB=6.00000000; ZP=6.00000000; ZH=6.00000000; ZU=6.00000002; MB=3.00016181; XFM=3.00000015; UTC=2017-07-11 17:36:17 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17071117-0045-0000-0000-00000799068F Message-Id: X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-07-11_09:, , 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-1706020000 definitions=main-1707110281 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Sebastian Andrzej Siewior , Bharata B Rao , Rashmica Gupta , Reza Arbab , John Allen , Michael Bringmann , Paul Mackerras , "Aneesh Kumar K.V" , Shailendra Singh , Thomas Gleixner , Ingo Molnar , David Gibson Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" powerpc/hotplug: 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. In order to meet both needs, this patch adds a new kernel command line option (numnodes=) for use by the PowerPC architecture- specific code that defines the maximum number of nodes that the kernel will ever need in its current hardware environment. The boot code that initializes nodes for PowerPC will read this value and use it to ensure that all of the desired nodes are setup in the 'node_possible_map', and elsewhere. Signed-off-by: Michael Bringmann --- --- arch/powerpc/mm/numa.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c index e6f742d..0746d93 100644 --- a/arch/powerpc/mm/numa.c +++ b/arch/powerpc/mm/numa.c @@ -60,10 +60,27 @@ static int n_mem_addr_cells, n_mem_size_cells; static int form1_affinity; +#define TOPOLOGY_DEF_NUM_NODES 0 #define MAX_DISTANCE_REF_POINTS 4 static int distance_ref_points_depth; static const __be32 *distance_ref_points; static int distance_lookup_table[MAX_NUMNODES][MAX_DISTANCE_REF_POINTS]; +static int topology_num_nodes = TOPOLOGY_DEF_NUM_NODES; + +/* + * Topology-related early parameters + */ +static int __init early_num_nodes(char *p) +{ + if (!p) + return 1; + + topology_num_nodes = memparse(p, &p); + dbg("topology num nodes = 0x%d\n", topology_num_nodes); + + return 0; +} +early_param("numnodes", early_num_nodes); /* * Allocate node_to_cpumask_map based on number of available nodes @@ -892,6 +909,18 @@ 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 setup_min_nodes(void) +{ + int i, l = topology_num_nodes; + + for (i = 0; i < l; i++) { + if (!node_possible(i)) { + setup_node_data(i, 0, 0); + node_set(i, node_possible_map); + } + } +} + void __init initmem_init(void) { int nid, cpu; @@ -911,6 +940,8 @@ void __init initmem_init(void) */ nodes_and(node_possible_map, node_possible_map, node_online_map); + setup_min_nodes(); + for_each_online_node(nid) { unsigned long start_pfn, end_pfn;