2020-08-14 22:00:06

by Atish Patra

[permalink] [raw]
Subject: [RFC/RFT PATCH 2/6] arm64, numa: Change the numa init function name to be generic

As we are using generic numa implementation code, modify the init function
name to indicate that generic implementation.

Signed-off-by: Atish Patra <[email protected]>
---
arch/arm64/mm/init.c | 4 ++--
drivers/base/arch_numa.c | 8 ++++++--
include/asm-generic/numa.h | 4 ++--
3 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c
index 481d22c32a2e..93b660229e1d 100644
--- a/arch/arm64/mm/init.c
+++ b/arch/arm64/mm/init.c
@@ -418,10 +418,10 @@ void __init bootmem_init(void)
max_pfn = max_low_pfn = max;
min_low_pfn = min;

- arm64_numa_init();
+ arch_numa_init();

/*
- * must be done after arm64_numa_init() which calls numa_init() to
+ * must be done after arch_numa_init() which calls numa_init() to
* initialize node_online_map that gets used in hugetlb_cma_reserve()
* while allocating required CMA size across online nodes.
*/
diff --git a/drivers/base/arch_numa.c b/drivers/base/arch_numa.c
index 73f8b49d485c..83341c807240 100644
--- a/drivers/base/arch_numa.c
+++ b/drivers/base/arch_numa.c
@@ -13,7 +13,9 @@
#include <linux/module.h>
#include <linux/of.h>

+#ifdef CONFIG_ARM64
#include <asm/acpi.h>
+#endif
#include <asm/sections.h>

struct pglist_data *node_data[MAX_NUMNODES] __read_mostly;
@@ -445,16 +447,18 @@ static int __init dummy_numa_init(void)
}

/**
- * arm64_numa_init() - Initialize NUMA
+ * arch_numa_init() - Initialize NUMA
*
* Try each configured NUMA initialization method until one succeeds. The
* last fallback is dummy single node config encomapssing whole memory.
*/
-void __init arm64_numa_init(void)
+void __init arch_numa_init(void)
{
if (!numa_off) {
+#ifdef CONFIG_ARM64
if (!acpi_disabled && !numa_init(arm64_acpi_numa_init))
return;
+#endif
if (acpi_disabled && !numa_init(of_numa_init))
return;
}
diff --git a/include/asm-generic/numa.h b/include/asm-generic/numa.h
index 0635c0724b7c..309eca8c0b5d 100644
--- a/include/asm-generic/numa.h
+++ b/include/asm-generic/numa.h
@@ -27,7 +27,7 @@ static inline const struct cpumask *cpumask_of_node(int node)
}
#endif

-void __init arm64_numa_init(void);
+void __init arch_numa_init(void);
int __init numa_add_memblk(int nodeid, u64 start, u64 end);
void __init numa_set_distance(int from, int to, int distance);
void __init numa_free_distance(void);
@@ -41,7 +41,7 @@ void numa_remove_cpu(unsigned int cpu);
static inline void numa_store_cpu_info(unsigned int cpu) { }
static inline void numa_add_cpu(unsigned int cpu) { }
static inline void numa_remove_cpu(unsigned int cpu) { }
-static inline void arm64_numa_init(void) { }
+static inline void arch_numa_init(void) { }
static inline void early_map_cpu_to_node(unsigned int cpu, int nid) { }

#endif /* CONFIG_NUMA */
--
2.24.0


2020-08-28 09:38:40

by Jonathan Cameron

[permalink] [raw]
Subject: Re: [RFC/RFT PATCH 2/6] arm64, numa: Change the numa init function name to be generic

On Fri, 14 Aug 2020 14:47:21 -0700
Atish Patra <[email protected]> wrote:

> As we are using generic numa implementation code, modify the init function
> name to indicate that generic implementation.
>
> Signed-off-by: Atish Patra <[email protected]>
> ---
> arch/arm64/mm/init.c | 4 ++--
> drivers/base/arch_numa.c | 8 ++++++--
> include/asm-generic/numa.h | 4 ++--
> 3 files changed, 10 insertions(+), 6 deletions(-)
>
> diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c
> index 481d22c32a2e..93b660229e1d 100644
> --- a/arch/arm64/mm/init.c
> +++ b/arch/arm64/mm/init.c
> @@ -418,10 +418,10 @@ void __init bootmem_init(void)
> max_pfn = max_low_pfn = max;
> min_low_pfn = min;
>
> - arm64_numa_init();
> + arch_numa_init();
>
> /*
> - * must be done after arm64_numa_init() which calls numa_init() to
> + * must be done after arch_numa_init() which calls numa_init() to
> * initialize node_online_map that gets used in hugetlb_cma_reserve()
> * while allocating required CMA size across online nodes.
> */
> diff --git a/drivers/base/arch_numa.c b/drivers/base/arch_numa.c
> index 73f8b49d485c..83341c807240 100644
> --- a/drivers/base/arch_numa.c
> +++ b/drivers/base/arch_numa.c
> @@ -13,7 +13,9 @@
> #include <linux/module.h>
> #include <linux/of.h>
>
> +#ifdef CONFIG_ARM64
> #include <asm/acpi.h>
> +#endif

