mirror of
https://github.com/torvalds/linux.git
synced 2024-11-30 16:11:38 +00:00
arm64: Run ARCH_WORKAROUND_2 enabling code on all CPUs
Commit606f8e7b27
("arm64: capabilities: Use linear array for detection and verification") changed the way we deal with per-CPU errata by only calling the .matches() callback until one CPU is found to be affected. At this point, .matches() stop being called, and .cpu_enable() will be called on all CPUs. This breaks the ARCH_WORKAROUND_2 handling, as only a single CPU will be mitigated. In order to address this, forcefully call the .matches() callback from a .cpu_enable() callback, which brings us back to the original behaviour. Fixes:606f8e7b27
("arm64: capabilities: Use linear array for detection and verification") Cc: <stable@vger.kernel.org> Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com> Signed-off-by: Marc Zyngier <maz@kernel.org> Signed-off-by: Will Deacon <will@kernel.org>
This commit is contained in:
parent
18fce56134
commit
39533e1206
@ -457,6 +457,12 @@ out_printmsg:
|
||||
return required;
|
||||
}
|
||||
|
||||
static void cpu_enable_ssbd_mitigation(const struct arm64_cpu_capabilities *cap)
|
||||
{
|
||||
if (ssbd_state != ARM64_SSBD_FORCE_DISABLE)
|
||||
cap->matches(cap, SCOPE_LOCAL_CPU);
|
||||
}
|
||||
|
||||
/* known invulnerable cores */
|
||||
static const struct midr_range arm64_ssb_cpus[] = {
|
||||
MIDR_ALL_VERSIONS(MIDR_CORTEX_A35),
|
||||
@ -914,6 +920,7 @@ const struct arm64_cpu_capabilities arm64_errata[] = {
|
||||
.capability = ARM64_SSBD,
|
||||
.type = ARM64_CPUCAP_LOCAL_CPU_ERRATUM,
|
||||
.matches = has_ssbd_mitigation,
|
||||
.cpu_enable = cpu_enable_ssbd_mitigation,
|
||||
.midr_range_list = arm64_ssb_cpus,
|
||||
},
|
||||
#ifdef CONFIG_ARM64_ERRATUM_1418040
|
||||
|
Loading…
Reference in New Issue
Block a user