Re: [PATCH v2 1/3] arm64/numa: export memory_add_physaddr_to_nid as EXPORT_SYMBOL_GPL
From: David Hildenbrand <hidden>
Date: 2020-07-08 07:00:28
Also in:
linux-mm, lkml, nvdimm
On 08.07.20 08:56, Justin He wrote:
Hi Danquoted
-----Original Message----- From: Dan Williams <redacted> Sent: Wednesday, July 8, 2020 1:48 PM To: Mike Rapoport <redacted> Cc: Justin He <redacted>; Michal Hocko <mhocko@kernel.org>; David Hildenbrand [off-list ref]; Catalin Marinas [off-list ref]; Will Deacon [off-list ref]; Vishal Verma [off-list ref]; Dave Jiang [off-list ref]; Andrew Morton <akpm@linux- foundation.org>; Baoquan He [off-list ref]; Chuhong Yuan [off-list ref]; linux-arm-kernel@lists.infradead.org; linux- kernel@vger.kernel.org; linux-mm@kvack.org; linux-nvdimm@lists.01.org; Kaly Xin [off-list ref] Subject: Re: [PATCH v2 1/3] arm64/numa: export memory_add_physaddr_to_nid as EXPORT_SYMBOL_GPL On Tue, Jul 7, 2020 at 10:33 PM Mike Rapoport [off-list ref] wrote:quoted
On Tue, Jul 07, 2020 at 08:56:36PM -0700, Dan Williams wrote:quoted
On Tue, Jul 7, 2020 at 7:20 PM Justin He [off-list ref] wrote:quoted
Hi Michal and Davidquoted
-----Original Message----- From: Michal Hocko <mhocko@kernel.org> Sent: Tuesday, July 7, 2020 7:55 PM To: Justin He <redacted> Cc: Catalin Marinas <Catalin.Marinas@arm.com>; Will Deacon [off-list ref]; Dan Williams [off-list ref]; VishalVermaquoted
quoted
quoted
quoted
[off-list ref]; Dave Jiang [off-list ref];Andrewquoted
quoted
quoted
quoted
Morton [off-list ref]; Mike Rapoport[off-list ref];quoted
quoted
quoted
quoted
Baoquan He [off-list ref]; Chuhong Yuan [off-list ref];linux-quoted
quoted
quoted
quoted
arm-kernel@lists.infradead.org; linux-kernel@vger.kernel.org;linux-quoted
quoted
quoted
quoted
mm@kvack.org; linux-nvdimm@lists.01.org; Kaly Xin[off-list ref]quoted
quoted
quoted
quoted
Subject: Re: [PATCH v2 1/3] arm64/numa: exportmemory_add_physaddr_to_nidquoted
quoted
quoted
quoted
as EXPORT_SYMBOL_GPL On Tue 07-07-20 13:59:15, Jia He wrote:quoted
This exports memory_add_physaddr_to_nid() for module driver touse.quoted
quoted
quoted
quoted
quoted
memory_add_physaddr_to_nid() is a fallback option to get the nidin casequoted
quoted
quoted
quoted
quoted
NUMA_NO_NID is detected. Suggested-by: David Hildenbrand <redacted> Signed-off-by: Jia He <redacted> --- arch/arm64/mm/numa.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)diff --git a/arch/arm64/mm/numa.c b/arch/arm64/mm/numa.c index aafcee3e3f7e..7eeb31740248 100644 --- a/arch/arm64/mm/numa.c +++ b/arch/arm64/mm/numa.c@@ -464,10 +464,11 @@ void __init arm64_numa_init(void) /* * We hope that we will be hotplugging memory on nodes wealready knowquoted
quoted
quoted
quoted
about,quoted
- * such that acpi_get_node() succeeds and we never fall back tothis...quoted
quoted
quoted
quoted
quoted
+ * such that acpi_get_node() succeeds. But when SRAT is notpresent,quoted
quoted
quoted
quoted
the nodequoted
+ * id may be probed as NUMA_NO_NODE by acpi, Here provide afallbackquoted
quoted
quoted
quoted
option.quoted
*/ int memory_add_physaddr_to_nid(u64 addr) { - pr_warn("Unknown node for memory at 0x%llx, assuming node0\n",quoted
quoted
quoted
quoted
addr);quoted
return 0; } +EXPORT_SYMBOL_GPL(memory_add_physaddr_to_nid);Does it make sense to export a noop function? Wouldn't make moresensequoted
quoted
quoted
quoted
to simply make it static inline somewhere in a header? I haven'tcheckedquoted
quoted
quoted
quoted
whether there is an easy way to do that sanely bu this just hit myeyes.quoted
quoted
quoted
Okay, I can make a change in memory_hotplug.h, sth like:--- a/include/linux/memory_hotplug.h +++ b/include/linux/memory_hotplug.h@@ -149,13 +149,13 @@ int add_pages(int nid, unsigned long start_pfn,unsigned long nr_pages,quoted
quoted
quoted
struct mhp_params *params); #endif /* ARCH_HAS_ADD_PAGES */ -#ifdef CONFIG_NUMA -extern int memory_add_physaddr_to_nid(u64 start); -#else +#if !defined(CONFIG_NUMA) || !defined(memory_add_physaddr_to_nid) static inline int memory_add_physaddr_to_nid(u64 start) { return 0; } +#else +extern int memory_add_physaddr_to_nid(u64 start); #endif And then check the memory_add_physaddr_to_nid() helper on all arches, if it is noop(return 0), I can simply remove it. if it is not noop, after the helper, #define memory_add_physaddr_to_nid What do you think of this proposal?Especially for architectures that use memblock info for numa info (which seems to be everyone except x86) why not implement a generic memory_add_physaddr_to_nid() that does:That would be only arm64.Darn, I saw ARCH_KEEP_MEMBLOCK and had delusions of grandeur that it could solve my numa api woes. At least for x86 the problem is already solved with reserved numa_meminfo, but now I'm trying to write generic drivers that use those apis and finding these gaps on other archs.Even on arm64, there is a dependency issue in dax_pmem kmem case. If dax pmem uses memory_add_physaddr_to_nid() to decide which node that memblock should add into, get_pfn_range_for_nid() might not have the correct memblock info at that time. That is, get_pfn_range_for_nid() can't get the correct memblock info before add_memory() So IMO, memory_add_physaddr_to_nid() still have to implement as noop on arm64 (return 0) together with sh,s390x? Powerpc, x86,ia64 can use their own implementation. And phys_to_target_node() can use your suggested( for_each_online_node() ...) What do you think of it? Thanks
You are trying to fix the "we only have one dummy node" AFAIU, so what you propose here is certainly good enough for now. -- Thanks, David / dhildenb _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel