KVM relies on ARM64_WORKAROUND_PMUV3_IMPDEF_TRAPS as a system-wide precondition for PMUv3 emulation on affected Apple CPUs. A local CPU erratum is too weak for that: once the workaround is enabled, a late CPU that misses it may still be onlined. Make the workaround an all-early-CPU capability instead. The matcher is still local because it depends on MIDR_EL1, but the capability is only advertised if all early CPUs match. A late CPU that misses an advertised capability is therefore rejected. Although kept in the errata capability table, this capability describes optional trap support rather than a workaround required for safe CPU operation. A late CPU may therefore match it when the system does not. KVM treats an IMPDEF PMU as unimplemented unless the capability was finalized system-wide, so the additional trap support remains unused. Fixes: bed9b8ec8c71 ("KVM: arm64: Advertise PMUv3 if IMPDEF traps are present") Assisted-by: Codex:gpt-5.5 Signed-off-by: Akihiko Odaki --- arch/arm64/kernel/cpu_errata.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm64/kernel/cpu_errata.c b/arch/arm64/kernel/cpu_errata.c index 1995e1198648..a5ae628204a1 100644 --- a/arch/arm64/kernel/cpu_errata.c +++ b/arch/arm64/kernel/cpu_errata.c @@ -1005,7 +1005,7 @@ const struct arm64_cpu_capabilities arm64_errata[] = { { .desc = "Apple IMPDEF PMUv3 Traps", .capability = ARM64_WORKAROUND_PMUV3_IMPDEF_TRAPS, - .type = ARM64_CPUCAP_LOCAL_CPU_ERRATUM, + .type = ARM64_CPUCAP_EARLY_LOCAL_CPU_FEATURE, .matches = has_impdef_pmuv3, .cpu_enable = cpu_enable_impdef_pmuv3_traps, }, -- 2.55.0