Hyper-V has usecases where it need to fetch NUMA information from
Devicetree. Currently, it is not possible to extract the NUMA
information from Devicetree for x86 arch.
Add support for Devicetree in the x86_numa_init function, allowing
the retrieval of NUMA node information from the Devicetree.
Additionally, relocate the x86_dtb_init function before initmem_init
to ensure the Devicetree initialization prior to its utilization in
x86_numa_init.
Signed-off-by: Saurabh Sengar <[email protected]>
---
arch/x86/Kconfig | 1 +
arch/x86/kernel/setup.c | 2 +-
arch/x86/mm/numa.c | 3 +++
3 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index c531b16ee0bf..a2ada193b2d8 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -1567,6 +1567,7 @@ config NUMA
depends on X86_64 || (X86_32 && HIGHMEM64G && X86_BIGSMP)
default y if X86_BIGSMP
select USE_PERCPU_NUMA_NODE_ID
+ select OF_NUMA if OF
help
Enable NUMA (Non-Uniform Memory Access) support.
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index fd975a4a5200..940c92a6a5e9 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -1220,6 +1220,7 @@ void __init setup_arch(char **cmdline_p)
early_acpi_boot_init();
+ x86_dtb_init();
initmem_init();
dma_contiguous_reserve(max_pfn_mapped << PAGE_SHIFT);
@@ -1261,7 +1262,6 @@ void __init setup_arch(char **cmdline_p)
* Read APIC and some other early information from ACPI tables.
*/
acpi_boot_init();
- x86_dtb_init();
/*
* get boot-time SMP configuration:
diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c
index 2aadb2019b4f..a6d3d331fda2 100644
--- a/arch/x86/mm/numa.c
+++ b/arch/x86/mm/numa.c
@@ -11,6 +11,7 @@
#include <linux/nodemask.h>
#include <linux/sched.h>
#include <linux/topology.h>
+#include <linux/of.h>
#include <asm/e820/api.h>
#include <asm/proto.h>
@@ -733,6 +734,8 @@ void __init x86_numa_init(void)
if (!numa_init(amd_numa_init))
return;
#endif
+ if (acpi_disabled && !numa_init(of_numa_init))
+ return;
}
numa_init(dummy_numa_init);
--
2.34.1
> -----Original Message-----
> From: Saurabh Sengar <[email protected]>
> Sent: Tuesday, June 27, 2023 12:58 PM
> To: [email protected]; [email protected]; [email protected];
> [email protected]; [email protected]; [email protected];
> [email protected]; [email protected]; Michael Kelley (LINUX)
> <[email protected]>; [email protected]
> Cc: [email protected]
> Subject: [PATCH] x86/numa: Add Devicetree support
>
> Hyper-V has usecases where it need to fetch NUMA information from
> Devicetree. Currently, it is not possible to extract the NUMA
> information from Devicetree for x86 arch.
>
> Add support for Devicetree in the x86_numa_init function, allowing
> the retrieval of NUMA node information from the Devicetree.
>
> Additionally, relocate the x86_dtb_init function before initmem_init
> to ensure the Devicetree initialization prior to its utilization in
> x86_numa_init.
>
> Signed-off-by: Saurabh Sengar <[email protected]>
> ---
> arch/x86/Kconfig | 1 +
> arch/x86/kernel/setup.c | 2 +-
> arch/x86/mm/numa.c | 3 +++
> 3 files changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
> index c531b16ee0bf..a2ada193b2d8 100644
> --- a/arch/x86/Kconfig
> +++ b/arch/x86/Kconfig
> @@ -1567,6 +1567,7 @@ config NUMA
> depends on X86_64 || (X86_32 && HIGHMEM64G && X86_BIGSMP)
> default y if X86_BIGSMP
> select USE_PERCPU_NUMA_NODE_ID
> + select OF_NUMA if OF
> help
> Enable NUMA (Non-Uniform Memory Access) support.
>
> diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
> index fd975a4a5200..940c92a6a5e9 100644
> --- a/arch/x86/kernel/setup.c
> +++ b/arch/x86/kernel/setup.c
> @@ -1220,6 +1220,7 @@ void __init setup_arch(char **cmdline_p)
>
> early_acpi_boot_init();
>
> + x86_dtb_init();
> initmem_init();
> dma_contiguous_reserve(max_pfn_mapped << PAGE_SHIFT);
>
> @@ -1261,7 +1262,6 @@ void __init setup_arch(char **cmdline_p)
> * Read APIC and some other early information from ACPI tables.
> */
> acpi_boot_init();
> - x86_dtb_init();
>
> /*
> * get boot-time SMP configuration:
> diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c
> index 2aadb2019b4f..a6d3d331fda2 100644
> --- a/arch/x86/mm/numa.c
> +++ b/arch/x86/mm/numa.c
> @@ -11,6 +11,7 @@
> #include <linux/nodemask.h>
> #include <linux/sched.h>
> #include <linux/topology.h>
> +#include <linux/of.h>
>
> #include <asm/e820/api.h>
> #include <asm/proto.h>
> @@ -733,6 +734,8 @@ void __init x86_numa_init(void)
> if (!numa_init(amd_numa_init))
> return;
> #endif
> + if (acpi_disabled && !numa_init(of_numa_init))
> + return;
> }
>
> numa_init(dummy_numa_init);
> --
> 2.34.1
Hi x86 Maintainers,
May I get your feedback on this patch.
Regards,
Saurabh
> -----Original Message-----
> From: Saurabh Singh Sengar <[email protected]>
> Sent: Wednesday, July 12, 2023 1:42 PM
> To: Saurabh Sengar <[email protected]>; [email protected];
> [email protected]; [email protected]; [email protected];
> [email protected]; [email protected]; [email protected]; [email protected];
> Michael Kelley (LINUX) <[email protected]>; linux-
> [email protected]; Sharath George John <[email protected]>
> Subject: [EXTERNAL] RE: [PATCH] x86/numa: Add Devicetree support
>
>
>
> > -----Original Message-----
> > From: Saurabh Sengar <[email protected]>
> > Sent: Tuesday, June 27, 2023 12:58 PM
> > To: [email protected]; [email protected]; [email protected];
> > [email protected]; [email protected]; [email protected];
> > [email protected]; [email protected]; Michael Kelley (LINUX)
> > <[email protected]>; [email protected]
> > Cc: [email protected]
> > Subject: [PATCH] x86/numa: Add Devicetree support
> >
> > Hyper-V has usecases where it need to fetch NUMA information from
> > Devicetree. Currently, it is not possible to extract the NUMA
> > information from Devicetree for x86 arch.
> >
> > Add support for Devicetree in the x86_numa_init function, allowing the
> > retrieval of NUMA node information from the Devicetree.
> >
> > Additionally, relocate the x86_dtb_init function before initmem_init
> > to ensure the Devicetree initialization prior to its utilization in
> > x86_numa_init.
> >
> > Signed-off-by: Saurabh Sengar <[email protected]>
> > ---
> > arch/x86/Kconfig | 1 +
> > arch/x86/kernel/setup.c | 2 +-
> > arch/x86/mm/numa.c | 3 +++
> > 3 files changed, 5 insertions(+), 1 deletion(-)
> >
> > diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index
> > c531b16ee0bf..a2ada193b2d8 100644
> > --- a/arch/x86/Kconfig
> > +++ b/arch/x86/Kconfig
> > @@ -1567,6 +1567,7 @@ config NUMA
> > depends on X86_64 || (X86_32 && HIGHMEM64G && X86_BIGSMP)
> > default y if X86_BIGSMP
> > select USE_PERCPU_NUMA_NODE_ID
> > + select OF_NUMA if OF
> > help
> > Enable NUMA (Non-Uniform Memory Access) support.
> >
> > diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index
> > fd975a4a5200..940c92a6a5e9 100644
> > --- a/arch/x86/kernel/setup.c
> > +++ b/arch/x86/kernel/setup.c
> > @@ -1220,6 +1220,7 @@ void __init setup_arch(char **cmdline_p)
> >
> > early_acpi_boot_init();
> >
> > + x86_dtb_init();
> > initmem_init();
> > dma_contiguous_reserve(max_pfn_mapped << PAGE_SHIFT);
> >
> > @@ -1261,7 +1262,6 @@ void __init setup_arch(char **cmdline_p)
> > * Read APIC and some other early information from ACPI tables.
> > */
> > acpi_boot_init();
> > - x86_dtb_init();
> >
> > /*
> > * get boot-time SMP configuration:
> > diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c index
> > 2aadb2019b4f..a6d3d331fda2 100644
> > --- a/arch/x86/mm/numa.c
> > +++ b/arch/x86/mm/numa.c
> > @@ -11,6 +11,7 @@
> > #include <linux/nodemask.h>
> > #include <linux/sched.h>
> > #include <linux/topology.h>
> > +#include <linux/of.h>
> >
> > #include <asm/e820/api.h>
> > #include <asm/proto.h>
> > @@ -733,6 +734,8 @@ void __init x86_numa_init(void)
> > if (!numa_init(amd_numa_init))
> > return;
> > #endif
> > + if (acpi_disabled && !numa_init(of_numa_init))
> > + return;
> > }
> >
> > numa_init(dummy_numa_init);
> > --
> > 2.34.1
>
> Hi x86 Maintainers,
>
> May I get your feedback on this patch.
>
> Regards,
> Saurabh
Kind reminder to review this patch.
- Saurabh
From: Saurabh Sengar <[email protected]> Sent: Tuesday, June 27, 2023 12:28 AM
>
> Hyper-V has usecases where it need to fetch NUMA information from
> Devicetree. Currently, it is not possible to extract the NUMA
> information from Devicetree for x86 arch.
>
> Add support for Devicetree in the x86_numa_init function, allowing
> the retrieval of NUMA node information from the Devicetree.
>
> Additionally, relocate the x86_dtb_init function before initmem_init
> to ensure the Devicetree initialization prior to its utilization in
> x86_numa_init.
>
> Signed-off-by: Saurabh Sengar <[email protected]>
> ---
> arch/x86/Kconfig | 1 +
> arch/x86/kernel/setup.c | 2 +-
> arch/x86/mm/numa.c | 3 +++
> 3 files changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
> index c531b16ee0bf..a2ada193b2d8 100644
> --- a/arch/x86/Kconfig
> +++ b/arch/x86/Kconfig
> @@ -1567,6 +1567,7 @@ config NUMA
> depends on X86_64 || (X86_32 && HIGHMEM64G && X86_BIGSMP)
> default y if X86_BIGSMP
> select USE_PERCPU_NUMA_NODE_ID
> + select OF_NUMA if OF
> help
> Enable NUMA (Non-Uniform Memory Access) support.
>
> diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
> index fd975a4a5200..940c92a6a5e9 100644
> --- a/arch/x86/kernel/setup.c
> +++ b/arch/x86/kernel/setup.c
> @@ -1220,6 +1220,7 @@ void __init setup_arch(char **cmdline_p)
>
> early_acpi_boot_init();
>
> + x86_dtb_init();
> initmem_init();
> dma_contiguous_reserve(max_pfn_mapped << PAGE_SHIFT);
>
> @@ -1261,7 +1262,6 @@ void __init setup_arch(char **cmdline_p)
> * Read APIC and some other early information from ACPI tables.
> */
> acpi_boot_init();
> - x86_dtb_init();
>
> /*
> * get boot-time SMP configuration:
> diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c
> index 2aadb2019b4f..a6d3d331fda2 100644
> --- a/arch/x86/mm/numa.c
> +++ b/arch/x86/mm/numa.c
> @@ -11,6 +11,7 @@
> #include <linux/nodemask.h>
> #include <linux/sched.h>
> #include <linux/topology.h>
> +#include <linux/of.h>
>
> #include <asm/e820/api.h>
> #include <asm/proto.h>
> @@ -733,6 +734,8 @@ void __init x86_numa_init(void)
> if (!numa_init(amd_numa_init))
> return;
> #endif
> + if (acpi_disabled && !numa_init(of_numa_init))
> + return;
> }
>
> numa_init(dummy_numa_init);
> --
> 2.34.1
This looks good to me. I've looked and don't see any
obvious issues in moving x86_dtb_init() earlier in
setup_arch(). But I also know the setup ordering can
be very tricky to get working correctly with a wide
range of platforms, and I don't have that expertise.
But with those caveats,
Reviewed-by: Michael Kelley <[email protected]>
> -----Original Message-----
> From: Michael Kelley (LINUX) <[email protected]>
> Sent: Thursday, August 3, 2023 12:19 AM
> To: Saurabh Sengar <[email protected]>; [email protected];
> [email protected]; [email protected]; [email protected];
> [email protected]; [email protected]; [email protected]; [email protected];
> [email protected]
> Subject: [EXTERNAL] RE: [PATCH] x86/numa: Add Devicetree support
>
> From: Saurabh Sengar <[email protected]> Sent: Tuesday, June
> 27, 2023 12:28 AM
> >
> > Hyper-V has usecases where it need to fetch NUMA information from
> > Devicetree. Currently, it is not possible to extract the NUMA
> > information from Devicetree for x86 arch.
> >
> > Add support for Devicetree in the x86_numa_init function, allowing the
> > retrieval of NUMA node information from the Devicetree.
> >
> > Additionally, relocate the x86_dtb_init function before initmem_init
> > to ensure the Devicetree initialization prior to its utilization in
> > x86_numa_init.
> >
> > Signed-off-by: Saurabh Sengar <[email protected]>
> > ---
> > arch/x86/Kconfig | 1 +
> > arch/x86/kernel/setup.c | 2 +-
> > arch/x86/mm/numa.c | 3 +++
> > 3 files changed, 5 insertions(+), 1 deletion(-)
> >
> > diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index
> > c531b16ee0bf..a2ada193b2d8 100644
> > --- a/arch/x86/Kconfig
> > +++ b/arch/x86/Kconfig
> > @@ -1567,6 +1567,7 @@ config NUMA
> > depends on X86_64 || (X86_32 && HIGHMEM64G && X86_BIGSMP)
> > default y if X86_BIGSMP
> > select USE_PERCPU_NUMA_NODE_ID
> > + select OF_NUMA if OF
> > help
> > Enable NUMA (Non-Uniform Memory Access) support.
> >
> > diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index
> > fd975a4a5200..940c92a6a5e9 100644
> > --- a/arch/x86/kernel/setup.c
> > +++ b/arch/x86/kernel/setup.c
> > @@ -1220,6 +1220,7 @@ void __init setup_arch(char **cmdline_p)
> >
> > early_acpi_boot_init();
> >
> > + x86_dtb_init();
> > initmem_init();
> > dma_contiguous_reserve(max_pfn_mapped << PAGE_SHIFT);
> >
> > @@ -1261,7 +1262,6 @@ void __init setup_arch(char **cmdline_p)
> > * Read APIC and some other early information from ACPI tables.
> > */
> > acpi_boot_init();
> > - x86_dtb_init();
> >
> > /*
> > * get boot-time SMP configuration:
> > diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c index
> > 2aadb2019b4f..a6d3d331fda2 100644
> > --- a/arch/x86/mm/numa.c
> > +++ b/arch/x86/mm/numa.c
> > @@ -11,6 +11,7 @@
> > #include <linux/nodemask.h>
> > #include <linux/sched.h>
> > #include <linux/topology.h>
> > +#include <linux/of.h>
> >
> > #include <asm/e820/api.h>
> > #include <asm/proto.h>
> > @@ -733,6 +734,8 @@ void __init x86_numa_init(void)
> > if (!numa_init(amd_numa_init))
> > return;
> > #endif
> > + if (acpi_disabled && !numa_init(of_numa_init))
> > + return;
> > }
> >
> > numa_init(dummy_numa_init);
> > --
> > 2.34.1
>
> This looks good to me. I've looked and don't see any obvious issues in
> moving x86_dtb_init() earlier in setup_arch(). But I also know the setup
> ordering can be very tricky to get working correctly with a wide range of
> platforms, and I don't have that expertise.
> But with those caveats,
>
> Reviewed-by: Michael Kelley <[email protected]>
Hi X86 Maintainers,
Is this good to be accepted ?
- Saurabh