Subject: Re: [PATCH v2 10/10] powerpc/smp: Implement cpu_to_coregroup_id

From: Gautham R Shenoy <[email-masked]>
Date: Wed, 22 Jul 2020 12:36:28 +0530

On Tue, Jul 21, 2020 at 05:08:14PM +0530, Srikar Dronamraju wrote:
> Lookup the coregroup id from the associativity array.
> 
> If unable to detect the coregroup id, fallback on the core id.
> This way, ensure sched_domain degenerates and an extra sched domain is
> not created.
> 
> Ideally this function should have been implemented in
> arch/powerpc/kernel/smp.c. However if its implemented in mm/numa.c, we
> don't need to find the primary domain again.
> 
> If the device-tree mentions more than one coregroup, then kernel
> implements only the last or the smallest coregroup, which currently
> corresponds to the penultimate domain in the device-tree.
> 
> Cc: linuxppc-dev <[email-masked]>
> Cc: LKML <[email-masked]>
> Cc: Michael Ellerman <[email-masked]>
> Cc: Ingo Molnar <[email-masked]>
> Cc: Peter Zijlstra <[email-masked]>
> Cc: Valentin Schneider <[email-masked]>
> Cc: Nick Piggin <[email-masked]>
> Cc: Oliver OHalloran <[email-masked]>
> Cc: Nathan Lynch <[email-masked]>
> Cc: Michael Neuling <[email-masked]>
> Cc: Anton Blanchard <[email-masked]>
> Cc: Gautham R Shenoy <[email-masked]>
> Cc: Vaidyanathan Srinivasan <[email-masked]>
> Cc: Jordan Niethe <[email-masked]>
> Signed-off-by: Srikar Dronamraju <[email-masked]>

Looks good to me.

Reviewed-by : Gautham R. Shenoy <[email-masked]>

> ---
> Changelog v1 -> v2:
> powerpc/smp: Implement cpu_to_coregroup_id
> 	Move coregroup_enabled before getting associativity (Gautham)
> 
>  arch/powerpc/mm/numa.c | 20 ++++++++++++++++++++
>  1 file changed, 20 insertions(+)
> 
> diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c
> index ef8aa580da21..ae57b68beaee 100644
> --- a/arch/powerpc/mm/numa.c
> +++ b/arch/powerpc/mm/numa.c
> @@ -1218,6 +1218,26 @@ int find_and_online_cpu_nid(int cpu)
> 
>  int cpu_to_coregroup_id(int cpu)
>  {
> +	__be32 associativity[VPHN_ASSOC_BUFSIZE] = {0};
> +	int index;
> +
> +	if (cpu < 0 || cpu > nr_cpu_ids)
> +		return -1;
> +
> +	if (!coregroup_enabled)
> +		goto out;
> +
> +	if (!firmware_has_feature(FW_FEATURE_VPHN))
> +		goto out;
> +
> +	if (vphn_get_associativity(cpu, associativity))
> +		goto out;
> +
> +	index = of_read_number(associativity, 1);
> +	if (index > min_common_depth + 1)
> +		return of_read_number(&associativity[index - 1], 1);
> +
> +out:
>  	return cpu_to_core_id(cpu);
>  }
> 
> -- 
> 2.17.1
>