lkml.org 
[lkml]   [2020]   [Jul]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 10/10] powerpc/smp: Implement cpu_to_coregroup_id
    Date
    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-dev@lists.ozlabs.org>
    Cc: LKML <linux-kernel@vger.kernel.org>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Nicholas Piggin <npiggin@gmail.com>
    Cc: Anton Blanchard <anton@ozlabs.org>
    Cc: Oliver O'Halloran <oohall@gmail.com>
    Cc: Nathan Lynch <nathanl@linux.ibm.com>
    Cc: Michael Neuling <mikey@neuling.org>
    Cc: Gautham R Shenoy <ego@linux.vnet.ibm.com>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Valentin Schneider <valentin.schneider@arm.com>
    Cc: Jordan Niethe <jniethe5@gmail.com>
    Reviewed-by : Gautham R. Shenoy <ego@linux.vnet.ibm.com>
    Signed-off-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
    ---
    Changelog v1 -> v2:
    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 0d57779e7942..8b3b3ec7fcc4 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
    \
     
     \ /
      Last update: 2020-07-27 07:36    [W:4.664 / U:0.076 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site