This highlights an issue. We really don't want to define 'generic' arch
code then match on individual architectures if at all possible.

I'm also not sure we need to.

The arm64_acpi_numa_init() code is just a light wrapper around the
standard acpi_init() call so should work fine on riscv (once ACPI
support is ready).

Can we pull that function into here or perhaps a generic
arch_numa_acpi.c?

There is probably a bit of a dance needed around acpi_disabled
though as that can be defined in entirely different places
depending on whether acpi is enabled or not.
Possibly just adding an

extern int acpi_disabled to include/linux/acpi.h when acpi is enabled
will be sufficient (if ugly)?


> #include <asm/sections.h>
>
> struct pglist_data *node_data[MAX_NUMNODES] __read_mostly;
> @@ -445,16 +447,18 @@ static int __init dummy_numa_init(void)
> }
>
> /**
> - * arm64_numa_init() - Initialize NUMA
> + * arch_numa_init() - Initialize NUMA
> *
> * Try each configured NUMA initialization method until one succeeds. The
> * last fallback is dummy single node config encomapssing whole memory.
> */
> -void __init arm64_numa_init(void)
> +void __init arch_numa_init(void)
> {
> if (!numa_off) {
> +#ifdef CONFIG_ARM64
> if (!acpi_disabled && !numa_init(arm64_acpi_numa_init))
> return;
> +#endif
> if (acpi_disabled && !numa_init(of_numa_init))
> return;
> }
> diff --git a/include/asm-generic/numa.h b/include/asm-generic/numa.h
> index 0635c0724b7c..309eca8c0b5d 100644
> --- a/include/asm-generic/numa.h
> +++ b/include/asm-generic/numa.h
> @@ -27,7 +27,7 @@ static inline const struct cpumask *cpumask_of_node(int node)
> }
> #endif
>
> -void __init arm64_numa_init(void);
> +void __init arch_numa_init(void);
> int __init numa_add_memblk(int nodeid, u64 start, u64 end);
> void __init numa_set_distance(int from, int to, int distance);
> void __init numa_free_distance(void);
> @@ -41,7 +41,7 @@ void numa_remove_cpu(unsigned int cpu);
> static inline void numa_store_cpu_info(unsigned int cpu) { }
> static inline void numa_add_cpu(unsigned int cpu) { }
> static inline void numa_remove_cpu(unsigned int cpu) { }
> -static inline void arm64_numa_init(void) { }
> +static inline void arch_numa_init(void) { }
> static inline void early_map_cpu_to_node(unsigned int cpu, int nid) { }
>
> #endif /* CONFIG_NUMA */


2020-08-29 00:40:52

by Atish Patra

[permalink] [raw]
Subject: Re: [RFC/RFT PATCH 2/6] arm64, numa: Change the numa init function name to be generic

On Fri, Aug 28, 2020 at 2:37 AM Jonathan Cameron
<[email protected]> wrote:
>
> On Fri, 14 Aug 2020 14:47:21 -0700
> Atish Patra <[email protected]> wrote:
>
> > As we are using generic numa implementation code, modify the init function
> > name to indicate that generic implementation.
> >
> > Signed-off-by: Atish Patra <[email protected]>
> > ---
> > arch/arm64/mm/init.c | 4 ++--
> > drivers/base/arch_numa.c | 8 ++++++--
> > include/asm-generic/numa.h | 4 ++--
> > 3 files changed, 10 insertions(+), 6 deletions(-)
> >
> > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c
> > index 481d22c32a2e..93b660229e1d 100644
> > --- a/arch/arm64/mm/init.c
> > +++ b/arch/arm64/mm/init.c
> > @@ -418,10 +418,10 @@ void __init bootmem_init(void)
> > max_pfn = max_low_pfn = max;
> > min_low_pfn = min;
> >
> > - arm64_numa_init();
> > + arch_numa_init();
> >
> > /*
> > - * must be done after arm64_numa_init() which calls numa_init() to
> > + * must be done after arch_numa_init() which calls numa_init() to
> > * initialize node_online_map that gets used in hugetlb_cma_reserve()
> > * while allocating required CMA size across online nodes.
> > */
> > diff --git a/drivers/base/arch_numa.c b/drivers/base/arch_numa.c
> > index 73f8b49d485c..83341c807240 100644
> > --- a/drivers/base/arch_numa.c
> > +++ b/drivers/base/arch_numa.c
> > @@ -13,7 +13,9 @@
> > #include <linux/module.h>
> > #include <linux/of.h>
> >
> > +#ifdef CONFIG_ARM64
> > #include <asm/acpi.h>
> > +#endif
>
> This highlights an issue. We really don't want to define 'generic' arch
> code then match on individual architectures if at all possible.
>

