From nobody Sun Feb 8 11:25:36 2026 Received: from mail-pl1-f175.google.com (mail-pl1-f175.google.com [209.85.214.175]) (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 73AB41FBE8F for ; Thu, 13 Mar 2025 06:58:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741849083; cv=none; b=A7kjnbkAmcDWkmJb7wSdRxkTEr5xhY6yZ/Manu2NpaLGe4n65Pv3kg63TtJHSICzQQAkQo8MoE3O9r8ZHYI3LdESvREh+wYKB2LOXTWNWnSi2sEzPJKJXhna44ucpAlJzBVqNR444Bozb8rDgmsuqWL7EAXU9EU1mDGa8ZWo6t8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741849083; c=relaxed/simple; bh=Nls52lkzjmJ+bhk/FuveEgJphMZM3lsoGJmXIHJqvZ8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pnFglmQOQm3UxpEpeN8p6gfAaXFHyXw4+ehMJKTgc1PhjVL68ltoxCQCvlV1cfMa1xvm+HgBS9m4eLYLkQedhlvMiUzA26wWf6Q8G2XCMPmxJPqMnABU14N0YMA3osSoFi1kN9P33lddVWq+2BJ/VFBQ96qb/Lp7Ku12zfoS4gA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=daynix.com; spf=pass smtp.mailfrom=daynix.com; dkim=pass (2048-bit key) header.d=daynix-com.20230601.gappssmtp.com header.i=@daynix-com.20230601.gappssmtp.com header.b=gjAFG3s6; arc=none smtp.client-ip=209.85.214.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=daynix.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=daynix.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=daynix-com.20230601.gappssmtp.com header.i=@daynix-com.20230601.gappssmtp.com header.b="gjAFG3s6" Received: by mail-pl1-f175.google.com with SMTP id d9443c01a7336-22113560c57so11500295ad.2 for ; Wed, 12 Mar 2025 23:58:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1741849082; x=1742453882; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=rAMd6rGhip9Etdi0DcL12HaRjFlmNQeXSBT7tbE4ZZA=; b=gjAFG3s6pD6mOnEojLYvn3uoPULYar8ByMme9l8i7wtitk7bSbDmij5K4SxHE6VMIQ RF9ldvoTZsTFhJHOsA9SFbQ1/0bhKMPgQBdmTF2dksPO9V2edzhdORPgIL14NTaUDIO4 OVBL0OOJ30PdIOE2THkNco31veVkMExZM8ju/ax0rPPdKxy6Ufky/oeT5I18DB8hPSpe Qnf/0i+Oq8AKzswv0KrEMf7dViP1WJW+41NINkayNUB48wyCNBNqp4COKFiOUkXPrNks IMFWZoT6ffvhfuHCwL0OQwN5XyTZH1TrAACW4X1AEJq8+oOBaGTfHC58WN+6JBNSkMjO L46g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741849082; x=1742453882; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rAMd6rGhip9Etdi0DcL12HaRjFlmNQeXSBT7tbE4ZZA=; b=jZ1K/y7jyd9SM7feLn75uUudtGvbsVNd7zlSvROlvG4UqtD6gMtFSjGk3dzR+s1tYq YZFa/0t/p39gEBQXLWN4Aorc14sLhiWPV+fXYdTGOiGFxzbB67t+kiu5sMbdy0LwAx/3 tka+aL3Wz+zik4bi2XgX/GQU7bJbJX64JjvtL63TfVka98uqxDXyIkn3D183fJ4kqq2S inuF5BdiFONU282j5jHNef04sNS0opkJpV2rHdnyE4qfdCFa7TFQh3ZAziRbNT4HuEQ5 voHW+hCEBfJ20fv9JFodp6v09m2rN0YG8AsJCt3H/L55yPzFNi0VEfdWoyQAV+o4v5Lx 6ylQ== X-Forwarded-Encrypted: i=1; AJvYcCUHjX7M99uAGYnU5jUgtYHHSoKDU026gVEDnzPIEE4u+p2L01jb0EpZq0vNDjvPzr6AE7ZscgwnSWPST5U=@vger.kernel.org X-Gm-Message-State: AOJu0YwL7GFOggcGuoTo5yrEuZR8H7UvBUbsCmC1ANRVI+l8p57ZjSNV RMazxnxasInI03JW/BfY0y8D0rzuFlWMLbVIjqPB0HqFusvenJbPrqc15soD/8o= X-Gm-Gg: ASbGncsGQ29P16ncRx7aixqQtMGtNY9Yb7l60xBReYrNdWiRf+P2RAzY+GHv+B1bsgl cDVsnLkaW83D/CRcWWpZEVzTBq2mAi8mDvMUj3D6xkYtpGFvPCMzmv0XVp7a/xDQdzHWwpJ8B9v kWjl1b2GKUl8N772f8h4Ec6eihMe4Su2C5a+LYvWQxB/8D9kaSoTAKg3kYZ56L8up2oqOluj6/d MRrOqbkoi9WKCTVPqsnIrWqCqivmIwMe6gWaih4HmbQFp2940AE6OQqLRw5UdH5W6ACSgCKIgD7 5i32bDfsoqckElvva9AlkvJv+4DwNGBJUZxZQ6D5QzFunO38 X-Google-Smtp-Source: AGHT+IGCLVrEGNjCO/QnspZOy0VKIly8ZUkVAApjFMGze7gowWxFFi+tM448yykvGdA29pKzg5pogw== X-Received: by 2002:a17:902:d2ca:b0:216:3d72:1712 with SMTP id d9443c01a7336-22428ad53e6mr379581645ad.48.1741849081724; Wed, 12 Mar 2025 23:58:01 -0700 (PDT) Received: from localhost ([157.82.205.237]) by smtp.gmail.com with UTF8SMTPSA id d9443c01a7336-225c6bd7bb4sm6378025ad.237.2025.03.12.23.57.58 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 12 Mar 2025 23:58:01 -0700 (PDT) From: Akihiko Odaki Date: Thu, 13 Mar 2025 15:57:42 +0900 Subject: [PATCH v4 1/7] KVM: arm64: PMU: Set raw values from user to PM{C,I}NTEN{SET,CLR}, PMOVS{SET,CLR} Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250313-pmc-v4-1-2c976827118c@daynix.com> References: <20250313-pmc-v4-0-2c976827118c@daynix.com> In-Reply-To: <20250313-pmc-v4-0-2c976827118c@daynix.com> To: Marc Zyngier , Oliver Upton , Joey Gouly , Suzuki K Poulose , Zenghui Yu , Catalin Marinas , Will Deacon , Andrew Jones Cc: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linux-kernel@vger.kernel.org, devel@daynix.com, Akihiko Odaki , stable@vger.kernel.org X-Mailer: b4 0.15-dev-edae6 Commit a45f41d754e0 ("KVM: arm64: Add {get,set}_user for PM{C,I}NTEN{SET,CLR}, PMOVS{SET,CLR}") changed KVM_SET_ONE_REG to update the mentioned registers in a way matching with the behavior of guest register writes. This is a breaking change of a UAPI though the new semantics looks cleaner and VMMs are not prepared for this. Firecracker, QEMU, and crosvm perform migration by listing registers with KVM_GET_REG_LIST, getting their values with KVM_GET_ONE_REG and setting them with KVM_SET_ONE_REG. This algorithm assumes KVM_SET_ONE_REG restores the values retrieved with KVM_GET_ONE_REG without any alteration. However, bit operations added by the earlier commit do not preserve the values retried with KVM_GET_ONE_REG and potentially break migration. Remove the bit operations that alter the values retrieved with KVM_GET_ONE_REG. Cc: stable@vger.kernel.org Fixes: a45f41d754e0 ("KVM: arm64: Add {get,set}_user for PM{C,I}NTEN{SET,CL= R}, PMOVS{SET,CLR}") Signed-off-by: Akihiko Odaki Acked-by: Marc Zyngier --- arch/arm64/kvm/sys_regs.c | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index 42791971f758..0a2ce931a946 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c @@ -1126,26 +1126,7 @@ static bool access_pmu_evtyper(struct kvm_vcpu *vcpu= , struct sys_reg_params *p, =20 static int set_pmreg(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r, = u64 val) { - bool set; - - val &=3D kvm_pmu_valid_counter_mask(vcpu); - - switch (r->reg) { - case PMOVSSET_EL0: - /* CRm[1] being set indicates a SET register, and CLR otherwise */ - set =3D r->CRm & 2; - break; - default: - /* Op2[0] being set indicates a SET register, and CLR otherwise */ - set =3D r->Op2 & 1; - break; - } - - if (set) - __vcpu_sys_reg(vcpu, r->reg) |=3D val; - else - __vcpu_sys_reg(vcpu, r->reg) &=3D ~val; - + __vcpu_sys_reg(vcpu, r->reg) =3D val & kvm_pmu_valid_counter_mask(vcpu); return 0; } =20 --=20 2.48.1 From nobody Sun Feb 8 11:25:36 2026 Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) (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 9356F1FBEBE for ; Thu, 13 Mar 2025 06:58:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741849088; cv=none; b=Vk/e7rOJDkQ5fes30tvJctVJQQmD4JvUHvpKJOJYdbFo4zKuhZrkoltSJ04rkFN2SmXlhyrzYxECz0sFltRLXtKcpBEAuMoPGLabNgyoD37Fk1TR/2AHYcvnek6wSNu7Sft+yn6HN+HYY1aMbLlbMktIjF+khWZo+SQ1dzj/N68= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741849088; c=relaxed/simple; bh=+7MGOulWYcTlLDw/DCCsYd1DVWMrJUiUcRqYbW+j+3Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FYpkgwxILhQxRSy2QXU1Ll2TzY4ntbQHzQe7kh7Hd3Frhylj65DFq/p6Ob7ncd7M+Qq4cqxmM01ji9NKTMX7P6iFXDM3nLddlYY1qxox5jjL6Gq17PkDiNvbgFiN76r7jdlg1uQnhkJMgDse0J3U/bDnPUZ9t6Nx8anltljMhVc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=daynix.com; spf=pass smtp.mailfrom=daynix.com; dkim=pass (2048-bit key) header.d=daynix-com.20230601.gappssmtp.com header.i=@daynix-com.20230601.gappssmtp.com header.b=Upwg6VC7; arc=none smtp.client-ip=209.85.214.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=daynix.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=daynix.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=daynix-com.20230601.gappssmtp.com header.i=@daynix-com.20230601.gappssmtp.com header.b="Upwg6VC7" Received: by mail-pl1-f173.google.com with SMTP id d9443c01a7336-2241053582dso15434195ad.1 for ; Wed, 12 Mar 2025 23:58:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1741849086; x=1742453886; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=emEcgI1IcFZcczsFk7v4KbqV5pyU76mkqQgr8+I1+js=; b=Upwg6VC7Fh/SJAGBTCUqxDvGCGaSNMCf0e/zOkmKVH8/u110fHSqL+DFbhhKGZipaG qq5uxE7WPR+v0xkM/pVCKRZBXRz36HlRYQqjMR/eIsMy2K/SgFKed2cw6x6WY3eS3CMu uCLavmFZ0TlrYeEgvIPaIlUXib9qg3+xBKWy5lzP0mU8lWH12N8+lH30/3J3dFEYQGIi dDyCFgA2gsWkCqRCTefMi5uy2F7elEnHO75u4OsQSidF0pef9kW6YJ47Zn55rBijt3Zk XnLPJdUJ29sS90vMtxRrD/CHjqVraphGb6Mzt41XtemwfvvJvr5DrCCaUB3k0CEP+d6U vY4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741849086; x=1742453886; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=emEcgI1IcFZcczsFk7v4KbqV5pyU76mkqQgr8+I1+js=; b=e0wn7vs8iD04TGZlELkgcz8RWEVoVyjLcgwxaO68d+Qq47IduQsBnUVibao+NGcKOq qZJCwhkSIGLCOxgQewd7mXZK8rIwcWHRPqMn9OeErdoN6+T04YVjAijaWlarqWFbk841 myB45ddMsMqSm5aR4e58loYuVvUUVcvUa5nd9xK2OovHXNTQZt/wda7X8YrP2jc1Jx7n 5ci3BWn+w7/1/j+G9lHTS4vD8SzbMg9lS/eSD5+flsp2xUcNjKUUjRiOL1REsF/oFP4e r670FtJBPOCNASuqK5iEe/hXocs1rUBgucT/1vOPLcHB/DvX/UIod+WEoYA/Qk+2Nytj sV8g== X-Forwarded-Encrypted: i=1; AJvYcCUb1Kr/y6GrgVaU67LCycwK6ocJj4t5H4p1f9gN9FiJm0HA9Z+AUK9FtkuuXlDjoHWpWIZCVqpW2jr89zM=@vger.kernel.org X-Gm-Message-State: AOJu0YxiHsV4jW/znKU7/92CSRir9tp9K+qnLdXoJfkzlpzS5OHMdFNF 28Jd5eIPCU50UL8Rq9ktb4paq4tdcKJ7PLvGQ+1PmHqy+YjMifBRTvzt+I5olSI= X-Gm-Gg: ASbGnctPTqhUFu+qiXCQmMuJpN6M/gU0QWcDO0kIHgCrYyyrHxjbxWXX/EU55AhZpUm UHaMWfQCnEXF7LT1qtBRvcgCA6oenoofzILxwH9u/vF7Q3fizdgnIPpRv/ZKoZ+pPGhp1Wd6wFQ XdnA8hL4SAhrlJulhJzrQiZJ9oqv2Fnya2gfncVWlcyrTk85/0QDmyF9iq1WH0vVc/TkxY1wZqF MfIMBP8ArVHOe8DoVersQHTT953MMcXSQWwaPI7+n8b9Ujkb5rzstI3/VZ3s33+n97vDASEoTRA 8eKKaYKcB0U3OyUDIwGNCBDjHpEfNvmHekqz7Tp3HOq2KFQ+ X-Google-Smtp-Source: AGHT+IEBQV8sxGuSmnbE6/nC9EVPLKg/DvEGA12lj+yaW9V3WHmb2Osqgs4iyFBmmenFAgCKYwG/xQ== X-Received: by 2002:a17:902:ce83:b0:21f:c67:a68a with SMTP id d9443c01a7336-22428a890c3mr411961125ad.31.1741849085952; Wed, 12 Mar 2025 23:58:05 -0700 (PDT) Received: from localhost ([157.82.205.237]) by smtp.gmail.com with UTF8SMTPSA id d9443c01a7336-225c6bd5ae4sm6400565ad.229.2025.03.12.23.58.03 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 12 Mar 2025 23:58:05 -0700 (PDT) From: Akihiko Odaki Date: Thu, 13 Mar 2025 15:57:43 +0900 Subject: [PATCH v4 2/7] KVM: arm64: PMU: Assume PMU presence in pmu-emul.c Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250313-pmc-v4-2-2c976827118c@daynix.com> References: <20250313-pmc-v4-0-2c976827118c@daynix.com> In-Reply-To: <20250313-pmc-v4-0-2c976827118c@daynix.com> To: Marc Zyngier , Oliver Upton , Joey Gouly , Suzuki K Poulose , Zenghui Yu , Catalin Marinas , Will Deacon , Andrew Jones Cc: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linux-kernel@vger.kernel.org, devel@daynix.com, Akihiko Odaki X-Mailer: b4 0.15-dev-edae6 Many functions in pmu-emul.c checks kvm_vcpu_has_pmu(vcpu). A favorable interpretation is defensive programming, but it also has downsides: - It is confusing as it implies these functions are called without PMU although most of them are called only when a PMU is present. - It makes semantics of functions fuzzy. For example, calling kvm_pmu_disable_counter_mask() without PMU may result in no-op as there are no enabled counters, but it's unclear what kvm_pmu_get_counter_value() returns when there is no PMU. - It allows callers without checking kvm_vcpu_has_pmu(vcpu), but it is often wrong to call these functions without PMU. - It is error-prone to duplicate kvm_vcpu_has_pmu(vcpu) checks into multiple functions. Many functions are called for system registers, and the system register infrastructure already employs less error-prone, comprehensive checks. Check kvm_vcpu_has_pmu(vcpu) in callers of these functions instead, and remove the obsolete checks from pmu-emul.c. The only exceptions are the functions that implement ioctls as they have definitive semantics even when the PMU is not present. Signed-off-by: Akihiko Odaki --- arch/arm64/kvm/arm.c | 8 +++++--- arch/arm64/kvm/pmu-emul.c | 25 +------------------------ arch/arm64/kvm/sys_regs.c | 6 ++++-- 3 files changed, 10 insertions(+), 29 deletions(-) diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c index f66ce098f03b..e375468a2217 100644 --- a/arch/arm64/kvm/arm.c +++ b/arch/arm64/kvm/arm.c @@ -834,9 +834,11 @@ int kvm_arch_vcpu_run_pid_change(struct kvm_vcpu *vcpu) if (ret) return ret; =20 - ret =3D kvm_arm_pmu_v3_enable(vcpu); - if (ret) - return ret; + if (kvm_vcpu_has_pmu(vcpu)) { + ret =3D kvm_arm_pmu_v3_enable(vcpu); + if (ret) + return ret; + } =20 if (is_protected_kvm_enabled()) { ret =3D pkvm_create_hyp_vm(kvm); diff --git a/arch/arm64/kvm/pmu-emul.c b/arch/arm64/kvm/pmu-emul.c index e3e82b66e226..3dd0b479c6fd 100644 --- a/arch/arm64/kvm/pmu-emul.c +++ b/arch/arm64/kvm/pmu-emul.c @@ -144,9 +144,6 @@ static u64 kvm_pmu_get_pmc_value(struct kvm_pmc *pmc) */ u64 kvm_pmu_get_counter_value(struct kvm_vcpu *vcpu, u64 select_idx) { - if (!kvm_vcpu_has_pmu(vcpu)) - return 0; - return kvm_pmu_get_pmc_value(kvm_vcpu_idx_to_pmc(vcpu, select_idx)); } =20 @@ -185,9 +182,6 @@ static void kvm_pmu_set_pmc_value(struct kvm_pmc *pmc, = u64 val, bool force) */ void kvm_pmu_set_counter_value(struct kvm_vcpu *vcpu, u64 select_idx, u64 = val) { - if (!kvm_vcpu_has_pmu(vcpu)) - return; - kvm_pmu_set_pmc_value(kvm_vcpu_idx_to_pmc(vcpu, select_idx), val, false); } =20 @@ -289,8 +283,6 @@ u64 kvm_pmu_valid_counter_mask(struct kvm_vcpu *vcpu) void kvm_pmu_enable_counter_mask(struct kvm_vcpu *vcpu, u64 val) { int i; - if (!kvm_vcpu_has_pmu(vcpu)) - return; =20 if (!(kvm_vcpu_read_pmcr(vcpu) & ARMV8_PMU_PMCR_E) || !val) return; @@ -324,7 +316,7 @@ void kvm_pmu_disable_counter_mask(struct kvm_vcpu *vcpu= , u64 val) { int i; =20 - if (!kvm_vcpu_has_pmu(vcpu) || !val) + if (!val) return; =20 for (i =3D 0; i < KVM_ARMV8_PMU_MAX_COUNTERS; i++) { @@ -357,9 +349,6 @@ static void kvm_pmu_update_state(struct kvm_vcpu *vcpu) struct kvm_pmu *pmu =3D &vcpu->arch.pmu; bool overflow; =20 - if (!kvm_vcpu_has_pmu(vcpu)) - return; - overflow =3D !!kvm_pmu_overflow_status(vcpu); if (pmu->irq_level =3D=3D overflow) return; @@ -555,9 +544,6 @@ void kvm_pmu_handle_pmcr(struct kvm_vcpu *vcpu, u64 val) { int i; =20 - if (!kvm_vcpu_has_pmu(vcpu)) - return; - /* Fixup PMCR_EL0 to reconcile the PMU version and the LP bit */ if (!kvm_has_feat(vcpu->kvm, ID_AA64DFR0_EL1, PMUVer, V3P5)) val &=3D ~ARMV8_PMU_PMCR_LP; @@ -696,9 +682,6 @@ void kvm_pmu_set_counter_event_type(struct kvm_vcpu *vc= pu, u64 data, struct kvm_pmc *pmc =3D kvm_vcpu_idx_to_pmc(vcpu, select_idx); u64 reg; =20 - if (!kvm_vcpu_has_pmu(vcpu)) - return; - reg =3D counter_index_to_evtreg(pmc->idx); __vcpu_sys_reg(vcpu, reg) =3D data & kvm_pmu_evtyper_mask(vcpu->kvm); =20 @@ -804,9 +787,6 @@ u64 kvm_pmu_get_pmceid(struct kvm_vcpu *vcpu, bool pmce= id1) u64 val, mask =3D 0; int base, i, nr_events; =20 - if (!kvm_vcpu_has_pmu(vcpu)) - return 0; - if (!pmceid1) { val =3D compute_pmceid0(cpu_pmu); base =3D 0; @@ -847,9 +827,6 @@ void kvm_vcpu_reload_pmu(struct kvm_vcpu *vcpu) =20 int kvm_arm_pmu_v3_enable(struct kvm_vcpu *vcpu) { - if (!kvm_vcpu_has_pmu(vcpu)) - return 0; - if (!vcpu->arch.pmu.created) return -EINVAL; =20 diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index 0a2ce931a946..6e75557bea1d 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c @@ -1784,12 +1784,14 @@ static int set_id_aa64dfr0_el1(struct kvm_vcpu *vcp= u, static u64 read_sanitised_id_dfr0_el1(struct kvm_vcpu *vcpu, const struct sys_reg_desc *rd) { - u8 perfmon =3D pmuver_to_perfmon(kvm_arm_pmu_get_pmuver_limit()); + u8 perfmon; u64 val =3D read_sanitised_ftr_reg(SYS_ID_DFR0_EL1); =20 val &=3D ~ID_DFR0_EL1_PerfMon_MASK; - if (kvm_vcpu_has_pmu(vcpu)) + if (kvm_vcpu_has_pmu(vcpu)) { + perfmon =3D pmuver_to_perfmon(kvm_arm_pmu_get_pmuver_limit()); val |=3D SYS_FIELD_PREP(ID_DFR0_EL1, PerfMon, perfmon); + } =20 val =3D ID_REG_LIMIT_FIELD_ENUM(val, ID_DFR0_EL1, CopDbg, Debugv8p8); =20 --=20 2.48.1 From nobody Sun Feb 8 11:25:36 2026 Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) (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 D58251FC0FF for ; Thu, 13 Mar 2025 06:58:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741849092; cv=none; b=hy8+3xArpG5lcB/LwwtKwnYcFivvSusSCeQh2uHcnAMNf9yvguyRyiwc/6xAlaDQoM3YEsOyewDegmXkaF0SdnVzdoJKKShtKL+x2MlxJ/YNfEMwUqtO8d8GaYBCSojzrp2GZKn7waU5fG9W9/wDzJ50RWRdwuXJ3T27egrat5w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741849092; c=relaxed/simple; bh=IJXHD7sx8FOQ/TCbz0hTrjmBv+Lvr54IEhabSGoOnKU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=UPY9HsobV+yXC2GeyTcCIIbQwyw4e1OKAQJkmweUlAUA2/77jqn6tDzpwU3V7+JkvYXjVE/r5jyH9Lz/gx4ba3knp1GSOoLk0Z2G/RsHNuFN2pREopGVBdWh7T1DSJvgA1WmKCdgZ6mY/C+8KoGQm+egzQKhkLKwp04c2Dns8qQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=daynix.com; spf=pass smtp.mailfrom=daynix.com; dkim=pass (2048-bit key) header.d=daynix-com.20230601.gappssmtp.com header.i=@daynix-com.20230601.gappssmtp.com header.b=109+J2OL; arc=none smtp.client-ip=209.85.214.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=daynix.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=daynix.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=daynix-com.20230601.gappssmtp.com header.i=@daynix-com.20230601.gappssmtp.com header.b="109+J2OL" Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-223f4c06e9fso11001785ad.1 for ; Wed, 12 Mar 2025 23:58:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1741849090; x=1742453890; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=i6iz2Tb4ku//H3AxfAexQ9B2Bw11aMopngIm2weGw1M=; b=109+J2OLKk5wJOik8w1QZw76hoQCU1oJNMTDXnjW2OhC9D+4n+WjQ3NkllY18b13ld QSu3MIhcu08mkp6OWOG7lMxTPaIWrqXqDB/YufawzSKDwFLrgIBJwZtmAQhevgE7jiBk /mktNhp3x8D3C+/W4DHJ+me3T2wRXttm2G9CsBI2iqwqWidqFX6Groa6avRhN6zRJi5J FNsX/CvLTtcXOsf7oFuloa9ZBYSXa6zpYGKAhozxxB+zVBGRw2hsr05yNOiyBYZVqdzR boaVsaY8n9bM6l/tGZS7MZWCnvFjU2VKhVW9mE3Pd6hkKxrAQ94bBvEiVTjXuSXWZqsb yZkg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741849090; x=1742453890; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=i6iz2Tb4ku//H3AxfAexQ9B2Bw11aMopngIm2weGw1M=; b=VH5WTD09f0qgy3nPOW5RPAiFTBJXXELekzkHE3ZE1sPczX5RuiUJglwr4wcBViRYc8 FXjIpiRK7rvLh0D0GAEIMrHQQV/2e+Nri3cWlJSFBFGpXTH/RrPOydo4LV/GoF4A4zbH thsROG0QnY3/U52Cuy2AP3ksr9ZfEEk/Ng1+N8hsw+xJKTpmDbWloaBiQXKcx4QGvdqD oGN1BOuaG1JP6kDEv5BtL4wewBp9koNTmzKl1KGi1xI8q0WUWB5+IaeZvGy1hGmNYCso qQlj0ZnDwJX5xQLm6YDRCFqjWS+5u3GGy1gn7Ra5rozJ93KODejHurkoxHZw1VaAInNc huhQ== X-Forwarded-Encrypted: i=1; AJvYcCVGIkS/81yJnUCzPSbX+vDUyioea0MaWuM2SmXAY6EZVdsDezfrK99BUdlUiPrHlaJEdSEbJHTuOzpidxA=@vger.kernel.org X-Gm-Message-State: AOJu0YyQ9q7ugWLiDuLPJdKqcYCxg2515f5MoMkZsVXMvcZlitMm6wvz QSyiu7SnQH8HalymXsTe9eyEKZzuzu1KJkilRVu+A03QXaEfuEy+tZR/SUkr+7g= X-Gm-Gg: ASbGncvqFhAxj6l66uOX7PEOEE5p2H27RO9kt6NAPzXgNyYNMjyFKpHLCLdT6aLAeFC rWCJeYVbJMcn+Y60o71IhdBhUVRljPiBCpvRnG/vp2xIPCFufPVXrI5+AFgnzc6i8J0rtGFqLpT yb6jiUX017f/xieIK+gOHa3ZxXLNfSoze1WgztJtYO9/fVvIt/3iAtSGcJxkVcSTPBHypVFHzAC oDEv2VNJ029/FH2hH9GdDuuWWoqdQhECxy+8N36hVNCLZbDyh0LW/dn35joFvOT0CG//Aq6JtqF vlSxATVIYvhLhgRfRYW0ng/gt68njiFHUmWyneb64FzwKHHO X-Google-Smtp-Source: AGHT+IE5NpWqZ+PooCqPvK48p4HWbGtSfd6lTwIKoKKHaXf2OMgXMo53qPDLD1AgcAjnRYmc4YTHGw== X-Received: by 2002:a17:902:d2c6:b0:215:742e:5cff with SMTP id d9443c01a7336-225c6672ca0mr23251545ad.16.1741849090214; Wed, 12 Mar 2025 23:58:10 -0700 (PDT) Received: from localhost ([157.82.205.237]) by smtp.gmail.com with UTF8SMTPSA id d9443c01a7336-225c6bbe960sm6398075ad.200.2025.03.12.23.58.07 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 12 Mar 2025 23:58:09 -0700 (PDT) From: Akihiko Odaki Date: Thu, 13 Mar 2025 15:57:44 +0900 Subject: [PATCH v4 3/7] KVM: arm64: PMU: Fix SET_ONE_REG for vPMC regs Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250313-pmc-v4-3-2c976827118c@daynix.com> References: <20250313-pmc-v4-0-2c976827118c@daynix.com> In-Reply-To: <20250313-pmc-v4-0-2c976827118c@daynix.com> To: Marc Zyngier , Oliver Upton , Joey Gouly , Suzuki K Poulose , Zenghui Yu , Catalin Marinas , Will Deacon , Andrew Jones Cc: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linux-kernel@vger.kernel.org, devel@daynix.com, Akihiko Odaki X-Mailer: b4 0.15-dev-edae6 Reload the perf event when setting the vPMU counter (vPMC) registers (PMCCNTR_EL0 and PMEVCNTR_EL0). This is a change corresponding to commit 9228b26194d1 ("KVM: arm64: PMU: Fix GET_ONE_REG for vPMC regs to return the current value") but for SET_ONE_REG. Values of vPMC registers are saved in sysreg files on certain occasions. These saved values don't represent the current values of the vPMC registers if the perf events for the vPMCs count events after the save. The current values of those registers are the sum of the sysreg file value and the current perf event counter value. But, when userspace writes those registers (using KVM_SET_ONE_REG), KVM only updates the sysreg file value and leaves the current perf event counter value as is. It is also important to keep the correct state even if userspace writes them after first run, specifically when debugging Windows on QEMU with GDB; QEMU tries to write back all visible registers when resuming the VM execution with GDB, corrupting the PMU state. Windows always uses the PMU so this can cause adverse effects on that particular OS. Fix this by releasing the current perf event and trigger recreating one with KVM_REQ_RELOAD_PMU. Fixes: 051ff581ce70 ("arm64: KVM: Add access handler for event counter regi= ster") Signed-off-by: Akihiko Odaki --- arch/arm64/kvm/pmu-emul.c | 13 +++++++++++++ arch/arm64/kvm/sys_regs.c | 20 +++++++++++++++++++- include/kvm/arm_pmu.h | 1 + 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/arch/arm64/kvm/pmu-emul.c b/arch/arm64/kvm/pmu-emul.c index 3dd0b479c6fd..1b91e5188d52 100644 --- a/arch/arm64/kvm/pmu-emul.c +++ b/arch/arm64/kvm/pmu-emul.c @@ -185,6 +185,19 @@ void kvm_pmu_set_counter_value(struct kvm_vcpu *vcpu, = u64 select_idx, u64 val) kvm_pmu_set_pmc_value(kvm_vcpu_idx_to_pmc(vcpu, select_idx), val, false); } =20 +/** + * kvm_pmu_set_counter_value_user - set PMU counter value from user + * @vcpu: The vcpu pointer + * @select_idx: The counter index + * @val: The counter value + */ +void kvm_pmu_set_counter_value_user(struct kvm_vcpu *vcpu, u64 select_idx,= u64 val) +{ + kvm_pmu_release_perf_event(kvm_vcpu_idx_to_pmc(vcpu, select_idx)); + __vcpu_sys_reg(vcpu, counter_index_to_reg(select_idx)) =3D val; + kvm_make_request(KVM_REQ_RELOAD_PMU, vcpu); +} + /** * kvm_pmu_release_perf_event - remove the perf event * @pmc: The PMU counter pointer diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index 6e75557bea1d..26182cae4ac7 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c @@ -1035,6 +1035,22 @@ static int get_pmu_evcntr(struct kvm_vcpu *vcpu, con= st struct sys_reg_desc *r, return 0; } =20 +static int set_pmu_evcntr(struct kvm_vcpu *vcpu, const struct sys_reg_desc= *r, + u64 val) +{ + u64 idx; + + if (r->CRn =3D=3D 9 && r->CRm =3D=3D 13 && r->Op2 =3D=3D 0) + /* PMCCNTR_EL0 */ + idx =3D ARMV8_PMU_CYCLE_IDX; + else + /* PMEVCNTRn_EL0 */ + idx =3D ((r->CRm & 3) << 3) | (r->Op2 & 7); + + kvm_pmu_set_counter_value_user(vcpu, idx, val); + return 0; +} + static bool access_pmu_evcntr(struct kvm_vcpu *vcpu, struct sys_reg_params *p, const struct sys_reg_desc *r) @@ -1309,6 +1325,7 @@ static int set_pmcr(struct kvm_vcpu *vcpu, const stru= ct sys_reg_desc *r, #define PMU_PMEVCNTR_EL0(n) \ { PMU_SYS_REG(PMEVCNTRn_EL0(n)), \ .reset =3D reset_pmevcntr, .get_user =3D get_pmu_evcntr, \ + .set_user =3D set_pmu_evcntr, \ .access =3D access_pmu_evcntr, .reg =3D (PMEVCNTR0_EL0 + n), } =20 /* Macro to expand the PMEVTYPERn_EL0 register */ @@ -2665,7 +2682,8 @@ static const struct sys_reg_desc sys_reg_descs[] =3D { .access =3D access_pmceid, .reset =3D NULL }, { PMU_SYS_REG(PMCCNTR_EL0), .access =3D access_pmu_evcntr, .reset =3D reset_unknown, - .reg =3D PMCCNTR_EL0, .get_user =3D get_pmu_evcntr}, + .reg =3D PMCCNTR_EL0, .get_user =3D get_pmu_evcntr, + .set_user =3D set_pmu_evcntr }, { PMU_SYS_REG(PMXEVTYPER_EL0), .access =3D access_pmu_evtyper, .reset =3D NULL }, { PMU_SYS_REG(PMXEVCNTR_EL0), diff --git a/include/kvm/arm_pmu.h b/include/kvm/arm_pmu.h index 28b380ad8dfa..9c062756ebfa 100644 --- a/include/kvm/arm_pmu.h +++ b/include/kvm/arm_pmu.h @@ -41,6 +41,7 @@ bool kvm_supports_guest_pmuv3(void); #define kvm_arm_pmu_irq_initialized(v) ((v)->arch.pmu.irq_num >=3D VGIC_NR= _SGIS) u64 kvm_pmu_get_counter_value(struct kvm_vcpu *vcpu, u64 select_idx); void kvm_pmu_set_counter_value(struct kvm_vcpu *vcpu, u64 select_idx, u64 = val); +void kvm_pmu_set_counter_value_user(struct kvm_vcpu *vcpu, u64 select_idx,= u64 val); u64 kvm_pmu_valid_counter_mask(struct kvm_vcpu *vcpu); u64 kvm_pmu_get_pmceid(struct kvm_vcpu *vcpu, bool pmceid1); void kvm_pmu_vcpu_init(struct kvm_vcpu *vcpu); --=20 2.48.1 From nobody Sun Feb 8 11:25:36 2026 Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) (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 2BEFE1FC7C8 for ; Thu, 13 Mar 2025 06:58:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741849096; cv=none; b=G70Sncc+obGyGn2EpNPO4WZ7gSkAcZXyNuPh0lIW2c0gohKVI9+b7UlbX7Q/mOiJwQ98wp/A/64FgPRFcwGNLEqFu8cqdQCeUU/UxCILkzw7oXidamtFg5uIQspOfBTliFrP7OZe1zTpFF5qQkptgJxHdhOI6YdbbmPj5JoTCog= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741849096; c=relaxed/simple; bh=F3X6D6K8/IleFxaVTYcfc5YrfdKG3utxmjKEiJ5rrmY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=VqsPjEeKv/yux71O0v28FD0qR2I32GEEEVk9vXVnJBtV1CS/WDfdAz+MAUQ3BPrVd9OYJwbZsm8RXLiD9ISKPXt0Ml9pl2TmQruCGtV+m0/xafxSQcoEUur7NfRcKeJWPyjsvWJgfnsBM7Pn7I3SWsE4wm4L4gvtkYN+2ImHUyk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=daynix.com; spf=pass smtp.mailfrom=daynix.com; dkim=pass (2048-bit key) header.d=daynix-com.20230601.gappssmtp.com header.i=@daynix-com.20230601.gappssmtp.com header.b=2G3zVrgq; arc=none smtp.client-ip=209.85.214.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=daynix.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=daynix.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=daynix-com.20230601.gappssmtp.com header.i=@daynix-com.20230601.gappssmtp.com header.b="2G3zVrgq" Received: by mail-pl1-f173.google.com with SMTP id d9443c01a7336-2241053582dso15436605ad.1 for ; Wed, 12 Mar 2025 23:58:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1741849094; x=1742453894; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=ov1QC08xmBeOUCrm+sZTVT7zWaIK1Z9CIL8k0jXnjDA=; b=2G3zVrgqqJda4DwEu5al4kFEA+scGHPfYiLWgRXflNZFLCvqavyMwzdvk2f9CvwP6J pFPvWbg+bZ3b8mJ+uKoOAmTpp2piwCQyyeX9ZcvlcnVtXke5+pn/ceNTgyFS1WS/VMBm hxTXjOgiGz+Ks8aZuKfQuesUsz+2EcbckYWKhydx0dIZ8UnZHbjxR9ESYqoKj4RbcqP1 22IsvZb2qHdGMRRhAZ6BosMYdUmd+BUQ2E51JEY4XBm3xn+RxAWAq+DylFoo+uUEHAWY KWIXD6eAR6K1trJ7Qxvp9qbrHCSOem4Dz+N/ogyxQG0m4WmJV3BxH8oGx//1LMHn7e/V Ba7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741849094; x=1742453894; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ov1QC08xmBeOUCrm+sZTVT7zWaIK1Z9CIL8k0jXnjDA=; b=f0PI5JjQ0XlhVqDlW8VEmh+TapI0Olld27qnko9I0z1JDKyfJf/m9sSdeADwptExcE H3F/6MJymD484qNlWQVlFGEbvGOvJVrnIIcYspt39kgsc1dYY1AdUTrQo0rAedEiNauN /IA4XdJn+SbZFw3jkJE0AcJKUFMgk8TRjcl+v5B16fe2q1XaPEbH7qpCjSJEkFLbht85 auhCLq+49crSm6fhvQEN6I5m+ad+ri250jWUaLYo7j3x6zOhjv2FbiSb1de2jV8pvYt0 +e59U/6xtl9fT5fqV3C61KESHMHWiT9+d5RdmB3N69R5O82P1azuuAu2DFqJ12WDdKCD 32UQ== X-Forwarded-Encrypted: i=1; AJvYcCW7qtrZ2Dl+c3c347kQQEfCti8+RnGUMcJFFpNzA05aprvv7DUwmhXpGL7PgExVXgrWZGbHJ70zdmImTi8=@vger.kernel.org X-Gm-Message-State: AOJu0YyMxrr5Myu2bdd55bAWN0QCGEI3km9zWuBIZcmMgxUmhD9rjkPV Eqy3Q6GT+ID4ZfXNbFbNNdKFVEUnvR7KWCLH0ywUvXmuzpMFvhFWZ2eNDIkkfc8= X-Gm-Gg: ASbGncuC94jmQKgLggR7/8MDakwbmL45NDaBt87i2uvVO5l5XGUnnDjkrQVgXTKGcxv enK7dDz0Y68ObppAxU09lMDy5D5VP4dOmV63m2tfJH0sR5qHymctaYDEFMmROvB93vS1DqtFqRC LiOo4K9qEudcE3VK7s6ffWL8Jyo8PUZ97a7a2nqAjz9NMYsbpr8ydmhjtjn0zbqY4aZoEcxElte IH8hid4V7MuP4hhK9LX/iEEebe21TQO5Ew4Hxy1IGgf6j4PAiGfIohdI7Y9c6E7XuVSVayd+SJY rQiUvbXTij0edZSv6ei86+HhBDK6Q6jpXJYsMX+ozyXP10bE X-Google-Smtp-Source: AGHT+IFPWy7B2BUY2WAUGm0CDCmAcyU/PA9aOMoalJWaDBeBLNlBGUj9py5eigGDQ0JyyV1QjpJmAw== X-Received: by 2002:aa7:88c6:0:b0:736:34a2:8a18 with SMTP id d2e1a72fcca58-736aaadf9c1mr39387147b3a.24.1741849094416; Wed, 12 Mar 2025 23:58:14 -0700 (PDT) Received: from localhost ([157.82.205.237]) by smtp.gmail.com with UTF8SMTPSA id d2e1a72fcca58-7371167df97sm627290b3a.114.2025.03.12.23.58.11 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 12 Mar 2025 23:58:14 -0700 (PDT) From: Akihiko Odaki Date: Thu, 13 Mar 2025 15:57:45 +0900 Subject: [PATCH v4 4/7] KVM: arm64: PMU: Reload when user modifies registers Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250313-pmc-v4-4-2c976827118c@daynix.com> References: <20250313-pmc-v4-0-2c976827118c@daynix.com> In-Reply-To: <20250313-pmc-v4-0-2c976827118c@daynix.com> To: Marc Zyngier , Oliver Upton , Joey Gouly , Suzuki K Poulose , Zenghui Yu , Catalin Marinas , Will Deacon , Andrew Jones Cc: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linux-kernel@vger.kernel.org, devel@daynix.com, Akihiko Odaki X-Mailer: b4 0.15-dev-edae6 Commit d0c94c49792c ("KVM: arm64: Restore PMU configuration on first run") added the code to reload the PMU configuration on first run. It is also important to keep the correct state even if system registers are modified after first run, specifically when debugging Windows on QEMU with GDB; QEMU tries to write back all visible registers when resuming the VM execution with GDB, corrupting the PMU state. Windows always uses the PMU so this can cause adverse effects on that particular OS. The usual register writes and reset are already handled independently, but register writes from userspace are not covered. Trigger the code to reload the PMU configuration for them instead so that PMU configuration changes made by users will be applied also after the first run. Signed-off-by: Akihiko Odaki --- arch/arm64/kvm/pmu-emul.c | 3 --- arch/arm64/kvm/sys_regs.c | 3 +++ 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/arm64/kvm/pmu-emul.c b/arch/arm64/kvm/pmu-emul.c index 1b91e5188d52..3ed8b74d9925 100644 --- a/arch/arm64/kvm/pmu-emul.c +++ b/arch/arm64/kvm/pmu-emul.c @@ -862,9 +862,6 @@ int kvm_arm_pmu_v3_enable(struct kvm_vcpu *vcpu) return -EINVAL; } =20 - /* One-off reload of the PMU on first run */ - kvm_make_request(KVM_REQ_RELOAD_PMU, vcpu); - return 0; } =20 diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index 26182cae4ac7..11718c635e2f 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c @@ -1143,6 +1143,7 @@ static bool access_pmu_evtyper(struct kvm_vcpu *vcpu,= struct sys_reg_params *p, static int set_pmreg(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r, = u64 val) { __vcpu_sys_reg(vcpu, r->reg) =3D val & kvm_pmu_valid_counter_mask(vcpu); + kvm_make_request(KVM_REQ_RELOAD_PMU, vcpu); return 0; } =20 @@ -1303,6 +1304,8 @@ static int set_pmcr(struct kvm_vcpu *vcpu, const stru= ct sys_reg_desc *r, val |=3D ARMV8_PMU_PMCR_LC; =20 __vcpu_sys_reg(vcpu, r->reg) =3D val; + kvm_make_request(KVM_REQ_RELOAD_PMU, vcpu); + return 0; } =20 --=20 2.48.1 From nobody Sun Feb 8 11:25:36 2026 Received: from mail-pj1-f45.google.com (mail-pj1-f45.google.com [209.85.216.45]) (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 096321FBE8E for ; Thu, 13 Mar 2025 06:58:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741849102; cv=none; b=r515m7AHkvLJ6EoBlfd5gwibCCVIAshl2QW8qokieVh50HUf7b5p6w6K8bt9XWBJXI0Je2Km4/yuzkP4XsuK0D/oYfUNxXn1Sara1Qv1oAh8w9826dkDJMkAa0vDjgt3JWnuAIb3WPoPyHSu2XENwVFtkRhSR79Qyr6DArr6MUk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741849102; c=relaxed/simple; bh=Tj645q9eNem2mWG0f9T8+quM62XYJmnNKPTtUs1bzek=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dHizlAjy4q8ilStTfFIe84hBSgTpq5mNFd1rTxZ9IZxytnYl0KMfnSKsRBTULwG/8MkKqDOrxBSQj9qECixI5EPrYsvoSFPScKHAt/bbofOZwk7wgnW0furoq5YJ5u00mmEN4N5uzZjqDRHvcHQPlC05yTmdiE913fn+GS0WQt4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=daynix.com; spf=pass smtp.mailfrom=daynix.com; dkim=pass (2048-bit key) header.d=daynix-com.20230601.gappssmtp.com header.i=@daynix-com.20230601.gappssmtp.com header.b=ofdEWQJY; arc=none smtp.client-ip=209.85.216.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=daynix.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=daynix.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=daynix-com.20230601.gappssmtp.com header.i=@daynix-com.20230601.gappssmtp.com header.b="ofdEWQJY" Received: by mail-pj1-f45.google.com with SMTP id 98e67ed59e1d1-2f42992f608so1226227a91.0 for ; Wed, 12 Mar 2025 23:58:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1741849099; x=1742453899; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=dV52GHaIMEPgQHguZuBTFzmZYTI1o5W7vkJBLWdUl1Q=; b=ofdEWQJYmc3hZHVaZ3Vq+tq4+nkL5r5FB3o6ZWB8LsO4UnXz9dTwvcDys1yswW3jbn j3HApxea8zenAsO8eVxwfZQRObDInnGfVwWnalSa9qsGZXki8q45I4oYw44RAF4F4eem kY1Pq37/PC3Ollzyz7Y3IvdX7BENNN7MGKnyHvAmqrlCI5N/SP8Z9Aqy40CNG1/N/eP/ SNEoplj0MGCOSqZ+TS9NUgYGrxEyKjkrnUwYSpnSnVPk4YZ05IlH+ViGDQC5bmV7qAcM hzzh0JahM6ik/mR+FyWSqA+Oj0g2iAk2IFMF5cs8Hgqru2EJamgSOgmMBVVhUibc3bQ7 +iog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741849099; x=1742453899; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=dV52GHaIMEPgQHguZuBTFzmZYTI1o5W7vkJBLWdUl1Q=; b=C99hL5Cj/n/i44TaFAD4iR49HkvlYtoGFP8F9T0Rh1oos4StxgvabapH4ae9hp1nOO WaHhPKKk/mvWBu4wFBowt7MT7DbXX/IeVjpEjZ6gNO97wy88Yz/SxYNc9MJ0W+pxeBTC qsWt5uQXBxnbmfjAGBmXsDTKFp9w3JDKpAo4hNEK18teOLo9OjDd32R8cHzuQgwqhTs0 q2r8w5tan1d76AJEl+TQyAGOs4wjjpRRLBv8kpUTmBYOem+AEyGmgKlMOmglRBm/7VIc KjDFQUjd4Vs0cITYfQzfU+O9J0nrMwgNlhiUIKed69573uaEUGxHgmQuStkoJSqXcZdR MCZw== X-Forwarded-Encrypted: i=1; AJvYcCVY697f4xdtRpUprKxSVAMFyZme7pygg5KvuKMFfrQrRJT9hmhjK6TY74WJaHy0h4XpWmnu1kKDrAIGKTY=@vger.kernel.org X-Gm-Message-State: AOJu0YzI0cTvMyzN0ySSVevGogFn4OiAiDbT9pIBwaIazvfrhyXI4PBS zlnB4HQikg24JnUs+MUGLnNBNSsT0dhAPRj3VHYhfJjckRIXLXkZRVhjROzChdM= X-Gm-Gg: ASbGncs66nu4SY54Se4DMpdk+CBcz2gPSYYiJY4mzB7rdW8UO3Gf73X/pmkyicZdUNF 4/z0+kwwQN35RZ2VhNSNW9FqDSwvHcOR3tnrG8LhkzAHqIiXc4BP2kinqd29emd8LXtHaCtENFu OBVU/26M90x0p4ZOWx7eMF0iZ6LfyuptwEsXkpswOoifsQq4xmOTa2CKRUCdb570qilQ0ZNzN4T Nc54B3l1+mTzodr9DTn2kKtF5lwTGxLgisISt5CnuHfFewVo4X+IXl23WKVOHbNu5DVLjk319bq y0uWrtWegPWbDrIml1DmphgKjyXNWWGFrKUtvYq1beSYMJ70 X-Google-Smtp-Source: AGHT+IEdM86wLdPa/J6rG1pbebGy/mfNmQe+uLQUEr6OB03UsH6Ds/Qp3ZpxLVj4ahH7YgLID6TR2g== X-Received: by 2002:a17:90b:4ad0:b0:2ff:6fc3:79c4 with SMTP id 98e67ed59e1d1-2ff7cef5cdamr34627616a91.27.1741849099153; Wed, 12 Mar 2025 23:58:19 -0700 (PDT) Received: from localhost ([157.82.205.237]) by smtp.gmail.com with UTF8SMTPSA id 98e67ed59e1d1-30138b5d229sm610894a91.22.2025.03.12.23.58.16 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 12 Mar 2025 23:58:18 -0700 (PDT) From: Akihiko Odaki Date: Thu, 13 Mar 2025 15:57:46 +0900 Subject: [PATCH v4 5/7] KVM: arm64: PMU: Call kvm_pmu_handle_pmcr() after masking PMCNTENSET_EL0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250313-pmc-v4-5-2c976827118c@daynix.com> References: <20250313-pmc-v4-0-2c976827118c@daynix.com> In-Reply-To: <20250313-pmc-v4-0-2c976827118c@daynix.com> To: Marc Zyngier , Oliver Upton , Joey Gouly , Suzuki K Poulose , Zenghui Yu , Catalin Marinas , Will Deacon , Andrew Jones Cc: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linux-kernel@vger.kernel.org, devel@daynix.com, Akihiko Odaki X-Mailer: b4 0.15-dev-edae6 kvm_pmu_handle_pmcr() expects PMCNTENSET_EL0 only contains valid counters. Signed-off-by: Akihiko Odaki --- arch/arm64/kvm/pmu-emul.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/arm64/kvm/pmu-emul.c b/arch/arm64/kvm/pmu-emul.c index 3ed8b74d9925..461c76a9cb6b 100644 --- a/arch/arm64/kvm/pmu-emul.c +++ b/arch/arm64/kvm/pmu-emul.c @@ -831,11 +831,11 @@ void kvm_vcpu_reload_pmu(struct kvm_vcpu *vcpu) { u64 mask =3D kvm_pmu_valid_counter_mask(vcpu); =20 - kvm_pmu_handle_pmcr(vcpu, kvm_vcpu_read_pmcr(vcpu)); - __vcpu_sys_reg(vcpu, PMOVSSET_EL0) &=3D mask; __vcpu_sys_reg(vcpu, PMINTENSET_EL1) &=3D mask; __vcpu_sys_reg(vcpu, PMCNTENSET_EL0) &=3D mask; + + kvm_pmu_handle_pmcr(vcpu, kvm_vcpu_read_pmcr(vcpu)); } =20 int kvm_arm_pmu_v3_enable(struct kvm_vcpu *vcpu) --=20 2.48.1 From nobody Sun Feb 8 11:25:36 2026 Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) (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 605311FBEAF for ; Thu, 13 Mar 2025 06:58:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741849105; cv=none; b=fnaxckjv0TR9zauJ2ic5ltXLVdnsG946jcbaRWG3ChZkHz4kpovYV/Y+TMUua5NEqoiVrXlf9/MKHEXaBHK5mtEsUEy0SRdwi5x5le0L/GD4zrAiL7pOMbuOCg94MeiKXecUsPHh9eLT9vHP1CcnuHBixojqFLoK5Jlu9xkBpA0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741849105; c=relaxed/simple; bh=lyrf4f3kvKG7BFrUmhjOGbMpwkOJI6N2LuTWXvsNpQo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ImGyYrUrBUssWwnpUVnFp5HWgJnUYW207CkRewgJp+phn1amPEfzZx2aMApG+zL2mwrVZ66PV59Npt9K7rp/GJ9Mka35eMxAznYQEcRQRuBZKSDbys5qwNy8GtzScThXpCddtt5Bh83AnSfi7jSmbVnEfIF9eJv+4OKeOy1nPzw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=daynix.com; spf=pass smtp.mailfrom=daynix.com; dkim=pass (2048-bit key) header.d=daynix-com.20230601.gappssmtp.com header.i=@daynix-com.20230601.gappssmtp.com header.b=HSeuhmkh; arc=none smtp.client-ip=209.85.214.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=daynix.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=daynix.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=daynix-com.20230601.gappssmtp.com header.i=@daynix-com.20230601.gappssmtp.com header.b="HSeuhmkh" Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-22349bb8605so12174285ad.0 for ; Wed, 12 Mar 2025 23:58:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1741849103; x=1742453903; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=NkHO/0se169XNtMWH0w7f9TQn0BTGs8vu96SI051qqc=; b=HSeuhmkh8YG2gSna2gUTsx6LE2iae1IxogJcWkaAT39Bce+rcoUgPNvY3BxK30YRSD 8jBDwAUlxOasFB/o0FwyUC7fTRApFDHGmAhGSQr+wNkhVeWoZxf/W4SMBeUqECebr0qe EIs6XrPcRNkMqQskoX9GCkJQYjjlMYSawgT4NPRA3FvjjD13dLHaqUV2ortWEocyM5Ol 6iuSU1I45HxSDYyhunfspRhSjvbf1QrMJGwXZAl3U+HrK5VQW0i+ciilxNjmHfNmL0k4 Ywl7p8TXOmRUjbm0/dAIpovrr4TGWjpy5irzHU50HhWjGM4X6CiKwpSyu4bUkhJz2Apo LNxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741849103; x=1742453903; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=NkHO/0se169XNtMWH0w7f9TQn0BTGs8vu96SI051qqc=; b=uTPRbpPLy1FDqjwhI2vd5eMOZ1G67s11bjDmCD2wIYRlwINhD/QRWLoh7QVAqw1mio krKmXS6OQZGoW1hiBSRP7lXOV3dmAnCL0m/XDb1Etzk+UQzrtksPi/yb/23hFkA75UIZ bH5otjRExmVvYSm+FP3BCbdBFFJ7SkPB/1vY+VuOPERIL1T93IYGlrgMkKeGpWUgpewu hFP98GAzttZl/71YDJj3kWiazBeSbgqQypFn1zZmNN7I3EvMsdjiQjgzuRe5pVeoDu6E mdw0Ez8PstubkdS403qfe2yNaDIMGn8/fgYxkQWXB7Pl/9e68yBpqW1Bgn8uCeq2Cl24 0hfw== X-Forwarded-Encrypted: i=1; AJvYcCXN71emAKz/GwV1e7GqKDK6tyHQDB+06Yctb02FbzYgdtfSg8K+UTcUrSURclaI/wyxeGLdM46wgE5ml5I=@vger.kernel.org X-Gm-Message-State: AOJu0YzgNn5Wdzkh4p8dRwy4A0jZM0LpuBe3jxu5/sZn5LxQg2iHn8xn xUTCZaFpSSsxUFiXoozg/wKiOwHlSW7pWslo5VgQhCo9AHTzD3m4cZ49SfMWCGw= X-Gm-Gg: ASbGncs7jmapogUQgI9Vxd55ot614cyysdtNgE6Os6joSSNg4FmX+/k6l0CaQ65s2m2 P7k3548fUhypS+4WENSWrrtR97mCddk6MpR5fc3+IjWTvRiDnQnfArn9pH1bd+cMzmS2WGQumT5 M4W4+0TgYjUQW238s1/Ko+UWV0iSZ4tmb7hSHQMEkyZpAWSUiPVAlxvmfSW4onvGyFlUkx6vSP6 a1ldMNQPl3tbIKlNAVSMSn9aJ/Rzi6DCOR72pmKyxGUhG38zeTH1zWWkPDxyxWThxKnZsEu3abg CS+7lUGft7w/FtBqr68Z1ixurwsbNu0FNlljkzG2QxY4q+FE X-Google-Smtp-Source: AGHT+IF2RBsD42GnNZIX18nfjzpK1BpoSRv9b88G/rsSQnVVNmEUyx7yfAT1x7AejmJJpK2yhnpJRw== X-Received: by 2002:a17:902:ec92:b0:223:569d:9a8b with SMTP id d9443c01a7336-22428898155mr323431125ad.18.1741849103632; Wed, 12 Mar 2025 23:58:23 -0700 (PDT) Received: from localhost ([157.82.205.237]) by smtp.gmail.com with UTF8SMTPSA id d9443c01a7336-225c68aa5ffsm6537725ad.82.2025.03.12.23.58.20 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 12 Mar 2025 23:58:23 -0700 (PDT) From: Akihiko Odaki Date: Thu, 13 Mar 2025 15:57:47 +0900 Subject: [PATCH v4 6/7] KVM: arm64: PMU: Reload PMCNTENSET_EL0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250313-pmc-v4-6-2c976827118c@daynix.com> References: <20250313-pmc-v4-0-2c976827118c@daynix.com> In-Reply-To: <20250313-pmc-v4-0-2c976827118c@daynix.com> To: Marc Zyngier , Oliver Upton , Joey Gouly , Suzuki K Poulose , Zenghui Yu , Catalin Marinas , Will Deacon , Andrew Jones Cc: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linux-kernel@vger.kernel.org, devel@daynix.com, Akihiko Odaki X-Mailer: b4 0.15-dev-edae6 Disable counters that are no longer included in PMCNTENSET_EL0. It is not necessary to enable counters included in PMCNTENSET_EL0 because kvm_pmu_handle_pmcr() does so if appropriate. Signed-off-by: Akihiko Odaki --- arch/arm64/kvm/pmu-emul.c | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm64/kvm/pmu-emul.c b/arch/arm64/kvm/pmu-emul.c index 461c76a9cb6b..dfa7048a3e2a 100644 --- a/arch/arm64/kvm/pmu-emul.c +++ b/arch/arm64/kvm/pmu-emul.c @@ -835,6 +835,7 @@ void kvm_vcpu_reload_pmu(struct kvm_vcpu *vcpu) __vcpu_sys_reg(vcpu, PMINTENSET_EL1) &=3D mask; __vcpu_sys_reg(vcpu, PMCNTENSET_EL0) &=3D mask; =20 + kvm_pmu_disable_counter_mask(vcpu, ~__vcpu_sys_reg(vcpu, PMCNTENSET_EL0)); kvm_pmu_handle_pmcr(vcpu, kvm_vcpu_read_pmcr(vcpu)); } =20 --=20 2.48.1 From nobody Sun Feb 8 11:25:36 2026 Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) (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 078001FCD08 for ; Thu, 13 Mar 2025 06:58:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741849110; cv=none; b=tkG7zErxNAl1/B/gGmYU5MsTDAA+qcLczF/oevima/hHMgVS/8WWEZ2+ofk16ZMTW/W+yUisUEqxN0L0L55Js6qe0HyQwdRPFUh1dWic1csawl37GPOSpAzY9Hz0HL0uW6jj+fn/zMIMDA55AQF8nGTfW7oDqnUWKCB8gnOUonw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741849110; c=relaxed/simple; bh=UG93/JN+C4uzEWrf1epKiCm9PjOLeEr0WUFlntrYe/o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=atghY3Aw1UBYs1T307HbNPXCxo0zfYcoh16IVV65padAyWyURXIpq+rB97yZsIOs2i6OLI6HGgMRSCenFxxAq0h1G5GvC9s5WlJzku2i/znBKOBM5IKMhGG8+x26WKbTBsp8CTiNgdCc4r0C3XuOumImmuRBbSAvH3gNJWelQ8k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=daynix.com; spf=pass smtp.mailfrom=daynix.com; dkim=pass (2048-bit key) header.d=daynix-com.20230601.gappssmtp.com header.i=@daynix-com.20230601.gappssmtp.com header.b=mND6Y5s7; arc=none smtp.client-ip=209.85.214.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=daynix.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=daynix.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=daynix-com.20230601.gappssmtp.com header.i=@daynix-com.20230601.gappssmtp.com header.b="mND6Y5s7" Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-22438c356c8so11029455ad.1 for ; Wed, 12 Mar 2025 23:58:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1741849108; x=1742453908; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=x7fhBUFv13S4cZKboUgbYf/t6ZbQKDXA1phxFoEaqP4=; b=mND6Y5s7Vx4+aEoxZ7gbttc2sJtowpoYFncKWNJR/aIx4z2j6JDuP9YEPK+oUTkEjI +eApXwhhHHJv4nK+oVEmYbiQ/8yhRCoCgEIacYp8DZeNVtW3Mgv2+nTFKFaTs4k+kMfV 5wAK//3Y0Z1kOqb54P1rrquLdoMA7NUE52+B7lbWAFec7OISt+IfpReeofz5Kepd1d5D /3vZg6KKfF/O+R1QuZhJNI5oCkc9MbiiI2+Ur6F1r19V4cXGcpbuK6uGc7OQbB/81hm3 1iF+kBIe9yCjZwhxSB/cgPsXnsxw/NM0nrqKM6EE6A7Qj1H36HhMWIoa32EemcI9LgQL 293w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741849108; x=1742453908; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=x7fhBUFv13S4cZKboUgbYf/t6ZbQKDXA1phxFoEaqP4=; b=ErahBQ2PgRlsH973eZx08ZMUxVZ1jIaxfESNTSkgVl6Vy+86te8n1KIBVQ3c+p7GV3 w3xJyUcI+BOuJsZhnX80Sv8gbCoKyU+dr+TZl1ZghdM3PA5dGO/A2Syn8tPcdiftA4BT jjQ2nBBXyCEywAbVTarhyOTnrV86ffcvaeLIVNLVDs3E0WgQ9rQe2Gx4G/FrutVZA5LN FZd2IzvVxmiSxZ3d6G/xQFuifbP8qctjFAIVuwxMV73kl0r7WLfUWWY7dJypQ+kZP4Sk IdUWUbTXnIa7REpwQknTWavLHRLg3npJyZFEKJSftGousgMx/cufgjPKpZBUU1MuUb+g JcsA== X-Forwarded-Encrypted: i=1; AJvYcCUM1+TuRBlMMy4xkX2xC4inIAVaONI5o4YlmpweKIPHO+w7TH0S9AIsX8GduArgZ4+j76tG6a9v1RGK7f8=@vger.kernel.org X-Gm-Message-State: AOJu0Yww0DXgiTEV1RFUbxO7Y/JL2JO4IvGyw/0vzK/3tboxdVXRPDaJ k+36Bn0GBxFmnEEQBbP82eS0ASgwnuXQ8P91nWz8sNtlIqSyhGJUsxMIHUAR+Nk= X-Gm-Gg: ASbGncv0dG5DvjbQXvkVFm32tJRPr3mOe4hsdvquaMKkAbQ0XpSO6IzP31X1PfuCs/m EpSKUMadj59F/N9HTTa8IqzZbz1boFo0lSuGNdj3GsZDmymxxycbU4IVvN2zwh51gYJOQkWRTk0 ajejzL0Yaqaz5dq/BsWfkkiWUJx/zcbwM8Q4Rq8l1AOU+4Ty/Kas1p+ZuP29gkha5BQ794sVIBG eyQ+FY8z4y547S6vGEr1+m+LAKnJCrbTJKYCikrulbMisHoJ9dNwngwPPHKtY3e3h2EXGq8lNDZ SLiA0y914gxZ4mNtVdVKRiIKpN5lFB3VcXxkvKIq+/ZPdvUP X-Google-Smtp-Source: AGHT+IF+TgNoMe5M/byYKEN+EBcKDv/E4YdTnk5/x7Qy9/IKHZJiaku/6SW8IuLAbysNFNl6dwBYew== X-Received: by 2002:a17:902:ec91:b0:223:5e54:c521 with SMTP id d9443c01a7336-22428407e93mr350878545ad.0.1741849108400; Wed, 12 Mar 2025 23:58:28 -0700 (PDT) Received: from localhost ([157.82.205.237]) by smtp.gmail.com with UTF8SMTPSA id d9443c01a7336-225c6bd4dabsm6447105ad.233.2025.03.12.23.58.25 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 12 Mar 2025 23:58:28 -0700 (PDT) From: Akihiko Odaki Date: Thu, 13 Mar 2025 15:57:48 +0900 Subject: [PATCH v4 7/7] KVM: arm64: PMU: Reload when resetting Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250313-pmc-v4-7-2c976827118c@daynix.com> References: <20250313-pmc-v4-0-2c976827118c@daynix.com> In-Reply-To: <20250313-pmc-v4-0-2c976827118c@daynix.com> To: Marc Zyngier , Oliver Upton , Joey Gouly , Suzuki K Poulose , Zenghui Yu , Catalin Marinas , Will Deacon , Andrew Jones Cc: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linux-kernel@vger.kernel.org, devel@daynix.com, Akihiko Odaki X-Mailer: b4 0.15-dev-edae6 Replace kvm_pmu_vcpu_reset() with the generic PMU reloading mechanism to ensure the consistency with system registers and to reduce code size. Signed-off-by: Akihiko Odaki --- arch/arm64/kvm/pmu-emul.c | 14 -------------- arch/arm64/kvm/reset.c | 3 --- arch/arm64/kvm/sys_regs.c | 3 +++ include/kvm/arm_pmu.h | 2 -- 4 files changed, 3 insertions(+), 19 deletions(-) diff --git a/arch/arm64/kvm/pmu-emul.c b/arch/arm64/kvm/pmu-emul.c index dfa7048a3e2a..62b1deba9856 100644 --- a/arch/arm64/kvm/pmu-emul.c +++ b/arch/arm64/kvm/pmu-emul.c @@ -248,20 +248,6 @@ void kvm_pmu_vcpu_init(struct kvm_vcpu *vcpu) pmu->pmc[i].idx =3D i; } =20 -/** - * kvm_pmu_vcpu_reset - reset pmu state for cpu - * @vcpu: The vcpu pointer - * - */ -void kvm_pmu_vcpu_reset(struct kvm_vcpu *vcpu) -{ - unsigned long mask =3D kvm_pmu_valid_counter_mask(vcpu); - int i; - - for_each_set_bit(i, &mask, 32) - kvm_pmu_stop_counter(kvm_vcpu_idx_to_pmc(vcpu, i)); -} - /** * kvm_pmu_vcpu_destroy - free perf event of PMU for cpu * @vcpu: The vcpu pointer diff --git a/arch/arm64/kvm/reset.c b/arch/arm64/kvm/reset.c index 0b0ae5ae7bc2..7f44539bc822 100644 --- a/arch/arm64/kvm/reset.c +++ b/arch/arm64/kvm/reset.c @@ -201,9 +201,6 @@ void kvm_reset_vcpu(struct kvm_vcpu *vcpu) vcpu->arch.reset_state.reset =3D false; spin_unlock(&vcpu->arch.mp_state_lock); =20 - /* Reset PMU outside of the non-preemptible section */ - kvm_pmu_vcpu_reset(vcpu); - preempt_disable(); loaded =3D (vcpu->cpu !=3D -1); if (loaded) diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index 11718c635e2f..307ce37d0434 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c @@ -4262,6 +4262,9 @@ void kvm_reset_sys_regs(struct kvm_vcpu *vcpu) } =20 set_bit(KVM_ARCH_FLAG_ID_REGS_INITIALIZED, &kvm->arch.flags); + + if (kvm_vcpu_has_pmu(vcpu)) + kvm_make_request(KVM_REQ_RELOAD_PMU, vcpu); } =20 /** diff --git a/include/kvm/arm_pmu.h b/include/kvm/arm_pmu.h index 9c062756ebfa..8ec6296c5917 100644 --- a/include/kvm/arm_pmu.h +++ b/include/kvm/arm_pmu.h @@ -45,7 +45,6 @@ void kvm_pmu_set_counter_value_user(struct kvm_vcpu *vcpu= , u64 select_idx, u64 v u64 kvm_pmu_valid_counter_mask(struct kvm_vcpu *vcpu); u64 kvm_pmu_get_pmceid(struct kvm_vcpu *vcpu, bool pmceid1); void kvm_pmu_vcpu_init(struct kvm_vcpu *vcpu); -void kvm_pmu_vcpu_reset(struct kvm_vcpu *vcpu); void kvm_pmu_vcpu_destroy(struct kvm_vcpu *vcpu); void kvm_pmu_disable_counter_mask(struct kvm_vcpu *vcpu, u64 val); void kvm_pmu_enable_counter_mask(struct kvm_vcpu *vcpu, u64 val); @@ -108,7 +107,6 @@ static inline u64 kvm_pmu_valid_counter_mask(struct kvm= _vcpu *vcpu) return 0; } static inline void kvm_pmu_vcpu_init(struct kvm_vcpu *vcpu) {} -static inline void kvm_pmu_vcpu_reset(struct kvm_vcpu *vcpu) {} static inline void kvm_pmu_vcpu_destroy(struct kvm_vcpu *vcpu) {} static inline void kvm_pmu_disable_counter_mask(struct kvm_vcpu *vcpu, u64= val) {} static inline void kvm_pmu_enable_counter_mask(struct kvm_vcpu *vcpu, u64 = val) {} --=20 2.48.1