Re: [PATCH v2 2/3] powerpc/numa: Allow cpu_to_coregroup_id without PPC_SPLPAR
From: IBM
Date: Fri Jul 10 2026 - 00:14:36 EST
Srikar Dronamraju <srikar@xxxxxxxxxxxxx> writes:
> Make cpu_to_coregroup_id() available outside PPC_SPLPAR so it can be
> used by platforms that do not rely on the SPLPAR-specific VPHN path.
>
> Keep the existing fallback behavior by returning the core ID when
> coregroup information is unavailable.
>
Looks like this mainly brings the cpu_to_coregroup_id() outside of
CONFIG_PPC_SPLPAR gate.
> Signed-off-by: Srikar Dronamraju <srikar@xxxxxxxxxxxxx>
> ---
> Changelog from v1:
> - Handle comments from Christophe Leroy; Remove extern key word in
> declaration
>
> arch/powerpc/include/asm/topology.h | 15 +++++++--------
> arch/powerpc/mm/numa.c | 22 ++++++++++++++++------
> 2 files changed, 23 insertions(+), 14 deletions(-)
>
> diff --git a/arch/powerpc/include/asm/topology.h b/arch/powerpc/include/asm/topology.h
> index 66ed5fe1b718..385715f1ad56 100644
> --- a/arch/powerpc/include/asm/topology.h
> +++ b/arch/powerpc/include/asm/topology.h
> @@ -71,6 +71,7 @@ extern void map_cpu_to_node(int cpu, int node);
> extern void unmap_cpu_from_node(unsigned long cpu);
> #endif /* CONFIG_HOTPLUG_CPU */
>
> +int cpu_to_coregroup_id(int cpu);
> #else
>
> static inline int early_cpu_to_node(int cpu) { return 0; }
> @@ -107,14 +108,6 @@ static inline void map_cpu_to_node(int cpu, int node) {}
> static inline void unmap_cpu_from_node(unsigned long cpu) {}
> #endif /* CONFIG_HOTPLUG_CPU */
> #endif /* CONFIG_SMP */
> -
> -#endif /* CONFIG_NUMA */
> -
> -#if defined(CONFIG_NUMA) && defined(CONFIG_PPC_SPLPAR)
> -void find_and_update_cpu_nid(int cpu);
> -extern int cpu_to_coregroup_id(int cpu);
> -#else
> -static inline void find_and_update_cpu_nid(int cpu) {}
> static inline int cpu_to_coregroup_id(int cpu)
> {
> #ifdef CONFIG_SMP
> @@ -124,6 +117,12 @@ static inline int cpu_to_coregroup_id(int cpu)
> #endif
> }
>
> +#endif /* CONFIG_NUMA */
> +
> +#if defined(CONFIG_NUMA) && defined(CONFIG_PPC_SPLPAR)
> +void find_and_update_cpu_nid(int cpu);
> +#else
> +static inline void find_and_update_cpu_nid(int cpu) {}
> #endif /* CONFIG_NUMA && CONFIG_PPC_SPLPAR */
>
> #include <asm-generic/topology.h>
> diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c
> index c44a80d8fc11..9aa71eb7e96b 100644
> --- a/arch/powerpc/mm/numa.c
> +++ b/arch/powerpc/mm/numa.c
> @@ -1428,6 +1428,21 @@ void find_and_update_cpu_nid(int cpu)
> pr_debug("%s:%d cpu %d nid %d\n", __func__, __LINE__, cpu, new_nid);
> }
>
> +static int topology_update_init(void)
> +{
> + topology_inited = 1;
> + return 0;
> +}
> +device_initcall(topology_update_init);
> +
> +#else
> +static long vphn_get_associativity(unsigned long cpu,
> + __be32 *associativity)
> +{
> + return -1;
> +}
> +#endif /* CONFIG_PPC_SPLPAR */
> +
> int cpu_to_coregroup_id(int cpu)
> {
> __be32 associativity[VPHN_ASSOC_BUFSIZE] = {0};
> @@ -1453,10 +1468,5 @@ int cpu_to_coregroup_id(int cpu)
> return cpu_to_core_id(cpu);
> }
>
> -static int topology_update_init(void)
> -{
> - topology_inited = 1;
> - return 0;
> + return coregroup_id;
> }
These above two lines seems to be out of any function scope. So applying
only patch-1 & patch-2 will give a compile error. This needs fixing.
-ritesh
> -device_initcall(topology_update_init);
> -#endif /* CONFIG_PPC_SPLPAR */
> --
> 2.43.0