From patchwork Sun Jul 12 16:26:43 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dan Williams X-Patchwork-Id: 11658259 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3DB6B14E3 for ; Sun, 12 Jul 2020 16:43:03 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 0A42520722 for ; Sun, 12 Jul 2020 16:43:03 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0A42520722 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 394956B000D; Sun, 12 Jul 2020 12:43:02 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 345D18D0001; Sun, 12 Jul 2020 12:43:02 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 25B3C6B0010; Sun, 12 Jul 2020 12:43:02 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0172.hostedemail.com [216.40.44.172]) by kanga.kvack.org (Postfix) with ESMTP id 10A286B000D for ; Sun, 12 Jul 2020 12:43:02 -0400 (EDT) Received: from smtpin28.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id D16C5181AEF0B for ; Sun, 12 Jul 2020 16:43:01 +0000 (UTC) X-FDA: 77029993362.28.end11_13014b726ee1 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin28.hostedemail.com (Postfix) with ESMTP id A73066D67 for ; Sun, 12 Jul 2020 16:43:01 +0000 (UTC) X-Spam-Summary: 1,0,0,,d41d8cd98f00b204,dan.j.williams@intel.com,,RULES_HIT:30054:30064:30075,0,RBL:192.55.52.93:@intel.com:.lbl8.mailshell.net-62.50.0.100 64.95.201.95;04ygqpwx7mbxqjdnr7wrgze7y3fk6oco5oze6nizzshgk555hcy3xfdxenoc9xe.sz6pmpobu73guzr7sk5m3es5gnq1twf3jq6ni1u8th943y1brdfoi8stzmy3qt8.e-lbl8.mailshell.net-223.238.255.100,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:ft,MSBL:0,DNSBL:none,Custom_rules:0:0:0,LFtime:24,LUA_SUMMARY:none X-HE-Tag: end11_13014b726ee1 X-Filterd-Recvd-Size: 5467 Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by imf04.hostedemail.com (Postfix) with ESMTP for ; Sun, 12 Jul 2020 16:43:00 +0000 (UTC) IronPort-SDR: uf1a5VsZ6MDtAZTdRt6tXHvbCBv6sYXQg8LRS5z8l7rmU6PB5epIX6jr076mvs02PIJEDWmxCi twhMKg+Q3JMw== X-IronPort-AV: E=McAfee;i="6000,8403,9680"; a="146552921" X-IronPort-AV: E=Sophos;i="5.75,344,1589266800"; d="scan'208";a="146552921" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Jul 2020 09:42:59 -0700 IronPort-SDR: wKh/mkWpfbLzS/7XA/a+hOZMMV8DFeGdi9/Hom+z8d2kEX+RFAYAHlZYGDznOwJngG0SVv6zF8 30sN3xvpN09g== X-IronPort-AV: E=Sophos;i="5.75,344,1589266800"; d="scan'208";a="485205254" Received: from dwillia2-desk3.jf.intel.com (HELO dwillia2-desk3.amr.corp.intel.com) ([10.54.39.16]) by fmsmga005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Jul 2020 09:42:59 -0700 Subject: [PATCH v2 07/22] numa: Introduce a generic memory_add_physaddr_to_nid() From: Dan Williams To: linux-nvdimm@lists.01.org Cc: Mike Rapoport , Jia He , Will Deacon , David Hildenbrand , Andrew Morton , peterz@infradead.org, vishal.l.verma@intel.com, dave.hansen@linux.intel.com, ard.biesheuvel@linaro.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, hch@lst.de, joao.m.martins@oracle.com Date: Sun, 12 Jul 2020 09:26:43 -0700 Message-ID: <159457120334.754248.12908401960465408733.stgit@dwillia2-desk3.amr.corp.intel.com> In-Reply-To: <159457116473.754248.7879464730875147365.stgit@dwillia2-desk3.amr.corp.intel.com> References: <159457116473.754248.7879464730875147365.stgit@dwillia2-desk3.amr.corp.intel.com> User-Agent: StGit/0.18-3-g996c MIME-Version: 1.0 X-Rspamd-Queue-Id: A73066D67 X-Spamd-Result: default: False [0.00 / 100.00] X-Rspamd-Server: rspam02 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: For architectures that opt into storing their numa data in memblock (only ARM64 currently), add a memblock generic way to interrogate that data for memory_add_physaddr_to_nid(). This requires ARCH_KEEP_MEMBLOCK to keep memblock text and data around after boot. Cc: Mike Rapoport Cc: Jia He Cc: Will Deacon Cc: David Hildenbrand Cc: Andrew Morton Signed-off-by: Dan Williams --- include/linux/mm.h | 11 +++++++++++ mm/Kconfig | 6 ++++++ mm/page_alloc.c | 23 ++++++++++++++++++++++- 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index dc7b87310c10..1e76ee5da20b 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -2425,6 +2425,17 @@ unsigned long __absent_pages_in_range(int nid, unsigned long start_pfn, unsigned long end_pfn); extern unsigned long absent_pages_in_range(unsigned long start_pfn, unsigned long end_pfn); + +/* + * Allow archs to opt-in to keeping get_pfn_range_for_nid() available + * after boot. + */ +#ifdef CONFIG_ARCH_KEEP_MEMBLOCK +#define __init_or_memblock +#else +#define __init_or_memblock __init +#endif + extern void get_pfn_range_for_nid(unsigned int nid, unsigned long *start_pfn, unsigned long *end_pfn); extern unsigned long find_min_pfn_with_active_regions(void); diff --git a/mm/Kconfig b/mm/Kconfig index 0051f735ad98..178ed76cae1b 100644 --- a/mm/Kconfig +++ b/mm/Kconfig @@ -139,6 +139,12 @@ config HAVE_FAST_GUP config ARCH_KEEP_MEMBLOCK bool +# If the arch populates numa data into memblock, it can use memblock +# apis to interrogate that data at runtime. +config MEMBLOCK_NUMA_INFO + bool + depends on ARCH_KEEP_MEMBLOCK + config MEMORY_ISOLATION bool diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 48eb0f1410d4..df8bd169dbb4 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -6351,7 +6351,7 @@ void __init sparse_memory_present_with_active_regions(int nid) * with no available memory, a warning is printed and the start and end * PFNs will be 0. */ -void __init get_pfn_range_for_nid(unsigned int nid, +void __init_or_memblock get_pfn_range_for_nid(unsigned int nid, unsigned long *start_pfn, unsigned long *end_pfn) { unsigned long this_start_pfn, this_end_pfn; @@ -6369,6 +6369,27 @@ void __init get_pfn_range_for_nid(unsigned int nid, *start_pfn = 0; } +/* + * Generic implementation of memory_add_physaddr_to_nid() depends on + * architecture using memblock data for numa information. + */ +#ifdef CONFIG_MEMBLOCK_NUMA_INFO +int __init_or_memblock memory_add_physaddr_to_nid(u64 addr) +{ + unsigned long start_pfn, end_pfn, pfn = PHYS_PFN(addr); + int nid; + + for_each_online_node(nid) { + get_pfn_range_for_nid(nid, &start_pfn, &end_pfn); + if (pfn >= start_pfn && pfn <= end_pfn) + return nid; + } + /* Default to node0 as not all callers are prepared for this to fail */ + return 0; +} +EXPORT_SYMBOL_GPL(memory_add_physaddr_to_nid); +#endif /* CONFIG_MEMBLOCK_NUMA_INFO */ + /* * This finds a zone that can be used for ZONE_MOVABLE pages. The * assumption is made that zones within a node are ordered in monotonic