|
Denis Kirjanov |
74e540 |
From 25fc42b6b09d0f4626f8766e29d32e95186d4414 Mon Sep 17 00:00:00 2001
|
|
Denis Kirjanov |
74e540 |
From: Marc Zyngier <maz@kernel.org>
|
|
Denis Kirjanov |
74e540 |
Date: Thu, 16 Jul 2020 17:11:09 +0100
|
|
Denis Kirjanov |
74e540 |
Subject: [PATCH 5/6] arm64: Run ARCH_WORKAROUND_1 enabling code on all CPUs
|
|
Denis Kirjanov |
74e540 |
Git-commit: 18fce56134c987e5b4eceddafdbe4b00c07e2ae1
|
|
Denis Kirjanov |
74e540 |
Patch-mainline: v5.10-rc1
|
|
Denis Kirjanov |
74e540 |
References: git-fixes
|
|
Denis Kirjanov |
74e540 |
|
|
Denis Kirjanov |
74e540 |
Commit 73f381660959 ("arm64: Advertise mitigation of Spectre-v2, or lack
|
|
Denis Kirjanov |
74e540 |
thereof") changed the way we deal with ARCH_WORKAROUND_1, by moving most
|
|
Denis Kirjanov |
74e540 |
of the enabling code to the .matches() callback.
|
|
Denis Kirjanov |
74e540 |
|
|
Denis Kirjanov |
74e540 |
This has the unfortunate effect that the workaround gets only enabled on
|
|
Denis Kirjanov |
74e540 |
the first affected CPU, and no other.
|
|
Denis Kirjanov |
74e540 |
|
|
Denis Kirjanov |
74e540 |
In order to address this, forcefully call the .matches() callback from a
|
|
Denis Kirjanov |
74e540 |
.cpu_enable() callback, which brings us back to the original behaviour.
|
|
Denis Kirjanov |
74e540 |
|
|
Denis Kirjanov |
74e540 |
Fixes: 73f381660959 ("arm64: Advertise mitigation of Spectre-v2, or lack thereof")
|
|
Denis Kirjanov |
74e540 |
Cc: <stable@vger.kernel.org>
|
|
Denis Kirjanov |
74e540 |
Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com>
|
|
Denis Kirjanov |
74e540 |
Signed-off-by: Marc Zyngier <maz@kernel.org>
|
|
Denis Kirjanov |
74e540 |
Signed-off-by: Will Deacon <will@kernel.org>
|
|
Denis Kirjanov |
74e540 |
Acked-by: Denis Kirjanov <denis.kirjanov@suse.com>
|
|
Denis Kirjanov |
74e540 |
---
|
|
Denis Kirjanov |
74e540 |
arch/arm64/kernel/cpu_errata.c | 8 ++++++++
|
|
Denis Kirjanov |
74e540 |
1 file changed, 8 insertions(+)
|
|
Denis Kirjanov |
74e540 |
|
|
Denis Kirjanov |
74e540 |
diff --git a/arch/arm64/kernel/cpu_errata.c b/arch/arm64/kernel/cpu_errata.c
|
|
Denis Kirjanov |
74e540 |
index 8d2562f16e7f..858880c86c50 100644
|
|
Denis Kirjanov |
74e540 |
--- a/arch/arm64/kernel/cpu_errata.c
|
|
Denis Kirjanov |
74e540 |
+++ b/arch/arm64/kernel/cpu_errata.c
|
|
Denis Kirjanov |
74e540 |
@@ -646,6 +646,12 @@ check_branch_predictor(const struct arm64_cpu_capabilities *entry, int scope)
|
|
Denis Kirjanov |
74e540 |
return (need_wa > 0);
|
|
Denis Kirjanov |
74e540 |
}
|
|
Denis Kirjanov |
74e540 |
|
|
Denis Kirjanov |
74e540 |
+static void
|
|
Denis Kirjanov |
74e540 |
+cpu_enable_branch_predictor_hardening(const struct arm64_cpu_capabilities *cap)
|
|
Denis Kirjanov |
74e540 |
+{
|
|
Denis Kirjanov |
74e540 |
+ cap->matches(cap, SCOPE_LOCAL_CPU);
|
|
Denis Kirjanov |
74e540 |
+}
|
|
Denis Kirjanov |
74e540 |
+
|
|
Denis Kirjanov |
74e540 |
#ifdef CONFIG_CAVIUM_ERRATUM_27456
|
|
Denis Kirjanov |
74e540 |
const struct midr_range cavium_erratum_27456_cpus[] = {
|
|
Denis Kirjanov |
74e540 |
/* Cavium ThunderX, T88 pass 1.x - 2.1 */
|
|
Denis Kirjanov |
74e540 |
@@ -797,9 +803,11 @@ const struct arm64_cpu_capabilities arm64_errata[] = {
|
|
Denis Kirjanov |
74e540 |
},
|
|
Denis Kirjanov |
74e540 |
#endif
|
|
Denis Kirjanov |
74e540 |
{
|
|
Denis Kirjanov |
74e540 |
+ .desc = "Branch predictor hardening",
|
|
Denis Kirjanov |
74e540 |
.capability = ARM64_HARDEN_BRANCH_PREDICTOR,
|
|
Denis Kirjanov |
74e540 |
.type = ARM64_CPUCAP_LOCAL_CPU_ERRATUM,
|
|
Denis Kirjanov |
74e540 |
.matches = check_branch_predictor,
|
|
Denis Kirjanov |
74e540 |
+ .cpu_enable = cpu_enable_branch_predictor_hardening,
|
|
Denis Kirjanov |
74e540 |
},
|
|
Denis Kirjanov |
74e540 |
{
|
|
Denis Kirjanov |
74e540 |
.desc = "Speculative Store Bypass Disable",
|
|
Denis Kirjanov |
74e540 |
--
|
|
Denis Kirjanov |
74e540 |
2.16.4
|
|
Denis Kirjanov |
74e540 |
|