aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorOliver Upton <oupton@kernel.org>2026-07-22 20:27:01 +0000
committerOliver Upton <oupton@kernel.org>2026-07-30 23:35:24 -0700
commitbbef6317f97b8612a694ddc2ff6e7ca81780768d (patch)
tree75e547e7b1a269987bc63a28cd9149da8e8ba95e
parentKVM: arm64: Advertise STALL_SLOT* in PMCEID1 under strict PMUv3 UAPI (diff)
KVM: arm64: Ignore writes to PMCR_EL0.N when using strict UAPI
KVM allows userspace to configure the number of event counters by writing to PMCR_EL0.N. While this makes a bit of sense prior to NV, the value of the field is context-dependent whether or not the vCPU is at EL2 or EL1. As such, the vCPU attribute was added afterwards and made mandatory for NV. As we're in the process of papering over old mistakes, force userspace to use the vCPU attribute if KVM_ARM_VCPU_PMU_V3_STRICT is set. Reviewed-by: Geoff Blake <blakgeof@amazon.com> Reviewed-by: Haris Okanovic <harisokn@amazon.com> Signed-off-by: Congkai Tan <congkai@amazon.com> Reviewed-by: Fuad Tabba <fuad.tabba@linux.dev> Tested-by: Fuad Tabba <fuad.tabba@linux.dev> Link: https://patch.msgid.link/20260722202702.4165917-4-congkai@amazon.com Signed-off-by: Oliver Upton <oupton@kernel.org>
-rw-r--r--arch/arm64/kvm/sys_regs.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c
index 4c6f608c4fe5..e93f11b90813 100644
--- a/arch/arm64/kvm/sys_regs.c
+++ b/arch/arm64/kvm/sys_regs.c
@@ -1502,6 +1502,7 @@ static int set_pmcr(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r,
*/
if (!kvm_vm_has_ran_once(kvm) &&
!vcpu_has_nv(vcpu) &&
+ !kvm_vcpu_has_pmuv3_strict(vcpu) &&
new_n <= kvm_arm_pmu_get_max_counters(kvm))
kvm->arch.nr_pmu_counters = new_n;