From nobody Thu Dec 18 19:25:20 2025 Received: from mail-oo1-f74.google.com (mail-oo1-f74.google.com [209.85.161.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B3E6530B52E for ; Tue, 9 Dec 2025 20:52:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765313566; cv=none; b=MGrDDvKQHGSmiYPfY3pPK1YUpTDlPWP+3qUd5rL3oosmCxkAvFYY432Hi7+m3m9y/cxsBxWBuOcXeHzt76hSR3qOybfmUg9E+Bm6KS3XKU/9cyoLu80AIFpfAAzFyoRh9HXaSr7qdK7fF5vQbVbGXEo+9Zk70JE8jDmo3b50wxE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765313566; c=relaxed/simple; bh=gK8PYV0Ut8umvNmJJee7/9an5YvBL6+gILLBE0W0pjA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=jfEUFdXjBpZji86QcAXyzM/BjHPJi2aWZspw3cGZiliKB0kYpneq/0UYMqbIOpISxLsIlBDFghoYN6igDxcmRbIgMizZIpZM/VAezYuU2Fvs/MRwqvfgcouK5py6S+Pz/h4HIOwl1BxQFB5X+nU97ZuesdYUVSNGUTKmwI/3Bws= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--coltonlewis.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=h9C/SU9i; arc=none smtp.client-ip=209.85.161.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--coltonlewis.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="h9C/SU9i" Received: by mail-oo1-f74.google.com with SMTP id 006d021491bc7-656b3efc41aso7311760eaf.3 for ; Tue, 09 Dec 2025 12:52:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1765313558; x=1765918358; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=eILdFka/rsHJNMit/75Sq+eu11TjmQop/YtCpvpq3fA=; b=h9C/SU9i2BXm+Lt0xk3FLwcDlrhZL2w2HyL8nkPrMRnLsTD8Pchpd6M+9UjatznUW1 58UsYkrlw+KcchRgEvezNdHMPAMblwq9n9sBCx4XrvXHYj0/TARXIHgk63VCbFaSr77f Q3N/Ze0T0j1C1BF+2cPh67ZHahfH/Zr4xUkrXGaSLgoGK6WRBSgLB/51GuzoACm0XMaJ RlF+58zx7vjCqqQKPcRokis5+3Gix69D32ufx6BkteQWxgx2uoxLpvzZqtrKt/Kq9MLH yZAhvikIyjq4V9ULTCm71XL//6zqS94Q9rOSuLeQACQBHwSDFLQSi2z0WLPaQ6WUfAMc QR7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765313558; x=1765918358; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=eILdFka/rsHJNMit/75Sq+eu11TjmQop/YtCpvpq3fA=; b=pivJBbGsAXT1qSg6rMK+GWguoySkSeG1JvuqMO6LbWaqmYa73jAnq2AxL6K8roTkNf O4ahHxsCSzi0vLb/DKXFoUhjQlQx160U3fcKPlTvMZk3jMrvT8CTfLbdyiupxk4zWHf1 i5zNencuZegQsfBb/XiTEcoIJLeVANooet+uIi0OoQlsS0aoB1xSaAoq67m/vZb4IlBQ 2XMe/Fporo1/TW7jHxTZvDYR6sNbQokFUiwcNnnP5NfUtZbZAdfWhHmo46O97S0I0tev +lnYhrhJ9xfWPC99a8i5lF6E6TOAdxayX3oWYPd9Zh0QI2BCHTEnCxU/gh0NK1lw3giG ujPQ== X-Forwarded-Encrypted: i=1; AJvYcCW9IgHFWQh3kQzEc9AP2YWJp/h8aDeJ4mqzHtxfliiDIIr8WnsAUDSTgCFfi5D3P7pSLB73cvO1kGK3zPc=@vger.kernel.org X-Gm-Message-State: AOJu0YwzNKk324uRtm5M4VZbGokfMaIWEsBkyF1l8doXLM1FooAs8L6J mRSSv4FM5OtsyvtANI8meA/nHAl2q9m1yLlwGFd3hl4vHQ1CHiq6Z84P93i2s814E/ADeW8ZA55 Hotv3RaK75qBpSZMZ1MVlPpnoIg== X-Google-Smtp-Source: AGHT+IGFO7LxHdl3SUALrs39mwNrx9NW2pYEpCVi8R5YZ4pkCq168hpaasS4MHYzaxE05YVUGX0GL3A0G5bIBNL23w== X-Received: from ilbcp5.prod.google.com ([2002:a05:6e02:3985:b0:433:e44:c729]) (user=coltonlewis job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6820:4d08:b0:659:9a49:8f57 with SMTP id 006d021491bc7-65b2abec3e1mr136653eaf.28.1765313558233; Tue, 09 Dec 2025 12:52:38 -0800 (PST) Date: Tue, 9 Dec 2025 20:51:09 +0000 In-Reply-To: <20251209205121.1871534-1-coltonlewis@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20251209205121.1871534-1-coltonlewis@google.com> X-Mailer: git-send-email 2.52.0.239.gd5f0c6e74e-goog Message-ID: <20251209205121.1871534-13-coltonlewis@google.com> Subject: [PATCH v5 12/24] KVM: arm64: Use physical PMSELR for PMXEVTYPER if partitioned From: Colton Lewis To: kvm@vger.kernel.org Cc: Paolo Bonzini , Jonathan Corbet , Russell King , Catalin Marinas , Will Deacon , Marc Zyngier , Oliver Upton , Mingwei Zhang , Joey Gouly , Suzuki K Poulose , Zenghui Yu , Mark Rutland , Shuah Khan , Ganapatrao Kulkarni , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linux-perf-users@vger.kernel.org, linux-kselftest@vger.kernel.org, Colton Lewis Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Because PMXEVTYPER is trapped and PMSELR is not, it is not appropriate to use the virtual PMSELR register when it could be outdated and lead to an invalid write. Use the physical register when partitioned. Signed-off-by: Colton Lewis --- arch/arm64/include/asm/arm_pmuv3.h | 7 ++++++- arch/arm64/kvm/sys_regs.c | 9 +++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/arch/arm64/include/asm/arm_pmuv3.h b/arch/arm64/include/asm/ar= m_pmuv3.h index 27c4d6d47da31..60600f04b5902 100644 --- a/arch/arm64/include/asm/arm_pmuv3.h +++ b/arch/arm64/include/asm/arm_pmuv3.h @@ -70,11 +70,16 @@ static inline u64 read_pmcr(void) return read_sysreg(pmcr_el0); } =20 -static inline void write_pmselr(u32 val) +static inline void write_pmselr(u64 val) { write_sysreg(val, pmselr_el0); } =20 +static inline u64 read_pmselr(void) +{ + return read_sysreg(pmselr_el0); +} + static inline void write_pmccntr(u64 val) { write_sysreg(val, pmccntr_el0); diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index 0c9596325519b..2e6d907fa8af2 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c @@ -1199,14 +1199,19 @@ static bool writethrough_pmevtyper(struct kvm_vcpu = *vcpu, struct sys_reg_params static bool access_pmu_evtyper(struct kvm_vcpu *vcpu, struct sys_reg_param= s *p, const struct sys_reg_desc *r) { - u64 idx, reg; + u64 idx, reg, pmselr; =20 if (pmu_access_el0_disabled(vcpu)) return false; =20 if (r->CRn =3D=3D 9 && r->CRm =3D=3D 13 && r->Op2 =3D=3D 1) { /* PMXEVTYPER_EL0 */ - idx =3D SYS_FIELD_GET(PMSELR_EL0, SEL, __vcpu_sys_reg(vcpu, PMSELR_EL0)); + if (kvm_vcpu_pmu_is_partitioned(vcpu)) + pmselr =3D read_pmselr(); + else + pmselr =3D __vcpu_sys_reg(vcpu, PMSELR_EL0); + + idx =3D SYS_FIELD_GET(PMSELR_EL0, SEL, pmselr); reg =3D PMEVTYPER0_EL0 + idx; } else if (r->CRn =3D=3D 14 && (r->CRm & 12) =3D=3D 12) { idx =3D ((r->CRm & 3) << 3) | (r->Op2 & 7); --=20 2.52.0.239.gd5f0c6e74e-goog