From patchwork Tue Jul 18 11:41:27 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vijay Kilari X-Patchwork-Id: 9848081 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 2D55960393 for ; Tue, 18 Jul 2017 11:44:44 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1A0A6283C3 for ; Tue, 18 Jul 2017 11:44:44 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0EBF828497; Tue, 18 Jul 2017 11:44:44 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.1 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,FREEMAIL_FROM,RCVD_IN_DNSWL_MED,RCVD_IN_SORBS_SPAM, RCVD_IN_SORBS_WEB,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 728B2283C3 for ; Tue, 18 Jul 2017 11:44:43 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dXQto-0006WR-Bz; Tue, 18 Jul 2017 11:42:44 +0000 Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dXQtn-0006VU-1I for xen-devel@lists.xen.org; Tue, 18 Jul 2017 11:42:43 +0000 Received: from [85.158.143.35] by server-6.bemta-6.messagelabs.com id 57/64-03937-234FD695; Tue, 18 Jul 2017 11:42:42 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrOIsWRWlGSWpSXmKPExsXiVRvspGv4JTf SYN8uXYslHxezODB6HN39mymAMYo1My8pvyKBNeP+k17GgluWFVsWfWFsYDyr18XIxSEkMJFR 4tHnh6wgDovASxaJo5OfsoA4EgL9rBLPTi9n6mLkBHLiJK58vsQIYZdLnL26ig3EFhJQlej4/ 5YdYlQbk8SV9ftZQRJsAjISR54fAGsWEZCWuPb5MiNIEbPANiaJTdensoMkhAWSJJ5uXg1msw BNevHsJQuIzSvgKnGtZyFQnANom4LEnEk2IGFOATeJRV2X2CEWu0rc6FvJOoFRYAEjwypGjeL UorLUIl1DU72kosz0jJLcxMwcXUMDM73c1OLixPTUnMSkYr3k/NxNjMDgYgCCHYzflgUcYpTk YFIS5V19IDdSiC8pP6UyI7E4I76oNCe1+BCjDAeHkgQv22egnGBRanpqRVpmDjDMYdISHDxKI rziIGne4oLE3OLMdIjUKUZjjkkHtn9h4ng14f83JiGWvPy8VClx3jWfgEoFQEozSvPgBsHi7x KjrJQwLyPQaUI8BalFuZklqPKvGMU5GJWEeV+CTOHJzCuB2/cK6BQmoFOEfXNATilJREhJNTA abav7sP1NddKhq10JlutOrXE+v/nVnfQaPyaLin8fV2/Z9SD78O497VzLGgv2yHNc2x/Ky94Y smP/rxtPXMq5bjfo3HHR3f+uLmjxx5gZilafrKMfc2jvcjI+5HBJw3bulf2LaydZ/tpxQsJey ftnSaL1O8tStrbYUzu7dp2cUHTPt8j63RlWJZbijERDLeai4kQAbpfFiroCAAA= X-Env-Sender: vijay.kilari@gmail.com X-Msg-Ref: server-8.tower-21.messagelabs.com!1500378160!73675256!1 X-Originating-IP: [74.125.83.66] X-SpamReason: No, hits=0.0 required=7.0 tests= X-StarScan-Received: X-StarScan-Version: 9.4.25; banners=-,-,- X-VirusChecked: Checked Received: (qmail 60727 invoked from network); 18 Jul 2017 11:42:41 -0000 Received: from mail-pg0-f66.google.com (HELO mail-pg0-f66.google.com) (74.125.83.66) by server-8.tower-21.messagelabs.com with AES128-GCM-SHA256 encrypted SMTP; 18 Jul 2017 11:42:41 -0000 Received: by mail-pg0-f66.google.com with SMTP id v190so2547930pgv.1 for ; Tue, 18 Jul 2017 04:42:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Zwb6/rw0Ar/vaO9ixMbOb4T6fNPhuAU2Prm2k2HdJoM=; b=nJV2/+n61zw98uCKcXcbDepz4yyqjEneBPJ606YnzdVX5VWKFaC2IMzbXoydKYMCyO GvfrTH9ZdWy2FEWzZ6jOMYoAg7xb7Y+AueJXRAlrgCUcD19mM5yDtko0anvMH7eP9AoN zCaLNTD6yOvuSTpaht3glHJ8tMIC12XnoHnK8hcQ0E23gJLS8XuKhLaIMaRyMg7o/C4j t8w0eDZX+8ZlENwq3nNN0S9/MWPqlAL6a2iO1uNgBILTGwDEAg2gc2u/XanULCeH111s m9I7E8SCDvg1esbJRBzEPo2lJUwxuelKRn6egx5QM0O82P1LFf5Ttk/+5D2I1AueBns/ Rg7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Zwb6/rw0Ar/vaO9ixMbOb4T6fNPhuAU2Prm2k2HdJoM=; b=QpVH7hg3R/Lne9TEzoweH1VIECcEhQ83KrB/DaXLJ0Mg+BM2gMMHTRTciVkCt+xrMd pPSRAaFlxfnNaPKw1/Auxu0MEJNRaU8R9uqofj62hORokFNbAhKLzxTcDumeHT+IJj13 W0EPzxdM62II/wQjeE0z9gOr2Vzp3N7P+Wwvg2c8wp84GV59zPkEjGnYmyK+atnVa9x6 fqNqoq+hjlz+eaoQUkyhR1QiWvLjRO9P62LFHKizSf/9jqsASQpKGpO4IIdBv6j+SnIa tKiggaWBZ6XHEtxYLBOhy7MTJqvq2BRj6WCBU4UEQiGtU6UKASG7UuhiHn6r4E15VjpM MN8Q== X-Gm-Message-State: AIVw1111JCv0A8nrI8EpQf2HWkdzFc9gTkSHcSMFKZDSRuKDup9IwX0N u32No8WBPO+sj8d7 X-Received: by 10.84.134.34 with SMTP id 31mr1271238plg.57.1500378152674; Tue, 18 Jul 2017 04:42:32 -0700 (PDT) Received: from cavium-Vostro-2520.caveonetworks.com ([111.93.218.67]) by smtp.gmail.com with ESMTPSA id r27sm4879707pfe.0.2017.07.18.04.42.28 (version=TLS1_1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 18 Jul 2017 04:42:32 -0700 (PDT) From: vijay.kilari@gmail.com To: xen-devel@lists.xen.org Date: Tue, 18 Jul 2017 17:11:27 +0530 Message-Id: <1500378106-2620-6-git-send-email-vijay.kilari@gmail.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1500378106-2620-1-git-send-email-vijay.kilari@gmail.com> References: <1500378106-2620-1-git-send-email-vijay.kilari@gmail.com> Cc: kevin.tian@intel.com, sstabellini@kernel.org, wei.liu2@citrix.com, George.Dunlap@eu.citrix.com, andrew.cooper3@citrix.com, dario.faggioli@citrix.com, ian.jackson@eu.citrix.com, tim@xen.org, julien.grall@arm.com, jbeulich@suse.com, Vijaya Kumar K Subject: [Xen-devel] [RFC PATCH v3 05/24] x86: NUMA: Add accessors for nodes[] and node_memblk_range[] structs X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP From: Vijaya Kumar K Add accessors for nodes[] and other static variables and use those accessors. These variables are later accessed outside the file when the code made generic in later patches. However the coding style is not changed. Signed-off-by: Vijaya Kumar K --- v3: - Changed accessors parameter from int to unsigned int - Updated commit message - Fixed wrong indentation --- xen/arch/x86/srat.c | 106 +++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 81 insertions(+), 25 deletions(-) diff --git a/xen/arch/x86/srat.c b/xen/arch/x86/srat.c index 535c9d7..42cca5a 100644 --- a/xen/arch/x86/srat.c +++ b/xen/arch/x86/srat.c @@ -41,6 +41,44 @@ static struct node node_memblk_range[NR_NODE_MEMBLKS]; static nodeid_t memblk_nodeid[NR_NODE_MEMBLKS]; static __initdata DECLARE_BITMAP(memblk_hotplug, NR_NODE_MEMBLKS); +static struct node *get_numa_node(unsigned int id) +{ + return &nodes[id]; +} + +static nodeid_t get_memblk_nodeid(unsigned int id) +{ + return memblk_nodeid[id]; +} + +static nodeid_t *get_memblk_nodeid_map(void) +{ + return &memblk_nodeid[0]; +} + +static struct node *get_node_memblk_range(unsigned int memblk) +{ + return &node_memblk_range[memblk]; +} + +static int get_num_node_memblks(void) +{ + return num_node_memblks; +} + +static int __init numa_add_memblk(nodeid_t nodeid, paddr_t start, uint64_t size) +{ + if (nodeid >= NR_NODE_MEMBLKS) + return -EINVAL; + + node_memblk_range[num_node_memblks].start = start; + node_memblk_range[num_node_memblks].end = start + size; + memblk_nodeid[num_node_memblks] = nodeid; + num_node_memblks++; + + return 0; +} + static inline bool node_found(unsigned int idx, unsigned int pxm) { return ((pxm2node[idx].pxm == pxm) && @@ -107,11 +145,11 @@ int valid_numa_range(paddr_t start, paddr_t end, nodeid_t node) { int i; - for (i = 0; i < num_node_memblks; i++) { - struct node *nd = &node_memblk_range[i]; + for (i = 0; i < get_num_node_memblks(); i++) { + struct node *nd = get_node_memblk_range(i); if (nd->start <= start && nd->end > end && - memblk_nodeid[i] == node ) + get_memblk_nodeid(i) == node) return 1; } @@ -122,8 +160,8 @@ static int __init conflicting_memblks(paddr_t start, paddr_t end) { int i; - for (i = 0; i < num_node_memblks; i++) { - struct node *nd = &node_memblk_range[i]; + for (i = 0; i < get_num_node_memblks(); i++) { + struct node *nd = get_node_memblk_range(i); if (nd->start == nd->end) continue; if (nd->end > start && nd->start < end) @@ -136,7 +174,8 @@ static int __init conflicting_memblks(paddr_t start, paddr_t end) static void __init cutoff_node(nodeid_t i, paddr_t start, paddr_t end) { - struct node *nd = &nodes[i]; + struct node *nd = get_numa_node(i); + if (nd->start < start) { nd->start = start; if (nd->end < nd->start) @@ -278,6 +317,7 @@ acpi_numa_memory_affinity_init(const struct acpi_srat_mem_affinity *ma) unsigned int pxm; nodeid_t node; int i; + struct node *memblk; if (srat_disabled()) return; @@ -288,7 +328,7 @@ acpi_numa_memory_affinity_init(const struct acpi_srat_mem_affinity *ma) if (!(ma->flags & ACPI_SRAT_MEM_ENABLED)) return; - if (num_node_memblks >= NR_NODE_MEMBLKS) + if (get_num_node_memblks() >= NR_NODE_MEMBLKS) { dprintk(XENLOG_WARNING, "Too many numa entry, try bigger NR_NODE_MEMBLKS \n"); @@ -310,27 +350,31 @@ acpi_numa_memory_affinity_init(const struct acpi_srat_mem_affinity *ma) i = conflicting_memblks(start, end); if (i < 0) /* everything fine */; - else if (memblk_nodeid[i] == node) { + else if (get_memblk_nodeid(i) == node) { bool mismatch = !(ma->flags & ACPI_SRAT_MEM_HOT_PLUGGABLE) != !test_bit(i, memblk_hotplug); + memblk = get_node_memblk_range(i); + printk("%sSRAT: PXM %u (%"PRIx64"-%"PRIx64") overlaps with itself (%"PRIx64"-%"PRIx64")\n", mismatch ? KERN_ERR : KERN_WARNING, pxm, start, end, - node_memblk_range[i].start, node_memblk_range[i].end); + memblk->start, memblk->end); if (mismatch) { bad_srat(); return; } } else { + memblk = get_node_memblk_range(i); + printk(KERN_ERR "SRAT: PXM %u (%"PRIx64"-%"PRIx64") overlaps with PXM %u (%"PRIx64"-%"PRIx64")\n", - pxm, start, end, node_to_pxm(memblk_nodeid[i]), - node_memblk_range[i].start, node_memblk_range[i].end); + pxm, start, end, node_to_pxm(get_memblk_nodeid(i)), + memblk->start, memblk->end); bad_srat(); return; } if (!(ma->flags & ACPI_SRAT_MEM_HOT_PLUGGABLE)) { - struct node *nd = &nodes[node]; + struct node *nd = get_numa_node(node); if (!node_test_and_set(node, memory_nodes_parsed)) { nd->start = start; @@ -346,15 +390,17 @@ acpi_numa_memory_affinity_init(const struct acpi_srat_mem_affinity *ma) node, pxm, start, end, ma->flags & ACPI_SRAT_MEM_HOT_PLUGGABLE ? " (hotplug)" : ""); - node_memblk_range[num_node_memblks].start = start; - node_memblk_range[num_node_memblks].end = end; - memblk_nodeid[num_node_memblks] = node; + if (numa_add_memblk(node, start, ma->length)) { + printk(KERN_ERR "SRAT: node-id %u out of range\n", node); + bad_srat(); + return; + } + if (ma->flags & ACPI_SRAT_MEM_HOT_PLUGGABLE) { - __set_bit(num_node_memblks, memblk_hotplug); + __set_bit(get_num_node_memblks(), memblk_hotplug); if (end > mem_hotplug) mem_hotplug = end; } - num_node_memblks++; } /* Sanity check to catch more bad SRATs (they are amazingly common). @@ -377,17 +423,21 @@ static int __init nodes_cover_memory(void) do { found = 0; for_each_node_mask(j, memory_nodes_parsed) - if (start < nodes[j].end - && end > nodes[j].start) { - if (start >= nodes[j].start) { - start = nodes[j].end; + { + struct node *nd = get_numa_node(j); + + if (start < nd->end + && end > nd->start) { + if (start >= nd->start) { + start = nd->end; found = 1; } - if (end <= nodes[j].end) { - end = nodes[j].start; + if (end <= nd->end) { + end = nd->start; found = 1; } } + } } while (found && start < end); if (start < end) { @@ -457,6 +507,8 @@ int __init acpi_scan_nodes(paddr_t start, paddr_t end) { unsigned int i; nodemask_t all_nodes_parsed; + struct node *memblks; + nodeid_t *nodeids; /* First clean up the node list */ for (i = 0; i < MAX_NUMNODES; i++) @@ -470,6 +522,8 @@ int __init acpi_scan_nodes(paddr_t start, paddr_t end) return -1; } + memblks = get_node_memblk_range(0); + nodeids = get_memblk_nodeid_map(); if (compute_memnode_shift(node_memblk_range, num_node_memblks, memblk_nodeid)) { memnode_shift = 0; @@ -484,12 +538,14 @@ int __init acpi_scan_nodes(paddr_t start, paddr_t end) /* Finally register nodes */ for_each_node_mask(i, all_nodes_parsed) { - uint64_t size = nodes[i].end - nodes[i].start; + struct node *nd = get_numa_node(i); + uint64_t size = nd->end - nd->start; + if ( size == 0 ) printk(KERN_WARNING "SRAT: Node %u has no memory. " "BIOS Bug or mis-configured hardware?\n", i); - setup_node_bootmem(i, nodes[i].start, nodes[i].end); + setup_node_bootmem(i, nd->start, nd->end); } for (i = 0; i < nr_cpu_ids; i++) { if (cpu_to_node[i] == NUMA_NO_NODE)