For some pre-devicetree systems, NUMA information may come from platform specific way. Provide platform numa init hook to allow platform code kick in as last resort method to supply NUMA configuration, and use ARCH_PLATFORM_NUMA Kconfig symbol to gate that function. Signed-off-by: Jiaxun Yang <jiaxun.yang@xxxxxxxxxxx> --- v2: Use Kconfig symbol instead of weak function (arnd) --- drivers/base/Kconfig | 4 ++++ drivers/base/arch_numa.c | 9 +++++++++ include/asm-generic/numa.h | 1 + 3 files changed, 14 insertions(+) diff --git a/drivers/base/Kconfig b/drivers/base/Kconfig index 064eb52ff7e2..e169627b9172 100644 --- a/drivers/base/Kconfig +++ b/drivers/base/Kconfig @@ -231,6 +231,10 @@ config GENERIC_ARCH_NUMA Enable support for generic NUMA implementation. Currently, RISC-V and ARM64 use it. +config ARCH_PLATFORM_NUMA + bool + depends on GENERIC_ARCH_NUMA + config FW_DEVLINK_SYNC_STATE_TIMEOUT bool "sync_state() behavior defaults to timeout instead of strict" help diff --git a/drivers/base/arch_numa.c b/drivers/base/arch_numa.c index 8d49893c0e94..19be18b35430 100644 --- a/drivers/base/arch_numa.c +++ b/drivers/base/arch_numa.c @@ -305,6 +305,13 @@ static int __init arch_acpi_numa_init(void) } #endif +#ifndef CONFIG_ARCH_PLATFORM_NUMA +int __init arch_platform_numa_init(void) +{ + return -EOPNOTSUPP; +} +#endif + /** * arch_numa_init() - Initialize NUMA * @@ -318,6 +325,8 @@ void __init arch_numa_init(void) return; if (acpi_disabled && !numa_init(of_numa_init)) return; + if (!numa_init(arch_platform_numa_init)) + return; } numa_init(dummy_numa_init); diff --git a/include/asm-generic/numa.h b/include/asm-generic/numa.h index c2b046d1fd82..53a8210fde00 100644 --- a/include/asm-generic/numa.h +++ b/include/asm-generic/numa.h @@ -31,6 +31,7 @@ static inline const struct cpumask *cpumask_of_node(int node) #endif void __init arch_numa_init(void); +int __init arch_platform_numa_init(void); int __init numa_add_memblk(int nodeid, u64 start, u64 end); void __init early_map_cpu_to_node(unsigned int cpu, int nid); int __init early_cpu_to_node(int cpu); -- 2.46.0