arm64: errata: Unify speculative SSBS errata logic
Cortex-X4 erratum 3194386 and Neoverse-V3 erratum 3312417 are identical, with duplicate Kconfig text and some unsightly ifdeffery. While we try to share code behind CONFIG_ARM64_WORKAROUND_SPECULATIVE_SSBS, having separate options results in a fair amount of boilerplate code, and this will only get worse as we expand the set of affected CPUs. To reduce this boilerplate, unify the two behind a common Kconfig option. This removes the duplicate text and Kconfig logic, and removes the need for the intermediate ARM64_WORKAROUND_SPECULATIVE_SSBS option. The set of affected CPUs is described as a list so that this can easily be extended. I've used ARM64_ERRATUM_3194386 (matching the Neoverse-V3 erratum ID) as the common option, matching the way we use ARM64_ERRATUM_1319367 to cover Cortex-A57 erratum 1319537 and Cortex-A72 erratum 1319367. Signed-off-by: Mark Rutland <mark.rutland@arm.com> Cc: James Morse <james.morse@arm.com> Cc: Will Deacon <wilL@kernel.org> Link: https://lore.kernel.org/r/20240603111812.1514101-5-mark.rutland@arm.com Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
This commit is contained in:
parent
fd2ff5f0b3
commit
ec76876660
@ -158,7 +158,7 @@ stable kernels.
|
|||||||
+----------------+-----------------+-----------------+-----------------------------+
|
+----------------+-----------------+-----------------+-----------------------------+
|
||||||
| ARM | Neoverse-V1 | #1619801 | N/A |
|
| ARM | Neoverse-V1 | #1619801 | N/A |
|
||||||
+----------------+-----------------+-----------------+-----------------------------+
|
+----------------+-----------------+-----------------+-----------------------------+
|
||||||
| ARM | Neoverse-V3 | #3312417 | ARM64_ERRATUM_3312417 |
|
| ARM | Neoverse-V3 | #3312417 | ARM64_ERRATUM_3194386 |
|
||||||
+----------------+-----------------+-----------------+-----------------------------+
|
+----------------+-----------------+-----------------+-----------------------------+
|
||||||
| ARM | MMU-500 | #841119,826419 | N/A |
|
| ARM | MMU-500 | #841119,826419 | N/A |
|
||||||
+----------------+-----------------+-----------------+-----------------------------+
|
+----------------+-----------------+-----------------+-----------------------------+
|
||||||
|
@ -1067,15 +1067,14 @@ config ARM64_ERRATUM_3117295
|
|||||||
|
|
||||||
If unsure, say Y.
|
If unsure, say Y.
|
||||||
|
|
||||||
config ARM64_WORKAROUND_SPECULATIVE_SSBS
|
|
||||||
bool
|
|
||||||
|
|
||||||
config ARM64_ERRATUM_3194386
|
config ARM64_ERRATUM_3194386
|
||||||
bool "Cortex-X4: 3194386: workaround for MSR SSBS not self-synchronizing"
|
bool "Cortex-X4/Neoverse-V3: workaround for MSR SSBS not self-synchronizing"
|
||||||
select ARM64_WORKAROUND_SPECULATIVE_SSBS
|
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
This option adds the workaround for ARM Cortex-X4 erratum 3194386.
|
This option adds the workaround for the following errata:
|
||||||
|
|
||||||
|
* ARM Cortex-X4 erratum 3194386
|
||||||
|
* ARM Neoverse-V3 erratum 3312417
|
||||||
|
|
||||||
On affected cores "MSR SSBS, #0" instructions may not affect
|
On affected cores "MSR SSBS, #0" instructions may not affect
|
||||||
subsequent speculative instructions, which may permit unexepected
|
subsequent speculative instructions, which may permit unexepected
|
||||||
@ -1089,26 +1088,6 @@ config ARM64_ERRATUM_3194386
|
|||||||
|
|
||||||
If unsure, say Y.
|
If unsure, say Y.
|
||||||
|
|
||||||
config ARM64_ERRATUM_3312417
|
|
||||||
bool "Neoverse-V3: 3312417: workaround for MSR SSBS not self-synchronizing"
|
|
||||||
select ARM64_WORKAROUND_SPECULATIVE_SSBS
|
|
||||||
default y
|
|
||||||
help
|
|
||||||
This option adds the workaround for ARM Neoverse-V3 erratum 3312417.
|
|
||||||
|
|
||||||
On affected cores "MSR SSBS, #0" instructions may not affect
|
|
||||||
subsequent speculative instructions, which may permit unexepected
|
|
||||||
speculative store bypassing.
|
|
||||||
|
|
||||||
Work around this problem by placing a speculation barrier after
|
|
||||||
kernel changes to SSBS. The presence of the SSBS special-purpose
|
|
||||||
register is hidden from hwcaps and EL0 reads of ID_AA64PFR1_EL1, such
|
|
||||||
that userspace will use the PR_SPEC_STORE_BYPASS prctl to change
|
|
||||||
SSBS.
|
|
||||||
|
|
||||||
If unsure, say Y.
|
|
||||||
|
|
||||||
|
|
||||||
config CAVIUM_ERRATUM_22375
|
config CAVIUM_ERRATUM_22375
|
||||||
bool "Cavium erratum 22375, 24313"
|
bool "Cavium erratum 22375, 24313"
|
||||||
default y
|
default y
|
||||||
|
@ -59,7 +59,7 @@ cpucap_is_possible(const unsigned int cap)
|
|||||||
case ARM64_WORKAROUND_REPEAT_TLBI:
|
case ARM64_WORKAROUND_REPEAT_TLBI:
|
||||||
return IS_ENABLED(CONFIG_ARM64_WORKAROUND_REPEAT_TLBI);
|
return IS_ENABLED(CONFIG_ARM64_WORKAROUND_REPEAT_TLBI);
|
||||||
case ARM64_WORKAROUND_SPECULATIVE_SSBS:
|
case ARM64_WORKAROUND_SPECULATIVE_SSBS:
|
||||||
return IS_ENABLED(CONFIG_ARM64_WORKAROUND_SPECULATIVE_SSBS);
|
return IS_ENABLED(CONFIG_ARM64_ERRATUM_3194386);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -432,14 +432,10 @@ static const struct midr_range erratum_spec_unpriv_load_list[] = {
|
|||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_ARM64_WORKAROUND_SPECULATIVE_SSBS
|
|
||||||
static const struct midr_range erratum_spec_ssbs_list[] = {
|
|
||||||
#ifdef CONFIG_ARM64_ERRATUM_3194386
|
#ifdef CONFIG_ARM64_ERRATUM_3194386
|
||||||
|
static const struct midr_range erratum_spec_ssbs_list[] = {
|
||||||
MIDR_ALL_VERSIONS(MIDR_CORTEX_X4),
|
MIDR_ALL_VERSIONS(MIDR_CORTEX_X4),
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_ARM64_ERRATUM_3312417
|
|
||||||
MIDR_ALL_VERSIONS(MIDR_NEOVERSE_V3),
|
MIDR_ALL_VERSIONS(MIDR_NEOVERSE_V3),
|
||||||
#endif
|
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
@ -741,7 +737,7 @@ const struct arm64_cpu_capabilities arm64_errata[] = {
|
|||||||
MIDR_FIXED(MIDR_CPU_VAR_REV(1,1), BIT(25)),
|
MIDR_FIXED(MIDR_CPU_VAR_REV(1,1), BIT(25)),
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_ARM64_WORKAROUND_SPECULATIVE_SSBS
|
#ifdef CONFIG_ARM64_ERRATUM_3194386
|
||||||
{
|
{
|
||||||
.desc = "ARM errata 3194386, 3312417",
|
.desc = "ARM errata 3194386, 3312417",
|
||||||
.capability = ARM64_WORKAROUND_SPECULATIVE_SSBS,
|
.capability = ARM64_WORKAROUND_SPECULATIVE_SSBS,
|
||||||
|
@ -567,7 +567,7 @@ static enum mitigation_state spectre_v4_enable_hw_mitigation(void)
|
|||||||
* Mitigate this with an unconditional speculation barrier, as CPUs
|
* Mitigate this with an unconditional speculation barrier, as CPUs
|
||||||
* could mis-speculate branches and bypass a conditional barrier.
|
* could mis-speculate branches and bypass a conditional barrier.
|
||||||
*/
|
*/
|
||||||
if (IS_ENABLED(CONFIG_ARM64_WORKAROUND_SPECULATIVE_SSBS))
|
if (IS_ENABLED(CONFIG_ARM64_ERRATUM_3194386))
|
||||||
spec_bar();
|
spec_bar();
|
||||||
|
|
||||||
return SPECTRE_MITIGATED;
|
return SPECTRE_MITIGATED;
|
||||||
|
Loading…
Reference in New Issue
Block a user