From patchwork Wed Aug 26 13:03:06 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ionela Voinescu X-Patchwork-Id: 11738345 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2552213B1 for ; Wed, 26 Aug 2020 13:04:32 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E766920FC3 for ; Wed, 26 Aug 2020 13:04:31 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="RyIxaZUb" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E766920FC3 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:MIME-Version:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:References:In-Reply-To:Message-Id:Date:Subject:To: From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=jyAHXGwsyw6w3N2MvjrTNc5YoNiEaT4CnJgSxDDS7Uk=; b=RyIxaZUbOhOyPJSAyvmrYYDVrS HnaHNEOS5HN1vx0G1oIq6JrIqJUKyiMiv0kla2AeGQYpk1x9kTDT55Fh6RUeqvljEpDUwrFf21rZT GO6FIpHCIKxrAM27KWKxVRKHTP0IaFJ1g1b5dekzfdKscUzJFn6D6JiUj5LCrnM//+6HTFMPS7Adi 5/SaEcIYqxSp6icBmk3pmWDs/WY88h1DLq6OGVYDwk1YGRtgdzX5qE2S94GTIrf1HFTcycrgVymmi O+YHBcsoTFAXUs39KFl0bSvQ82uipIem2XXvmHavbsIfdjItT0FOVhD6sUvveZHQqr/5dOJynaBO/ 9mSFEtuw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kAv6A-0001ap-Q7; Wed, 26 Aug 2020 13:04:18 +0000 Received: from foss.arm.com ([217.140.110.172]) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kAv5x-0001Vp-7P for linux-arm-kernel@lists.infradead.org; Wed, 26 Aug 2020 13:04:07 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 9A051101E; Wed, 26 Aug 2020 06:04:00 -0700 (PDT) Received: from e108754-lin.cambridge.arm.com (unknown [10.1.199.49]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 2CEA03F68F; Wed, 26 Aug 2020 06:03:59 -0700 (PDT) From: Ionela Voinescu To: catalin.marinas@arm.com, will@kernel.org, sudeep.holla@arm.com Subject: [PATCH 1/4] arm64: cpufeature: restructure AMU feedback function Date: Wed, 26 Aug 2020 14:03:06 +0100 Message-Id: <20200826130309.28027-2-ionela.voinescu@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200826130309.28027-1-ionela.voinescu@arm.com> References: <20200826130309.28027-1-ionela.voinescu@arm.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200826_090405_416300_BAAD0DD1 X-CRM114-Status: GOOD ( 13.85 ) X-Spam-Score: -2.3 (--) X-Spam-Report: SpamAssassin version 3.4.4 on merlin.infradead.org summary: Content analysis details: (-2.3 points) pts rule name description ---- ---------------------- -------------------------------------------------- -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [217.140.110.172 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: souvik.chakravarty@arm.com, viresh.kumar@linaro.org, valentin.schneider@arm.com, linux-kernel@vger.kernel.org, dietmar.eggemann@arm.com, ionela.voinescu@arm.com, morten.rasmussen@arm.com, linux-arm-kernel@lists.infradead.org MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org The current cpu_has_amu_feat() function only returns whether a single provided CPU has support for Activity Monitors (AMUs). Replace that function by cpus_with_amu_counters() that returns a pointer to a cpumask with all CPUs that support AMUs. This way the user has more freedom in regards to either checking many CPUs at once or selecting any supporting CPU, through the use of cpumask operations. Signed-off-by: Ionela Voinescu Cc: Catalin Marinas Cc: Will Deacon --- arch/arm64/include/asm/cpufeature.h | 6 ++---- arch/arm64/kernel/cpufeature.c | 11 ++++++++--- arch/arm64/kernel/topology.c | 3 ++- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/arch/arm64/include/asm/cpufeature.h b/arch/arm64/include/asm/cpufeature.h index 89b4f0142c28..387b28ab270c 100644 --- a/arch/arm64/include/asm/cpufeature.h +++ b/arch/arm64/include/asm/cpufeature.h @@ -758,10 +758,8 @@ static inline bool cpu_has_hw_af(void) ID_AA64MMFR1_HADBS_SHIFT); } -#ifdef CONFIG_ARM64_AMU_EXTN -/* Check whether the cpu supports the Activity Monitors Unit (AMU) */ -extern bool cpu_has_amu_feat(int cpu); -#endif +/* Return cpumask with CPUs that support the Activity Monitors Unit (AMU) */ +extern const struct cpumask *cpus_with_amu_counters(void); static inline unsigned int get_vmid_bits(u64 mmfr1) { diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c index 6424584be01e..15a376689b2f 100644 --- a/arch/arm64/kernel/cpufeature.c +++ b/arch/arm64/kernel/cpufeature.c @@ -1516,9 +1516,9 @@ static bool has_hw_dbm(const struct arm64_cpu_capabilities *cap, */ static struct cpumask amu_cpus __read_mostly; -bool cpu_has_amu_feat(int cpu) +const struct cpumask *cpus_with_amu_counters(void) { - return cpumask_test_cpu(cpu, &amu_cpus); + return (const struct cpumask *)&amu_cpus; } /* Initialize the use of AMU counters for frequency invariance */ @@ -1552,7 +1552,12 @@ static bool has_amu(const struct arm64_cpu_capabilities *cap, return true; } -#endif +#else +const struct cpumask *cpus_with_amu_counters(void) +{ + return NULL; +} +#endif /* CONFIG_ARM64_AMU_EXTN */ #ifdef CONFIG_ARM64_VHE static bool runs_at_el2(const struct arm64_cpu_capabilities *entry, int __unused) diff --git a/arch/arm64/kernel/topology.c b/arch/arm64/kernel/topology.c index 0801a0f3c156..2ef440938282 100644 --- a/arch/arm64/kernel/topology.c +++ b/arch/arm64/kernel/topology.c @@ -142,9 +142,10 @@ void init_cpu_freq_invariance_counters(void) static int validate_cpu_freq_invariance_counters(int cpu) { + const struct cpumask *cnt_cpu_mask = cpus_with_amu_counters(); u64 max_freq_hz, ratio; - if (!cpu_has_amu_feat(cpu)) { + if (!cnt_cpu_mask || !cpumask_test_cpu(cpu, cnt_cpu_mask)) { pr_debug("CPU%d: counters are not supported.\n", cpu); return -EINVAL; }