From patchwork Wed Mar 12 11:55:55 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akihiko Odaki X-Patchwork-Id: 14013601 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 050D7C28B30 for ; Wed, 12 Mar 2025 14:05:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Cc:To:In-Reply-To:References :Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date: From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=rAMd6rGhip9Etdi0DcL12HaRjFlmNQeXSBT7tbE4ZZA=; b=kiPB9KegIVXPhYdFNaSbGQQx1j JmmnuaGO98W2hcRI9ga/QDL1Ay8TkDWEkNyFCbKf4+zPIxoQQEPeL0bTG4YyGWBJIVzYSg8165L8V CwwE7euTSFMHo/FDwu878k3tlTvkM98pEAtl7DXEzJ388w1GWafC7o3+1btaFi5JCHh5oa410gnEn 4DK1FPFJ4pK4ivgae7cwY0M26k+XbL29mIoxvD9V4go4Ua/r7Iw+GnpTZ84mOUH9rAP7xeR5rfOkC E6xycU9DwqnXd95ygDxaNIPjanf5ZwnqziTXFipDi3F2hx/wH+mT8zNIaX7dTOlv9dyGIWp5IKkDk bHxjtaqQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tsMiQ-00000008eOa-41Oi; Wed, 12 Mar 2025 14:05:47 +0000 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tsKh6-00000008KOF-1FZo for linux-arm-kernel@lists.infradead.org; Wed, 12 Mar 2025 11:56:18 +0000 Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-22398e09e39so122424705ad.3 for ; Wed, 12 Mar 2025 04:56:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1741780574; x=1742385374; darn=lists.infradead.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=DqJcfRGvrB5NlnAps6PWvI8k4jzmsawTwFpoiQO6NJnmC+1c7uE/wJ9ipZdki8JxYn GRL8pQMiI6NFzfjC3dB8U6rk9kRHzQvGU+pvpXmN3dQXZ5M4X3tAylCuNh1bjAp31Eao ITxSGG9i2CMULDix4YojX8ORxEWkU5yj+Q3u4Az1Ayb2VJb7OFom2yMrHzy2mKlBsBoH rFR3Yycf4AShf0xwgcYFK3H6jaLzsVLRDGC53mBNSZnZzPp6jKXoToWfEjjGftxLirGK fRcYrEa5V0U8HRMoVDFKoZVBkSIITG86S7cB5YxWdN+i5tsOrbH3G42pkYuf1Xru3H5x KFoQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741780574; x=1742385374; 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=mGrkh14ou97Y615kiTUIIvBZ+cykVM6eD3TkFmxITYzMcpmPI/Z9wGK5f4DIBWHy3B QE/TZWeqCWW/NwE/mh9TXTH+8jPyBdHrnknXyX6KV+cnmWlz8KuzA0Tv1LqEdjfrDkuk 3E0XVTa8bzOesDTqujWzq+RKQgFD7j1/DEYVrdhlsSvct17Xkob1qaHoZpkB2sb6zR97 SeZFgOs+EhiwVAdM/SLbq1hJX6OLMkTjb6IUoAhXh8+t6tUCpjnHMkdBVBFG+APc9ZSh bnSY7UpLKwjxwDspRIE10KeIUT9BOanJcm9vsUyvlvts9WNW93EKdB645nz/f9roEA2o 5VSw== X-Gm-Message-State: AOJu0YzHLuWzyUFvM7PZz2Dt7Rmkfg+8Lf9+c0Qy4De1q4U4R6E0JWM8 jTaE/mG8c0XwSpcSUqtHkwccPkAK5+5dmM0+2dQE3E7+DErjiP0DqaaODfKYiCVbLPmmiqxJg0d Mmsw= X-Gm-Gg: ASbGncupVAmj9FaDt1XC74xAXRiWYEeOBZMLteB7tAajEfjzscVjDMWg+l6ZdmPKebe C6pZ3lQIQzhGCIoF1jVdKvc1/pjksZ+jpZwWPgjPXN5lj+njCFyRrl4UTm7NuXqjYOYJ05tmaAo L2Ncyl55lzSRKPe8cP803TcfUd/0dM6ZbTboZjOybOAnIrbnzhhL+b71YfvBB0DnLf3EUdXVd9s INUNTi3Q6PbnyyqKJlDOYU5ZUqfZFvFI3pSUmoXUpb0SsDFeh07QEEJri7U7amS8yuFVrkPssxq 2YiXqqf3ihF83iiDpVtwg1sKcRJEHNUIkdixo1tJJCQ4S7cU X-Google-Smtp-Source: AGHT+IGVJsaOES3D6e5IgzEgtMMcyBt78uD5r1dUvwmlCbFQdHU9CycZp7wTmKosTDLuCPhOfc8eNw== X-Received: by 2002:a17:902:e812:b0:211:e812:3948 with SMTP id d9443c01a7336-2242850b42amr315559235ad.0.1741780574197; Wed, 12 Mar 2025 04:56:14 -0700 (PDT) Received: from localhost ([157.82.205.237]) by smtp.gmail.com with UTF8SMTPSA id d2e1a72fcca58-73699da011asm11973015b3a.84.2025.03.12.04.56.11 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 12 Mar 2025 04:56:13 -0700 (PDT) From: Akihiko Odaki Date: Wed, 12 Mar 2025 20:55:55 +0900 Subject: [PATCH v3 1/6] KVM: arm64: PMU: Set raw values from user to PM{C,I}NTEN{SET,CLR}, PMOVS{SET,CLR} MIME-Version: 1.0 Message-Id: <20250312-pmc-v3-1-0411cab5dc3d@daynix.com> References: <20250312-pmc-v3-0-0411cab5dc3d@daynix.com> In-Reply-To: <20250312-pmc-v3-0-0411cab5dc3d@daynix.com> To: Marc Zyngier , Oliver Upton , Joey Gouly , Suzuki K Poulose , Zenghui Yu , Catalin Marinas , Will Deacon , Andrew Jones , Shannon Zhao 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 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250312_045616_691199_1000AAB0 X-CRM114-Status: GOOD ( 12.29 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org 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,CLR}, 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, static int set_pmreg(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r, u64 val) { - bool set; - - val &= kvm_pmu_valid_counter_mask(vcpu); - - switch (r->reg) { - case PMOVSSET_EL0: - /* CRm[1] being set indicates a SET register, and CLR otherwise */ - set = r->CRm & 2; - break; - default: - /* Op2[0] being set indicates a SET register, and CLR otherwise */ - set = r->Op2 & 1; - break; - } - - if (set) - __vcpu_sys_reg(vcpu, r->reg) |= val; - else - __vcpu_sys_reg(vcpu, r->reg) &= ~val; - + __vcpu_sys_reg(vcpu, r->reg) = val & kvm_pmu_valid_counter_mask(vcpu); return 0; } From patchwork Wed Mar 12 11:55:56 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akihiko Odaki X-Patchwork-Id: 14013494 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id CA45CC28B28 for ; Wed, 12 Mar 2025 12:55:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Cc:To:In-Reply-To:References :Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date: From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=wwE7purWiXM/F0UZ+ykkSRqLAxV2EP4DXS0cEhDzP48=; b=eTIonIHaebGicC2b8X3fB6GYdz lEhmt6mIZCQW+AyhIgpIUncINTfn/8qRQdc21Lc6bIg1nvWzv0XCaqtE47P8y/neQBGIKJ904IKeR euhNXYx18Yw+SSYH4TmHOd8b1XOG6KkUKwu9awR6lokfNtMcWEEJLCCEZ6XmYdfw6ZM0gBlz8Wtp6 TItepSmuNblT6tcgMqkqBQZDexjxVCXuuKjy5K4ga8yJPtszHyoNAJCOo175nPGh+4xG8cf/RZm5w c5YUw6/Qhqx0PB+PABWTRF8C9X5eiQhDpFAQu7kaTsI0bBotyXIKvaZQhMr/X6wAf28JJY7a15AM6 Dpd3zY3g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tsLcB-00000008TRl-3naP; Wed, 12 Mar 2025 12:55:15 +0000 Received: from mail-pl1-x633.google.com ([2607:f8b0:4864:20::633]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tsKh9-00000008KOk-42B0 for linux-arm-kernel@lists.infradead.org; Wed, 12 Mar 2025 11:56:21 +0000 Received: by mail-pl1-x633.google.com with SMTP id d9443c01a7336-2255003f4c6so72458315ad.0 for ; Wed, 12 Mar 2025 04:56:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1741780579; x=1742385379; darn=lists.infradead.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=wwE7purWiXM/F0UZ+ykkSRqLAxV2EP4DXS0cEhDzP48=; b=vRUqNLEYzvLTR/dl7bWVDzbbXB8upTG00KXoxHebmKwwPwaVfOCOOn2Vo9bov4wdAC SA29hpeTwRjrIV6l5rmYiSzd+6L9EiTymzeO6FdiA5EZ+ZLg5hTg+u2GpfGsCRwg8+EP 7Ec07TO+dnjN+Rl+Z43fxxwfjGxTxPGyT0mvZMM1jhG4nZn4mVfs3/wyQVaerx5FRK5Y jOk95e8eLDvpQxKqe2Jiilrr9bH6OgHm2GEfuVJKIL3wKRgY/COrn3OcVzj5uoa8ztr8 CQqt/cGyUFZ4yi0gyFqRs16D/l9iXgbM5AR2R6ovR61Ene/l4No4VQr6X1x3RzdElYno 5fZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741780579; x=1742385379; 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=wwE7purWiXM/F0UZ+ykkSRqLAxV2EP4DXS0cEhDzP48=; b=EsdtthXeBBCplG2LIVyOrv+xQ8+OoOsBXC6hCrUUqDm59FIm2pYheE83TwwOqrB/5d 1NgcR3bG3savND0sfB7O4V5sZfJzZqUTpfHK0BqAu4VuZPBpbM02PnQ+q0w2GhwBa1YW 0jvC2cfMU9PacyJFDqRvYnj0Hog/vF+AwhFwi8YI1Z28i+fodunNJ29FALoan7t6q7mf Cj3zalc2N0j9YomIpfZR8R+6TNgrXYat1kGJWTo/SgC4zTlz2PTf2zrQaXxEFz4kFh/b GWhpYMbtXBIeIbYAKl2278hPcmocGiAU7hwqjSXV2xasPYxY4/sVNQspGVaLM3tkRGkI vewg== X-Gm-Message-State: AOJu0YwzXI0j2K3nj/OVzCIucEOPPvUj4Qd2xry43bOYMAt903O4puiG qkByDBusDHg8lD4yb4vzCt5crNDPsnjOKyBE2DSIyOZdqWa9lTt2wqymtUtMQKg= X-Gm-Gg: ASbGncvL2LDA983/eWkWHgkcxObq4P8fwtrhDQ3pBJwTRnkjFSIDEqr940hk4nvPaQ0 aVP6dLgKsd1Oy1pg7rvPpu0uFceQHSoPq+VoaD1bKQfBOIjjT80rfKog6+XkLmZaZ1V7UYNAEzt I0oU1i5z/AOAFUPPy8aMl27TOWwJXv9/uNZeWXkY0gKK2q4m8EAD965WesBZ5jwxgzSu4epAiYl AMJJVnju3cWRCnFjduXlWudwr+H2A5rjnq2mss0NrRx+qSdd2JTaKhCO7F2wPnieoFncWpxtxG7 ns+cWNbn7I85BiotgtdXajf1xi39mjTijGCtJ117QGNK6zOt X-Google-Smtp-Source: AGHT+IGnNDhaZJn9+pWAJQQhskEvDmKUXMj64Q6j1/BL2bE5sEl9YUEXr8ltZIQn3VPWZCpg0FkadA== X-Received: by 2002:a05:6a21:6f07:b0:1f5:6f98:70a0 with SMTP id adf61e73a8af0-1f58cb466e2mr11761471637.22.1741780578715; Wed, 12 Mar 2025 04:56:18 -0700 (PDT) Received: from localhost ([157.82.205.237]) by smtp.gmail.com with UTF8SMTPSA id d2e1a72fcca58-736a6e5c13asm10966593b3a.157.2025.03.12.04.56.15 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 12 Mar 2025 04:56:18 -0700 (PDT) From: Akihiko Odaki Date: Wed, 12 Mar 2025 20:55:56 +0900 Subject: [PATCH v3 2/6] KVM: arm64: PMU: Assume PMU presence in pmu-emul.c MIME-Version: 1.0 Message-Id: <20250312-pmc-v3-2-0411cab5dc3d@daynix.com> References: <20250312-pmc-v3-0-0411cab5dc3d@daynix.com> In-Reply-To: <20250312-pmc-v3-0-0411cab5dc3d@daynix.com> To: Marc Zyngier , Oliver Upton , Joey Gouly , Suzuki K Poulose , Zenghui Yu , Catalin Marinas , Will Deacon , Andrew Jones , Shannon Zhao 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 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250312_045620_009006_10738C72 X-CRM114-Status: GOOD ( 19.91 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org 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. Signed-off-by: Akihiko Odaki --- arch/arm64/kvm/arm.c | 8 +++++--- arch/arm64/kvm/guest.c | 12 ++++++++++++ arch/arm64/kvm/pmu-emul.c | 34 ++-------------------------------- arch/arm64/kvm/sys_regs.c | 6 ++++-- 4 files changed, 23 insertions(+), 37 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; - ret = kvm_arm_pmu_v3_enable(vcpu); - if (ret) - return ret; + if (kvm_vcpu_has_pmu(vcpu)) { + ret = kvm_arm_pmu_v3_enable(vcpu); + if (ret) + return ret; + } if (is_protected_kvm_enabled()) { ret = pkvm_create_hyp_vm(kvm); diff --git a/arch/arm64/kvm/guest.c b/arch/arm64/kvm/guest.c index 962f985977c2..fc09eec3fd94 100644 --- a/arch/arm64/kvm/guest.c +++ b/arch/arm64/kvm/guest.c @@ -951,6 +951,10 @@ int kvm_arm_vcpu_arch_set_attr(struct kvm_vcpu *vcpu, switch (attr->group) { case KVM_ARM_VCPU_PMU_V3_CTRL: + if (!kvm_vcpu_has_pmu(vcpu)) { + ret = -ENODEV; + break; + } mutex_lock(&vcpu->kvm->arch.config_lock); ret = kvm_arm_pmu_v3_set_attr(vcpu, attr); mutex_unlock(&vcpu->kvm->arch.config_lock); @@ -976,6 +980,10 @@ int kvm_arm_vcpu_arch_get_attr(struct kvm_vcpu *vcpu, switch (attr->group) { case KVM_ARM_VCPU_PMU_V3_CTRL: + if (!kvm_vcpu_has_pmu(vcpu)) { + ret = -ENODEV; + break; + } ret = kvm_arm_pmu_v3_get_attr(vcpu, attr); break; case KVM_ARM_VCPU_TIMER_CTRL: @@ -999,6 +1007,10 @@ int kvm_arm_vcpu_arch_has_attr(struct kvm_vcpu *vcpu, switch (attr->group) { case KVM_ARM_VCPU_PMU_V3_CTRL: + if (!kvm_vcpu_has_pmu(vcpu)) { + ret = -ENXIO; + break; + } ret = kvm_arm_pmu_v3_has_attr(vcpu, attr); break; case KVM_ARM_VCPU_TIMER_CTRL: diff --git a/arch/arm64/kvm/pmu-emul.c b/arch/arm64/kvm/pmu-emul.c index e3e82b66e226..3e5bf414447f 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)); } @@ -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); } @@ -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; 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; - if (!kvm_vcpu_has_pmu(vcpu) || !val) + if (!val) return; for (i = 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 = &vcpu->arch.pmu; bool overflow; - if (!kvm_vcpu_has_pmu(vcpu)) - return; - overflow = !!kvm_pmu_overflow_status(vcpu); if (pmu->irq_level == overflow) return; @@ -555,9 +544,6 @@ void kvm_pmu_handle_pmcr(struct kvm_vcpu *vcpu, u64 val) { int i; - 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 &= ~ARMV8_PMU_PMCR_LP; @@ -696,9 +682,6 @@ void kvm_pmu_set_counter_event_type(struct kvm_vcpu *vcpu, u64 data, struct kvm_pmc *pmc = kvm_vcpu_idx_to_pmc(vcpu, select_idx); u64 reg; - if (!kvm_vcpu_has_pmu(vcpu)) - return; - reg = counter_index_to_evtreg(pmc->idx); __vcpu_sys_reg(vcpu, reg) = data & kvm_pmu_evtyper_mask(vcpu->kvm); @@ -804,9 +787,6 @@ u64 kvm_pmu_get_pmceid(struct kvm_vcpu *vcpu, bool pmceid1) u64 val, mask = 0; int base, i, nr_events; - if (!kvm_vcpu_has_pmu(vcpu)) - return 0; - if (!pmceid1) { val = compute_pmceid0(cpu_pmu); base = 0; @@ -847,9 +827,6 @@ void kvm_vcpu_reload_pmu(struct kvm_vcpu *vcpu) 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; @@ -1022,9 +999,6 @@ int kvm_arm_pmu_v3_set_attr(struct kvm_vcpu *vcpu, struct kvm_device_attr *attr) lockdep_assert_held(&kvm->arch.config_lock); - if (!kvm_vcpu_has_pmu(vcpu)) - return -ENODEV; - if (vcpu->arch.pmu.created) return -EBUSY; @@ -1129,9 +1103,6 @@ int kvm_arm_pmu_v3_get_attr(struct kvm_vcpu *vcpu, struct kvm_device_attr *attr) if (!irqchip_in_kernel(vcpu->kvm)) return -EINVAL; - if (!kvm_vcpu_has_pmu(vcpu)) - return -ENODEV; - if (!kvm_arm_pmu_irq_initialized(vcpu)) return -ENXIO; @@ -1150,8 +1121,7 @@ int kvm_arm_pmu_v3_has_attr(struct kvm_vcpu *vcpu, struct kvm_device_attr *attr) case KVM_ARM_VCPU_PMU_V3_INIT: case KVM_ARM_VCPU_PMU_V3_FILTER: case KVM_ARM_VCPU_PMU_V3_SET_PMU: - if (kvm_vcpu_has_pmu(vcpu)) - return 0; + return 0; } return -ENXIO; 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 *vcpu, static u64 read_sanitised_id_dfr0_el1(struct kvm_vcpu *vcpu, const struct sys_reg_desc *rd) { - u8 perfmon = pmuver_to_perfmon(kvm_arm_pmu_get_pmuver_limit()); + u8 perfmon; u64 val = read_sanitised_ftr_reg(SYS_ID_DFR0_EL1); val &= ~ID_DFR0_EL1_PerfMon_MASK; - if (kvm_vcpu_has_pmu(vcpu)) + if (kvm_vcpu_has_pmu(vcpu)) { + perfmon = pmuver_to_perfmon(kvm_arm_pmu_get_pmuver_limit()); val |= SYS_FIELD_PREP(ID_DFR0_EL1, PerfMon, perfmon); + } val = ID_REG_LIMIT_FIELD_ENUM(val, ID_DFR0_EL1, CopDbg, Debugv8p8); From patchwork Wed Mar 12 11:55:57 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akihiko Odaki X-Patchwork-Id: 14013499 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id D48B6C28B2F for ; Wed, 12 Mar 2025 12:58:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Cc:To:In-Reply-To:References :Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date: From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=LSsGsr3kAuFxcrtpSfRGA99t0k+DUOp8ehJUjKxyPeQ=; b=j5BLoS9kiyo6Jca2In3DRrdYxB Y3MwwWWneOLkJ8LIB1cWB5O9dkKYptWN6ZRto6OznEsskocYxrGC0wQkCMhz9kzgdg5OLsKF6a/a/ L93AS+wFo9EcLQlwyNwB77tVou66u1WhTMD0mDvCpYbDtE3EfUeNqMD3vNIJ4VztqNSE/tpraDGga pitkifkunfm1TkLbD2UunxAE90VRk6JXyPzZDiwBUBOqf6V7mBFO8UpMsEGD06W3/MDr8IeFf8zAD ObHAaAusPURBg9bbIWTzusilxW8oMY/x7Lvi0AYJdbDPlzBMcLEo/9T13vAZKEUxWUpYHd+DHPXAh hAedkvQQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tsLfR-00000008Tpr-1SeX; Wed, 12 Mar 2025 12:58:37 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tsKhK-00000008KQH-0MpQ for linux-arm-kernel@bombadil.infradead.org; Wed, 12 Mar 2025 11:56:30 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Cc:To:In-Reply-To:References: Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date: From:Sender:Reply-To:Content-ID:Content-Description; bh=LSsGsr3kAuFxcrtpSfRGA99t0k+DUOp8ehJUjKxyPeQ=; b=IFLKYawnUQ+/2QlvPsEtvdvHnM 7DvvoBwg5nC22bd041rXEEKgUP+nTBCwCblwgQYveN7IxGxHOncvbx1RJWD6PRt9Lrg68P8uYF1jr 8WjJFiBEbVtUSQ9DTo5Cb2BtE3CJRmhe2Gjdct8xaKMgPa9aFZFvGXTbWeh45mV3gPJVMM8XjCsGg ykH2QCM2ZdkzmvwD/Zth0AcdxA67IUWo7XVflLLnDBjYZGBzkLtc8rpSFENjcOfpQ0QpEPqqLVDYd Xxg2nkbjTS4PzVLGpBi6LBskmzujY97lJw+38xObSynIt3xO+AuPqrdNLA4olKFn9oeBdvj6Pa/jo WTwY8d6A==; Received: from mail-pl1-x633.google.com ([2607:f8b0:4864:20::633]) by desiato.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tsKhG-00000002Mp3-26uq for linux-arm-kernel@lists.infradead.org; Wed, 12 Mar 2025 11:56:28 +0000 Received: by mail-pl1-x633.google.com with SMTP id d9443c01a7336-2239aa5da08so108268505ad.3 for ; Wed, 12 Mar 2025 04:56:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1741780584; x=1742385384; darn=lists.infradead.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=LSsGsr3kAuFxcrtpSfRGA99t0k+DUOp8ehJUjKxyPeQ=; b=2+cZKUQDlha8UATnAAsOrYIMc2caHiF842saI5l/bgAO/663somrArMrSEn4Mp4uDL QWOjFMAQK4Mn6air8SBZH3jpxCT4kuqTi5PgeMPlku5XsWJYjAnG3zEEBHlXIDAVARAF mBxq+CtTEFXEtGJqxbCcg6WtxBn7c1rqKo3Z5MiI5rxzO7ZbYkm+FrGHkluvNQR3dH73 AvZdCOhLA9VqCphL2S6q3DLIQWViEDnxYHvhdR0UE9bNGZE/Z5yEsmyqnBcqEv9W8ruz OItkfKjRV4DPVVKzqIplqXlCjgdFKjxOJjMu+cIIbKp7aHdmIFIaKzXZJSX0BCoob+nF 0vRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741780584; x=1742385384; 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=LSsGsr3kAuFxcrtpSfRGA99t0k+DUOp8ehJUjKxyPeQ=; b=QFdrhF3Do3PLegvMe0Pc3sA6qzniU93atEgGuMY++7RPgLszH8GIMPM9riyKhXUvuR Rxo+fkBywSfr1zT0jI1lwokUzLzfw+dlAnTxShZTLCC/I/GdTwpFuRLt+x4pL8qqTXd7 n3355duA98rXufhGAYNM3KGSAubE4ijxZ0RfUAZqujgLzegf7B6tpuIA1EhQlYtHfTEB y08a/HaC+CdDSpfmu5gQe9xHGbsg8hApVAbguI3kGdzv982iAGto+HKOF5r/ZQ12eRu9 ux4B7xkB9MDzlTd+JaloqmeXhjVr9j+0zlzaQ8ltG0a11g+9QGP8H7/brJqN6Y6LeCHD pHBA== X-Gm-Message-State: AOJu0Yy1velyphPViLSWB2U6f2DrWyzPwLbxLBkbqiIB2KDCKqBxkaa1 msSu9CPRLRF1rJvq/2AbmcMUdxvyCbDf0mtfVqBu/DMCmiRfgNMIMfCbMJ1kpG90f2qD0nHfL0a pfC8= X-Gm-Gg: ASbGncu4Uk34i9Ofudq4A5+MVMrcoUhHUzmkeWxx/bkPmSlKFJgkGoIJxr5Kz5j2Pcv JGlIoG0KQHVpSZ35PLz5qmv3y4wfC9hDUF6fxIHGFBaNa3Cbs/RsIEWEMC/bXGJBV0sSaIj94vU sF4AHNsTQgHRNmYMv01IDc6xLyIFM9c+66EBCLD00ibMmgitbHE01OAtvKi5b0Ubz33/cvb6eq0 s5ypUBGMBYaZ7xCksnvFLxamWrqFbmDE0HN0DR0tfocDN66eZ3kq9kWuxoaabw2O9YmRDITtjzJ ZfBaZhB16PnBFa/C9oDoQVVLu35rSJYQ6HqSHJvBdIKC/rkZsbOsGJvgcoM= X-Google-Smtp-Source: AGHT+IEySYB2KOvAVkEbdUGCk7PaLmynA5DtA3ifevnpQFe/NSoQ7IgcTUmRgz4PK00aGrJKKcPhDQ== X-Received: by 2002:a05:6a00:8e09:b0:736:ff65:3fcc with SMTP id d2e1a72fcca58-736ff65443emr3402126b3a.16.1741780584028; Wed, 12 Mar 2025 04:56:24 -0700 (PDT) Received: from localhost ([157.82.205.237]) by smtp.gmail.com with UTF8SMTPSA id d2e1a72fcca58-736b7bb0bf2sm9336341b3a.42.2025.03.12.04.56.21 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 12 Mar 2025 04:56:23 -0700 (PDT) From: Akihiko Odaki Date: Wed, 12 Mar 2025 20:55:57 +0900 Subject: [PATCH v3 3/6] KVM: arm64: PMU: Fix SET_ONE_REG for vPMC regs MIME-Version: 1.0 Message-Id: <20250312-pmc-v3-3-0411cab5dc3d@daynix.com> References: <20250312-pmc-v3-0-0411cab5dc3d@daynix.com> In-Reply-To: <20250312-pmc-v3-0-0411cab5dc3d@daynix.com> To: Marc Zyngier , Oliver Upton , Joey Gouly , Suzuki K Poulose , Zenghui Yu , Catalin Marinas , Will Deacon , Andrew Jones , Shannon Zhao 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 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250312_115626_659566_83CA3844 X-CRM114-Status: GOOD ( 19.04 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org 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 register") 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 3e5bf414447f..1cfe53b6353e 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); } +/** + * 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)) = 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, const struct sys_reg_desc *r, return 0; } +static int set_pmu_evcntr(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r, + u64 val) +{ + u64 idx; + + if (r->CRn == 9 && r->CRm == 13 && r->Op2 == 0) + /* PMCCNTR_EL0 */ + idx = ARMV8_PMU_CYCLE_IDX; + else + /* PMEVCNTRn_EL0 */ + idx = ((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 struct sys_reg_desc *r, #define PMU_PMEVCNTR_EL0(n) \ { PMU_SYS_REG(PMEVCNTRn_EL0(n)), \ .reset = reset_pmevcntr, .get_user = get_pmu_evcntr, \ + .set_user = set_pmu_evcntr, \ .access = access_pmu_evcntr, .reg = (PMEVCNTR0_EL0 + n), } /* Macro to expand the PMEVTYPERn_EL0 register */ @@ -2665,7 +2682,8 @@ static const struct sys_reg_desc sys_reg_descs[] = { .access = access_pmceid, .reset = NULL }, { PMU_SYS_REG(PMCCNTR_EL0), .access = access_pmu_evcntr, .reset = reset_unknown, - .reg = PMCCNTR_EL0, .get_user = get_pmu_evcntr}, + .reg = PMCCNTR_EL0, .get_user = get_pmu_evcntr, + .set_user = set_pmu_evcntr }, { PMU_SYS_REG(PMXEVTYPER_EL0), .access = access_pmu_evtyper, .reset = 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 >= 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); From patchwork Wed Mar 12 11:55:58 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akihiko Odaki X-Patchwork-Id: 14013500 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id C36F2C28B28 for ; Wed, 12 Mar 2025 13:00:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Cc:To:In-Reply-To:References :Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date: From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=batJW7N99udsH5or2fGgRKZ12NqGfXHTrvw8DYDS8OY=; b=adqV/l0K2/pR+QOnNmx/IoYKNQ C8WxEZ2hBQltzFHCFOy3agQOJUcQOfSsvGoymHO/mU2RO+nvvI1Xiqsw/66TIPh5SPrdBYCQn0CIs z9/r97rulx4Lwq55k/Gn306lxzGaThcjG3KgaGTMV5tiZTzrJA6vctPepHwqYV2GP/6KEoqPdk323 87zN1KwV67iHqr1KcssSQSLnKODs6AwxXeAinpG0TrBNH/WFBTjVZzoTxmCBkav0fAisig5nWTQTY b2tHA/A/KGWI+vmWwRc1+hHJ9pbaER5UBSidVS/dN5AFAphrSdUIFKIGa+4WCtiQFaxkZy04jUVCF A6IJWOuA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tsLh3-00000008U0q-170D; Wed, 12 Mar 2025 13:00:17 +0000 Received: from mail-pl1-x62a.google.com ([2607:f8b0:4864:20::62a]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tsKhJ-00000008KQA-2CaA for linux-arm-kernel@lists.infradead.org; Wed, 12 Mar 2025 11:56:30 +0000 Received: by mail-pl1-x62a.google.com with SMTP id d9443c01a7336-2241053582dso35485335ad.1 for ; Wed, 12 Mar 2025 04:56:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1741780588; x=1742385388; darn=lists.infradead.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=batJW7N99udsH5or2fGgRKZ12NqGfXHTrvw8DYDS8OY=; b=0vOo6eOpDp0zJvO/niL+1nm1cl9SqBEEmaK98aEl8xFRB0C+6vwFanQC1eu7dfdgVB MAo2vj7U2AfdX/fAlD+EhKs0o4tb/R9oHk2TJ+6CJQkHKyZ+rf6RM0TaWi7Fo6MS9rHQ 3dPdJsfNvv2h8qe5yaR7Kv3cUjkN28a/IsrLvgcrepy3RVFdcWSfSj2MiloyCHIPQq7K eabuJOYvnPQD+o+ke4mPG7Quep33BKBGw4ulQ15TxHsWVjw/8tuu+lRFUi5iP2CWbQUB xpEpEtUL7l/3hXgIlcZDWIFVGmvjpr3WMSig4Q+g29Ku5fO7te6wjzTdV1kgaFKoi2eC jINA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741780588; x=1742385388; 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=batJW7N99udsH5or2fGgRKZ12NqGfXHTrvw8DYDS8OY=; b=PzGw5slSSmIF0scKzjrsW/dn+CdMnfcxyKReAfwt6U0S9io6ZxAG3/SQh4fmADJb4p mbtvqcIEPbr3mLX9D2lPImYXu7geNPwfor7549KuOP0gybpYPg2C52ii6a/A8v5V9Gvn 9exitHy0dRkhRPndtKBMRv96QoU/Rcx3TOuh2B4gTTV70wfh6MOggZhXquaYfcdmf4Su sGgVsezUC4jq1GwgpDC69PI1QNwsJyye9modttG2u4mDXj13pRybjLvUnP9LsUlUBuGm CYnWaePgTygumhh2k13+s5SUVRG3X6mvsrRnnU1sf0CT+DOoqS++ZK4Pt9RSz+2l6SPd dNuA== X-Gm-Message-State: AOJu0YwGrK4chzvDruwWBk0xD4+k5IpfSC1JQ9+7bFSgkGppvK/zmmrF PvFvJSXGW7UheMSGmuHDG/wxmPomV5q8NamrxT9GIkeAqc8nRMWhf1K8Ux7O60I= X-Gm-Gg: ASbGncvSnCmj0G2CWsV1C2iO3ei3tD9vPFKYT9vin11ZydMwt9seGJ76HtOVbax9Ymk EVUIObm/XKxyHQyWepDXAtpV5ZQ0kggOyX/N6OkCtgvkPaxu4j4JSv17v9x45dRFDquH1QG3cq4 gvUKKOajFBr6Bc9+z7ZcEp0USwmEtH54Ut6O7sQi4xrRgzhSgcg3gKySmSPbgxXlbmnh0Krd5ci u6rhQnJLhQjRjT9TrrXUhFeZXX5e0Gn6gYs9U0LNRtGJBpI1Wjde1rOQ9ECiB0kK/yA8p+RlePI yhXaqxnAiPUcggP3jQvqLqo7apTR8h1Tuqh5cWqA8W8M9EOr X-Google-Smtp-Source: AGHT+IFrXL/c2aUmiggWa0jbXOlzV9E33S5G3t7pznZh6+1oFT+Cw3t/yJk10DJ41f3H26UTFexAtg== X-Received: by 2002:a17:903:40cb:b0:21f:85ee:f2df with SMTP id d9443c01a7336-2242888adfemr319563085ad.15.1741780588669; Wed, 12 Mar 2025 04:56:28 -0700 (PDT) Received: from localhost ([157.82.205.237]) by smtp.gmail.com with UTF8SMTPSA id d9443c01a7336-22410aa457csm114113705ad.212.2025.03.12.04.56.25 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 12 Mar 2025 04:56:28 -0700 (PDT) From: Akihiko Odaki Date: Wed, 12 Mar 2025 20:55:58 +0900 Subject: [PATCH v3 4/6] KVM: arm64: PMU: Reload when user modifies registers MIME-Version: 1.0 Message-Id: <20250312-pmc-v3-4-0411cab5dc3d@daynix.com> References: <20250312-pmc-v3-0-0411cab5dc3d@daynix.com> In-Reply-To: <20250312-pmc-v3-0-0411cab5dc3d@daynix.com> To: Marc Zyngier , Oliver Upton , Joey Gouly , Suzuki K Poulose , Zenghui Yu , Catalin Marinas , Will Deacon , Andrew Jones , Shannon Zhao 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 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250312_045629_566099_EFF36954 X-CRM114-Status: GOOD ( 15.31 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org 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 are already handled independently, but register writes from userspace and ones for reset are not covered. Trigger the code to reload the PMU configuration in these code paths 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 | 6 ++++++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/arch/arm64/kvm/pmu-emul.c b/arch/arm64/kvm/pmu-emul.c index 1cfe53b6353e..78cfa8b0964d 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; } - /* One-off reload of the PMU on first run */ - kvm_make_request(KVM_REQ_RELOAD_PMU, vcpu); - return 0; } diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index 26182cae4ac7..307ce37d0434 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) = val & kvm_pmu_valid_counter_mask(vcpu); + kvm_make_request(KVM_REQ_RELOAD_PMU, vcpu); return 0; } @@ -1303,6 +1304,8 @@ static int set_pmcr(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r, val |= ARMV8_PMU_PMCR_LC; __vcpu_sys_reg(vcpu, r->reg) = val; + kvm_make_request(KVM_REQ_RELOAD_PMU, vcpu); + return 0; } @@ -4259,6 +4262,9 @@ void kvm_reset_sys_regs(struct kvm_vcpu *vcpu) } 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); } /** From patchwork Wed Mar 12 11:55:59 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akihiko Odaki X-Patchwork-Id: 14013503 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id DD69CC28B2F for ; Wed, 12 Mar 2025 13:02:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Cc:To:In-Reply-To:References :Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date: From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=TCAwKKa1hp4qKIGSTMOyXPQD5trWA7N2WyBVQxGWCbk=; b=q/Z61NVNquwI7Yb/0gi0xjSlyC Wd7T52UKJNyPI2PuyTUmCs80rSjfVQ3597zdanCwbuMVcGerrAXgVF9ZLCuBnVxJ50nGuaOfdrNj3 Gg5wXqedus20jczp6J3RG6xDeZR3eKkSShFIHhe9nn8AH6pfkbNAIBGimaRRKWN53OJEfaRcttSNI BiIWYBzAcKLZRqOBlZEfIDS0KsRfoMzALGCRfP0qBqjzyHyaf1o/PuL2+2q4jvZjvSpDEZ2qPa25K TmR5TDeScHKRiHzLh9ZdANcBrBMhC5dQEUFmgd1s4VS/ePR961SbQQV9diJ8dubyi1E9EjgE5Vq4+ s9wSkJmg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tsLif-00000008UCb-420v; Wed, 12 Mar 2025 13:01:57 +0000 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tsKhN-00000008KRR-3CUO for linux-arm-kernel@lists.infradead.org; Wed, 12 Mar 2025 11:56:34 +0000 Received: by mail-pj1-x1031.google.com with SMTP id 98e67ed59e1d1-2ff784dc055so9089504a91.1 for ; Wed, 12 Mar 2025 04:56:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1741780593; x=1742385393; darn=lists.infradead.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=TCAwKKa1hp4qKIGSTMOyXPQD5trWA7N2WyBVQxGWCbk=; b=nG12mpDgMiGss7WEdVNfURP/1wJDz4+AhLp/Zg2Ib8r0BNMo2aM1AKP9+nyTDB4nfp BpTsWx2rRISCnkot/nBAU/h8I5L5jQr38apDfrVtgTX2rXo7QIFwD0Lfp5pRFF7Kvd3U fu0e91Ol4QvcEqWCfnxRxX117TnCZHgWbUfpUTVX2GFArlaJAf2TCDDZDeAb6p52/Ia9 jjPhct9Ay9xf2a+yGydyyc5RVL0xTC/jdwVd1gCnhHMWaySV6VXZX3Mn1A/RJZQuB1u9 SX33hjMcvxh3dXqJfhkFmvJXazYEZbLeWnq1zhvXK9P5RPGhUFLdhb3VCNXkz6yJkPPm VZfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741780593; x=1742385393; 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=TCAwKKa1hp4qKIGSTMOyXPQD5trWA7N2WyBVQxGWCbk=; b=wRvAaapofgMv/aPOURpt8h8DDBhpjF5IIuOVXGqqcoWQ+wAuEFhLqy9oRlvUaEjKX+ JRouNw9oBMCRwththy/8jm+f7j7JNB/UFpNEk3+zkPhS+V7trtXxj4xV+XB48yF/aEbH hORWTyJrMou4oVQIIkK+89+57Q3XeMEUsbWRDwrnCkmsFU4aNgobYkqsJ3wp4T1MAlI1 H5uM7XWzA1RnaCiunFZTFvxAXD/Wu4YyeiYixvpyx71M24nir2QK2hiDUwXVkAJwwakB JQJGoFoRzZTvei/m2RCL2Exew33KigM95Fe4v9T5kfvEig5TkUPzZ7aeu5y8fflis+2U phVQ== X-Gm-Message-State: AOJu0YwXgnoLJZdwENY3DwMaEr5sDogcsrTsnVBfOSR/g6gzziR4hyE6 kxSUtNDB5vozsSSAmXFGFTSca96RFksMKzqFHSo0WZLEehF6/VXZHEQIp1nEno4= X-Gm-Gg: ASbGncs/+6HmqOiwVFVOwUpsHPl0tVVIwBW9jPQoOU0NmXN9qL7Z47fOaIrG6WOTeWY xKS5td7IG6OKm6KKTy76105hIdNLFAX8QhSVEikfD+/eRkHEswbmzzC0nIHG1v3qXLci0JFZ3ip rqhTORfzfwEGYwRVD1pnEHo9mWgoaCqn3/aXiNfgnnXk3vjb/Nlx+Z/UuqSV2Yw2vow4abxSHyV JMvL3yb9I6FG9eldhyS8+CmvmoVxn6E22DRh421sX4n5pGPKeFCufdgjQ/Ba9rRM6Zp42oets0Q QHvMViN52MqVh6czEhyR2LJ1XLL7y24Ibng+MYwlcAB322Vm X-Google-Smtp-Source: AGHT+IEt7ftF0+X9PEZlO2xjYhcH13J+1KUiYMwfGTA62pbfX70/qK8tdqWOcbGMQp5ETZdkFMGsvQ== X-Received: by 2002:a05:6a21:6e01:b0:1f0:e706:1370 with SMTP id adf61e73a8af0-1f58cbdcb9emr12506243637.35.1741780593100; Wed, 12 Mar 2025 04:56:33 -0700 (PDT) Received: from localhost ([157.82.205.237]) by smtp.gmail.com with UTF8SMTPSA id 41be03b00d2f7-af2f01909a6sm9911068a12.7.2025.03.12.04.56.30 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 12 Mar 2025 04:56:32 -0700 (PDT) From: Akihiko Odaki Date: Wed, 12 Mar 2025 20:55:59 +0900 Subject: [PATCH v3 5/6] KVM: arm64: PMU: Call kvm_pmu_handle_pmcr() after masking PMCNTENSET_EL0 MIME-Version: 1.0 Message-Id: <20250312-pmc-v3-5-0411cab5dc3d@daynix.com> References: <20250312-pmc-v3-0-0411cab5dc3d@daynix.com> In-Reply-To: <20250312-pmc-v3-0-0411cab5dc3d@daynix.com> To: Marc Zyngier , Oliver Upton , Joey Gouly , Suzuki K Poulose , Zenghui Yu , Catalin Marinas , Will Deacon , Andrew Jones , Shannon Zhao 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 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250312_045633_808630_A830D6A2 X-CRM114-Status: GOOD ( 10.24 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org 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 78cfa8b0964d..2d19c6048091 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 = kvm_pmu_valid_counter_mask(vcpu); - kvm_pmu_handle_pmcr(vcpu, kvm_vcpu_read_pmcr(vcpu)); - __vcpu_sys_reg(vcpu, PMOVSSET_EL0) &= mask; __vcpu_sys_reg(vcpu, PMINTENSET_EL1) &= mask; __vcpu_sys_reg(vcpu, PMCNTENSET_EL0) &= mask; + + kvm_pmu_handle_pmcr(vcpu, kvm_vcpu_read_pmcr(vcpu)); } int kvm_arm_pmu_v3_enable(struct kvm_vcpu *vcpu) From patchwork Wed Mar 12 11:56:00 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akihiko Odaki X-Patchwork-Id: 14013504 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id DFEC1C28B28 for ; Wed, 12 Mar 2025 13:03:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Cc:To:In-Reply-To:References :Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date: From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=u2W4Xv+9VQWQQBSPngguZ3XObUjYW0AuhHcxMG6Wj0Y=; b=rz5uxxhiopjJSDV4eu4EH6XvSC Oppi4jNDQIzCNcrWAG1qaPxV/M9CvUjpeEabsCF+0gHqNwvY0QdJlyzdcAaXMHgYlNXVZ7KAEY7gd 4Tlz1muqJawU8FI5kBb4QwzRgoVvG0rOdinikcpFGoQaZ13gDX/awXRu1pZMOENMWKvI/MmfDfFml BHro3lX+kJdIKSQFBaJGHhCFDyqZKBldnDPWjqFb8ghdXBgKZJm0dTk5KtL3jXwQwKw8LgkclW1s7 b5Nqb9WFPq3/Hu+ML8a0xTWE+26q8fLmUwmdGB5X5aLmpeY23ZvAoFC6yWS4lZdWCBPiYOjID+D7f AEJ+o0oA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tsLkI-00000008UNI-2wP0; Wed, 12 Mar 2025 13:03:38 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tsKhW-00000008KTG-2qrT for linux-arm-kernel@bombadil.infradead.org; Wed, 12 Mar 2025 11:56:42 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Cc:To:In-Reply-To:References: Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date: From:Sender:Reply-To:Content-ID:Content-Description; bh=u2W4Xv+9VQWQQBSPngguZ3XObUjYW0AuhHcxMG6Wj0Y=; b=BtQexKMbfxFL+amink8bxuwSdc P24lEbic+hRIkYOCaz1rKx+AR7IMhD/ujOf9z9CffGrS+iAxWFjt2bNjsEpnGaT8zUHXqSN08cltm riJM0QDdRZYvVE8eU4PIfAgrh5wruD+cDzfoKZ5YK/XLIsrSNRdWq1BlVsef44lbnKOFGViQZUH/F De7LOww0shSY/E3pFcW0bYUaHZhkNh3JzEekv7bqCfP81nFgEPxOgwol0ka4Yf6/ntX6Sp3JTd0H+ /ec1dbExNe/2Bk/GukwtcMJ7FgzJ5uDnJcTjbRkNTVjyvyJJMK1w5a3aB5g8M5UxXvzy4D115pIP8 xPe60Hag==; Received: from mail-pl1-x62b.google.com ([2607:f8b0:4864:20::62b]) by desiato.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tsKhT-00000002Mql-3jWO for linux-arm-kernel@lists.infradead.org; Wed, 12 Mar 2025 11:56:41 +0000 Received: by mail-pl1-x62b.google.com with SMTP id d9443c01a7336-2255003f4c6so72464125ad.0 for ; Wed, 12 Mar 2025 04:56:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1741780597; x=1742385397; darn=lists.infradead.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=u2W4Xv+9VQWQQBSPngguZ3XObUjYW0AuhHcxMG6Wj0Y=; b=FFBMyyS2D2p+FVUhlFeO7/DJk1oRaRxxdCl3Ce8j76qqzMVvXwdW8B5BzrwuSEKbXB TzGmgBxVgj2psV9JNn0whh3lQZXxzwFDQjQolOCLjvzwOGtLEaQ7Gp2uKRi0HQeBKCKy RuchIj4sGL94WZNt5VwUOVLdrjErbEQ2YCkFdPx3rjwy1vZkQjDEq7MLjjs3ebj1ko0b y+p9boUSDHWATsLXgBnML+ORDQPTYYEMSs0id4DUfM2MG2b/1nXn78JGnB65CCVA+k+M Hx3SZD+uW5i8mDXSzgx6/v38eQ65RXX2UGzMoHZkL4e7nkgDFVmYNVma0351iC7s+Jab aEaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741780597; x=1742385397; 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=u2W4Xv+9VQWQQBSPngguZ3XObUjYW0AuhHcxMG6Wj0Y=; b=tQTLj0JoohEkw0Sn3lH1a6np0+gBS3z6IXQv2KgiKFANx5YfZ7XxjpsUzphkvjCfKY Mg6Kjh39V4yBbk/ZP495Rw1CP+Eb0igyJo0rU/7VAQQo6JuQb1CBc4HG/9swRBGC0AxN ++EIyYW77kPCe3RZfvd3NTVf2IeP8UURn6z18gpiI8MPyJsldbghLK+qcOS/iLgkNgzR 6OsEzLaH448UnUpK6+HdPA9uO+93FYC+PzqIqJS/pXKURQNqYq3N4wstDzRvcNsMABqJ JLsk3sFYRlclaNhnIga6AA0ViLFz1ThyP6ESZpg4/0RqL7rHPCVUtKN3vhsuYNTnnU9F B+ew== X-Gm-Message-State: AOJu0YyiIi9R6oKqiW8i3eVEbhXyUgt5ynJMc668cBVdqsLnpM0zag4n y2oFYYsbh8qV7G5du96q1sWtvIcbCWQmLV9yBuK4ZlxMkXZfBmtkgqvYOv58914= X-Gm-Gg: ASbGncu5laiHHC+7Pv2jn6LewBnL9qkO/4P+Ojm6r+ODaEuitk65jQFcLIlc5D1bM7b UqZvxQGmoTcs8Wg57n+Z4TT/TBj4HihlFPsjSmN0f2tC/jWcZs41AvA+3+tTTwZ4dg4Pp+ypDz9 0j8pz0WKoK8l3PrIhkOgsW4FTQd84rjvwjN40ow4yjnnmNJsqin9rNot1aKmMyi8aluI70TZ52O jn+mZxFWeUgeVNqBF81ow0EsNn3L/6PNTD3NMnLc+ZMpG/P+E+B6SFqF17j6vXmAgclnldu7+X4 6YWe4/RbAE2tDGHQRTiFmXrXij2iWIe5BKGTrIVqcHVxJJbH X-Google-Smtp-Source: AGHT+IFKd8JzPs00shGeDPszPVRqf7Tdd+CUl4POW8V13KNLbNVMybkA3YJRReDGIm9qT/E2zqWsNQ== X-Received: by 2002:a05:6a21:9d48:b0:1f5:8a1d:38fd with SMTP id adf61e73a8af0-1f58caefbf9mr12020498637.2.1741780597517; Wed, 12 Mar 2025 04:56:37 -0700 (PDT) Received: from localhost ([157.82.205.237]) by smtp.gmail.com with UTF8SMTPSA id d2e1a72fcca58-736d4f20913sm6410407b3a.13.2025.03.12.04.56.34 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 12 Mar 2025 04:56:37 -0700 (PDT) From: Akihiko Odaki Date: Wed, 12 Mar 2025 20:56:00 +0900 Subject: [PATCH v3 6/6] KVM: arm64: Reload PMCNTENSET_EL0 MIME-Version: 1.0 Message-Id: <20250312-pmc-v3-6-0411cab5dc3d@daynix.com> References: <20250312-pmc-v3-0-0411cab5dc3d@daynix.com> In-Reply-To: <20250312-pmc-v3-0-0411cab5dc3d@daynix.com> To: Marc Zyngier , Oliver Upton , Joey Gouly , Suzuki K Poulose , Zenghui Yu , Catalin Marinas , Will Deacon , Andrew Jones , Shannon Zhao 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 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250312_115640_024718_DA0C4179 X-CRM114-Status: UNSURE ( 9.70 ) X-CRM114-Notice: Please train this message. X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org 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 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/arm64/kvm/pmu-emul.c b/arch/arm64/kvm/pmu-emul.c index 2d19c6048091..b14655dda6db 100644 --- a/arch/arm64/kvm/pmu-emul.c +++ b/arch/arm64/kvm/pmu-emul.c @@ -831,6 +831,8 @@ void kvm_vcpu_reload_pmu(struct kvm_vcpu *vcpu) { u64 mask = kvm_pmu_valid_counter_mask(vcpu); + kvm_pmu_disable_counter_mask(vcpu, ~__vcpu_sys_reg(vcpu, PMCNTENSET_EL0)); + __vcpu_sys_reg(vcpu, PMOVSSET_EL0) &= mask; __vcpu_sys_reg(vcpu, PMINTENSET_EL1) &= mask; __vcpu_sys_reg(vcpu, PMCNTENSET_EL0) &= mask;