Received: by 2002:a25:ca44:0:0:0:0:0 with SMTP id a65csp2492214ybg; Fri, 31 Jul 2020 00:52:33 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwM9o+UvHUxUaxCGuyTXQOcvyIlU6A0kFgg0cx7/D0AvBTOfmw8S0Aj8H+jxcfobjIhckM9 X-Received: by 2002:a17:906:25c4:: with SMTP id n4mr2771631ejb.3.1596181953698; Fri, 31 Jul 2020 00:52:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1596181953; cv=none; d=google.com; s=arc-20160816; b=gV5bux4GII+YmtZRFmDn9dxHAI+1OE6AAPqUxdo0BXEoJZ7vBSZEOBV0uHXzVEQvKp OO8pHLz7mgQH5atuGxMseCdbPv8+FxJcTVQSbKLlgGxduhFcJZdPrV/Jz4ZRjje8IraF kW9Q0VAc5E39LbUXaLbBnViK0QVXIcKPdE1icvNNGQlpSW9zXN+7unWQPXgKMKKApPVr p2HQN8z1EEyGdiXTQ7tM2OPeZI1JvOpcXr69CIFhHvf7rALHoDT0WdgWkLWr9duazP2j cVYnaL9eF+893ntNLU36pudT1GRAXCe9b0ish9ApHTQbdnrFT3ZrB7c/MiIC7ijhPJrM Fnqg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:message-id:date:references :in-reply-to:subject:cc:to:from:dkim-signature; bh=b+NomeTVhFruKsuUmu1sC7JzfPlXYlmn+hd//0EhGcw=; b=0v6owfxivw4UqXCTqGaAiuuEITuxUKcZXWeGpd7Keok+JN9rhyIeAdlmSoTzEZaMQy Nsa6hncsR1DzUpjmlfdHcbPRbFJ3Y1rY5voGPs9N/TpKlp8sLTi7hY9J995/FrFeCPJX 7gE7UlFHB8mtlrgB6nScwFD8MbU1qqBXh/V/EkcjxrskuPTZLdge4pc+90Wjg17MyvT6 gWpO/1Oi6Ybec/QqMIebHoPNjYyF0D/kdD8IueXiiwuUGJX8ZilFa0q1mKq1t3tNnwqd yv5h8NneMhm+7yKfkQvONdNN0+CkMSq1NUXGQuTv2/HCgOMmfo3mJAiFJWV+2HNalY4O JF5A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ellerman.id.au header.s=201909 header.b=Eb4adLDM; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id l3si4761794ejd.17.2020.07.31.00.52.11; Fri, 31 Jul 2020 00:52:33 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@ellerman.id.au header.s=201909 header.b=Eb4adLDM; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731765AbgGaHt6 (ORCPT + 99 others); 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