Thread (46 messages) 46 messages, 6 authors, 2020-07-08

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 Dan
quoted
-----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 David
quoted
-----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]; Vishal
Verma
quoted
quoted
quoted
quoted
[off-list ref]; Dave Jiang [off-list ref];
Andrew
quoted
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: export
memory_add_physaddr_to_nid
quoted
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 to
use.
quoted
quoted
quoted
quoted
quoted
memory_add_physaddr_to_nid() is a fallback option to get the nid
in case
quoted
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 we
already know
quoted
quoted
quoted
quoted
about,
quoted
- * such that acpi_get_node() succeeds and we never fall back to
this...
quoted
quoted
quoted
quoted
quoted
+ * such that acpi_get_node() succeeds. But when SRAT is not
present,
quoted
quoted
quoted
quoted
the node
quoted
+ * id may be probed as NUMA_NO_NODE by acpi, Here provide a
fallback
quoted
quoted
quoted
quoted
option.
quoted
  */
 int memory_add_physaddr_to_nid(u64 addr)
 {
-   pr_warn("Unknown node for memory at 0x%llx, assuming node
0\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 more
sense
quoted
quoted
quoted
quoted
to simply make it static inline somewhere in a header? I haven't
checked
quoted
quoted
quoted
quoted
whether there is an easy way to do that sanely bu this just hit my
eyes.
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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help