I agree.

> I'm also not sure we need to.
>
> The arm64_acpi_numa_init() code is just a light wrapper around the
> standard acpi_init() call so should work fine on riscv (once ACPI
> support is ready).
>
> Can we pull that function into here

Sure. We can move the arm64_acpi_numa_init to here and rename it to
arch_acpi_numa_init.
We can keep arch_acpi_numa_init and the acpi.h included under CONFIG_ACPI_NUMA.
If RISC-V becomes ACPI ready one day, they always need to enable
CONFIG_ACPI_NUMA and reuse the generic functions.

> or perhaps a generic arch_numa_acpi.c?
>
There has not been much discussion about ACPI for RISC-V. So moving
the arm64 acpi code now to generic code would be premature
in my opinion. Currently, we don't even know how ACPI will look like
for RISC-V.

> There is probably a bit of a dance needed around acpi_disabled
> though as that can be defined in entirely different places
> depending on whether acpi is enabled or not.
> Possibly just adding an
>
> extern int acpi_disabled to include/linux/acpi.h when acpi is enabled
> will be sufficient (if ugly)?
>

We don't need to do that now unless we are moving arm64 ACPI code
implementation to generic code.
If ACPI is not enabled, it is already defined as a macro in
include/linux/acpi.h.

>
> > #include <asm/sections.h>
> >
> > struct pglist_data *node_data[MAX_NUMNODES] __read_mostly;
> > @@ -445,16 +447,18 @@ static int __init dummy_numa_init(void)
> > }
> >
> > /**
> > - * arm64_numa_init() - Initialize NUMA
> > + * arch_numa_init() - Initialize NUMA
> > *
> > * Try each configured NUMA initialization method until one succeeds. The
> > * last fallback is dummy single node config encomapssing whole memory.
> > */
> > -void __init arm64_numa_init(void)
> > +void __init arch_numa_init(void)
> > {
> > if (!numa_off) {
> > +#ifdef CONFIG_ARM64
> > if (!acpi_disabled && !numa_init(arm64_acpi_numa_init))
> > return;
> > +#endif
> > if (acpi_disabled && !numa_init(of_numa_init))
> > return;
> > }
> > diff --git a/include/asm-generic/numa.h b/include/asm-generic/numa.h
> > index 0635c0724b7c..309eca8c0b5d 100644
> > --- a/include/asm-generic/numa.h
> > +++ b/include/asm-generic/numa.h
> > @@ -27,7 +27,7 @@ static inline const struct cpumask *cpumask_of_node(int node)
> > }
> > #endif
> >
> > -void __init arm64_numa_init(void);
> > +void __init arch_numa_init(void);
> > int __init numa_add_memblk(int nodeid, u64 start, u64 end);
> > void __init numa_set_distance(int from, int to, int distance);
> > void __init numa_free_distance(void);
> > @@ -41,7 +41,7 @@ void numa_remove_cpu(unsigned int cpu);
> > static inline void numa_store_cpu_info(unsigned int cpu) { }
> > static inline void numa_add_cpu(unsigned int cpu) { }
> > static inline void numa_remove_cpu(unsigned int cpu) { }
> > -static inline void arm64_numa_init(void) { }
> > +static inline void arch_numa_init(void) { }
> > static inline void early_map_cpu_to_node(unsigned int cpu, int nid) { }
> >
> > #endif /* CONFIG_NUMA */
>
>
>
> _______________________________________________
> linux-riscv mailing list
> [email protected]
> http://lists.infradead.org/mailman/listinfo/linux-riscv



--
Regards,
Atish