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 <linuxppc-...@lists.ozlabs.org>
> Cc: LKML <linux-kernel@vger.kernel.org>
> Cc: Michael Ellerman <micha...@au1.ibm.com>
> Cc: Ingo Molnar <mi...@kernel.org>
> Cc: Peter Zijlstra <pet...@infradead.org>
> Cc: Valentin Schneider <valentin.schnei...@arm.com>
> Cc: Nick Piggin <npig...@au1.ibm.com>
> Cc: Oliver OHalloran <olive...@au1.ibm.com>
> Cc: Nathan Lynch <nath...@linux.ibm.com>
> Cc: Michael Neuling <mi...@linux.ibm.com>
> Cc: Anton Blanchard <an...@au1.ibm.com>
> Cc: Gautham R Shenoy <e...@linux.vnet.ibm.com>
> Cc: Vaidyanathan Srinivasan <sva...@linux.ibm.com>
> Cc: Jordan Niethe <jniet...@gmail.com>
> Signed-off-by: Srikar Dronamraju <sri...@linux.vnet.ibm.com>

Looks good to me.

Reviewed-by : Gautham R. Shenoy <e...@linux.vnet.ibm.com>


> ---
> 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
> 

Reply via email to