From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.1 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id AD1CBC433DF for ; Fri, 31 Jul 2020 07:49:59 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 841152067D for ; Fri, 31 Jul 2020 07:49:59 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=ellerman.id.au header.i=@ellerman.id.au header.b="Eb4adLDM" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731804AbgGaHt6 (ORCPT ); Fri, 31 Jul 2020 03:49:58 -0400 Received: from ozlabs.org ([203.11.71.1]:55215 "EHLO ozlabs.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731684AbgGaHt5 (ORCPT ); Fri, 31 Jul 2020 03:49:57 -0400 Received: from authenticated.ozlabs.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mail.ozlabs.org (Postfix) with ESMTPSA id 4BHzvm3NhBz9sRK; Fri, 31 Jul 2020 17:49:56 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ellerman.id.au; s=201909; t=1596181796; bh=vgtrJGuvJCtQtz6V9aSKtpyUkKz3RW8OCC7iYMgVatA=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=Eb4adLDMncuvoJsfXDgzwZkTlK6c7QJEQpW9tDwGSEUqHy4195obPsJMK9r49D524 S3lNErNX6QpE0MVLd7JIMgC/3MwQcZWPqQ3zUDYdiwR4MYhISX9ciT4EnQ2gdpNoyC vnsymo1WsK/FL7ynJyYVUMf8VZcPOWCrglYL85A5ZJMewCM9b/A44okPvsXEFtFRJw TjmZXZiJuK3Jhbcf7+WhX3dQFL2lt9GAOHQtClBp43pCn/E4FfaNY3EfS9KgUiymve 39z2HJnIACR3a4d06P1QqXNe/kiWigwciGcE+fe9f5dyqcgYuk/oVHEzCk6904zFM/ eHl5fkSbXS7gg== From: Michael Ellerman To: Srikar Dronamraju Cc: linuxppc-dev , Srikar Dronamraju , LKML , Nicholas Piggin , Anton Blanchard , Oliver O'Halloran , Nathan Lynch , Michael Neuling , Gautham R Shenoy , Ingo Molnar , Peter Zijlstra , Valentin Schneider , Jordan Niethe Subject: Re: [PATCH v4 07/10] Powerpc/numa: Detect support for coregroup In-Reply-To: <20200727053230.19753-8-srikar@linux.vnet.ibm.com> References: <20200727053230.19753-1-srikar@linux.vnet.ibm.com> <20200727053230.19753-8-srikar@linux.vnet.ibm.com> Date: Fri, 31 Jul 2020 17:49:55 +1000 Message-ID: <8736585djw.fsf@mpe.ellerman.id.au> MIME-Version: 1.0 Content-Type: text/plain Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Srikar Dronamraju writes: > Add support for grouping cores based on the device-tree classification. > - The last domain in the associativity domains always refers to the > core. > - If primary reference domain happens to be the penultimate domain in > the associativity domains device-tree property, then there are no > coregroups. However if its not a penultimate domain, then there are > coregroups. There can be more than one coregroup. For now we would be > interested in the last or the smallest coregroups. This still doesn't tell me what a coregroup actually represents. I get that it's a grouping of cores, and that the device tree specifies it for us, but grouping based on what? I think the answer is we aren't being told by firmware, it's just a grouping based on some opaque performance characteristic and we just have to take that as given. But please explain that clearly in the change log and the code comments. cheers > Cc: linuxppc-dev > Cc: LKML > Cc: Michael Ellerman > Cc: Nicholas Piggin > Cc: Anton Blanchard > Cc: Oliver O'Halloran > Cc: Nathan Lynch > Cc: Michael Neuling > Cc: Gautham R Shenoy > Cc: Ingo Molnar > Cc: Peter Zijlstra > Cc: Valentin Schneider > Cc: Jordan Niethe > Reviewed-by: Gautham R. Shenoy > Signed-off-by: Srikar Dronamraju > --- > Changelog v1 -> v2: > Explained Coregroup in commit msg (Michael Ellerman) > > arch/powerpc/include/asm/smp.h | 1 + > arch/powerpc/kernel/smp.c | 1 + > arch/powerpc/mm/numa.c | 34 +++++++++++++++++++++------------- > 3 files changed, 23 insertions(+), 13 deletions(-) > > diff --git a/arch/powerpc/include/asm/smp.h b/arch/powerpc/include/asm/smp.h > index 49a25e2400f2..5bdc17a7049f 100644 > --- a/arch/powerpc/include/asm/smp.h > +++ b/arch/powerpc/include/asm/smp.h > @@ -28,6 +28,7 @@ > extern int boot_cpuid; > extern int spinning_secondaries; > extern u32 *cpu_to_phys_id; > +extern bool coregroup_enabled; > > extern void cpu_die(void); > extern int cpu_to_chip_id(int cpu); > diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c > index 3c5ccf6d2b1c..698000c7f76f 100644 > --- a/arch/powerpc/kernel/smp.c > +++ b/arch/powerpc/kernel/smp.c > @@ -74,6 +74,7 @@ static DEFINE_PER_CPU(int, cpu_state) = { 0 }; > > struct task_struct *secondary_current; > bool has_big_cores; > +bool coregroup_enabled; > > DEFINE_PER_CPU(cpumask_var_t, cpu_sibling_map); > DEFINE_PER_CPU(cpumask_var_t, cpu_smallcore_map); > diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c > index 2298899a0f0a..51cb672f113b 100644 > --- a/arch/powerpc/mm/numa.c > +++ b/arch/powerpc/mm/numa.c > @@ -886,7 +886,9 @@ static void __init setup_node_data(int nid, u64 start_pfn, u64 end_pfn) > static void __init find_possible_nodes(void) > { > struct device_node *rtas; > - u32 numnodes, i; > + const __be32 *domains; > + int prop_length, max_nodes; > + u32 i; > > if (!numa_enabled) > return; > @@ -895,25 +897,31 @@ static void __init find_possible_nodes(void) > if (!rtas) > return; > > - if (of_property_read_u32_index(rtas, "ibm,current-associativity-domains", > - min_common_depth, &numnodes)) { > - /* > - * ibm,current-associativity-domains is a fairly recent > - * property. If it doesn't exist, then fallback on > - * ibm,max-associativity-domains. Current denotes what the > - * platform can support compared to max which denotes what the > - * Hypervisor can support. > - */ > - if (of_property_read_u32_index(rtas, "ibm,max-associativity-domains", > - min_common_depth, &numnodes)) > + /* > + * ibm,current-associativity-domains is a fairly recent property. If > + * it doesn't exist, then fallback on ibm,max-associativity-domains. > + * Current denotes what the platform can support compared to max > + * which denotes what the Hypervisor can support. > + */ > + domains = of_get_property(rtas, "ibm,current-associativity-domains", > + &prop_length); > + if (!domains) { > + domains = of_get_property(rtas, "ibm,max-associativity-domains", > + &prop_length); > + if (!domains) > goto out; > } > > - for (i = 0; i < numnodes; i++) { > + max_nodes = of_read_number(&domains[min_common_depth], 1); > + for (i = 0; i < max_nodes; i++) { > if (!node_possible(i)) > node_set(i, node_possible_map); > } > > + prop_length /= sizeof(int); > + if (prop_length > min_common_depth + 2) > + coregroup_enabled = 1; > + > out: > of_node_put(rtas); > } > -- > 2.17.1