From patchwork Thu Mar 13 06:57:42 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akihiko Odaki X-Patchwork-Id: 14014414 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 450FAC282DE for ; Thu, 13 Mar 2025 07:01:34 +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=QK67PUjWu+hK1ngqeBmMPNnrmm OjF0K7o8a1tgqKDCTzpxCir4PMtFBRxKn03v5fYhNj2qmqOzkLmUpyCkdgXfQ8V3cezp7AyJYSQa2 JsizzIlMalmNK6DzELfdzIEDFS12tLahfub3UaC+X+32Jyb/sUqfQfGjmoveTk/K2ArtxgtEO/BPH k44PKec0Vf2qMZj3BJ9h/lVEceV0l6q2xT1rY8xfcJboh+mZUuoTYsPNasaCGAMIRWmsrkQ25CnLS 3lVQUJeX0VnV+emedsfJlA71Lfjm6f7UCadlKO+5vLTeAR7vzUCToe2DQNJv4psLNLucqGK5MUDVa 1dc+Pusg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tscZF-0000000AHf1-3evM; Thu, 13 Mar 2025 07:01:21 +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 1tscW2-0000000AGxm-2C5n for linux-arm-kernel@lists.infradead.org; Thu, 13 Mar 2025 06:58:03 +0000 Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-22359001f1aso14744495ad.3 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=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=VIPEUNhegCXRKCZj/ePqrH5FOhskGl53WTXqn+66EYJhj+U8sHSILONUHgD8xVVGT7 0RxzKRP4PtEnawqEstQ6SSnmLosgQQbwW3UhSqte2sYlQO+DLO+AhOrLLrBL8vakpJJn cVHYjiPWoi9+5j3jNa84ySPCdeFo+QlMLI2vYog4yaNFax7nhPALw2XaHuBq4v8narDI 02FuAC1WDNK/OF1fRnLmh9QZ5ET4AgKmmLs75gxp5cQvdPySXyVcfXY4wlaaPAbUH70i 4M2GKOGU7TtWxOkbeIxsdtxcUkeVEbinfp20FEgWCluj4yK2zogmhh3RZvqPVbFSwODl amLw== 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=oYCLmkPx6hz+wxQ7VthpyWUmX6nJhaG+DEoyDqhTuFYFmASTNw3QRQiE3zowyX2YZB +JBdVb7H77CFX/XZo7QELi85N/J+wXfN204TsC80vhSskyYfqOff2RgEhX4Hh5Q52Y1k 0YMryW7ViEF6EC/z1WjYjkLIIe/ZJk7jSEmxcPk7PdzftRURhh55n8lYx+26/528sSck +aFQXa/u65MA93qb0/gBOZUyLffX+FtoHaJu98iyo5Uy+e4nv13K0wgnD1AUE5xDmOdH plcqDkgILKundFZSVh4RZ8il7ImF1z0rEZvAMZzdkEBOzn6vs8Zm7no96C1w3zi5dVw4 GmWA== X-Gm-Message-State: AOJu0YySQMfxV/9h0Sci84UJYOErzq7N8byHYlxcBK3vLAmP6NXYE7kA +y5A05/rPHE0mbAQJuZ8nJkrtayBFCkq40aEZRK5YmZthcmi7fSwds8IeUY3s3k= X-Gm-Gg: ASbGnctGREOj7FgRLJFrKcKmSP14qV0OTqifZ5U9ZZCx+GDbXcn1of4RG8+/RI2GWm5 iLLQ8pr/8PMhoEUbmtVZfWe6IeATL5rXAnirwMDynMqJRH+gdV0x1qj7q23xYISQdmM7mSU6Bsp 3wBjLvmCnmiA5sMnZF5aM3zDEwSpUaljcGAFPt6CNOXOenPaMJBVo0No5i42BjYlza6XD91Rtm5 5laiXHp0kjms2E6gR/9XN61/uzAFaCJdQn43R+tlihdiFs2BYlG4YB2afY5RfRlPJzHtm1FH3mB 863VBxrmINWtsrLjx6biVt/o42eVvaMtPMqrdBNYM1GE09+0 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} MIME-Version: 1.0 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 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250312_235802_584110_F57D8669 X-CRM114-Status: GOOD ( 11.90 ) 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 Thu Mar 13 06:57:43 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akihiko Odaki X-Patchwork-Id: 14014448 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 AEA8BC282DE for ; Thu, 13 Mar 2025 07:03:14 +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=emEcgI1IcFZcczsFk7v4KbqV5pyU76mkqQgr8+I1+js=; b=i3quEH9aQEBgqrif6hgDFurUN2 ryPUU6mlEM7Ac46kEpcBavcoCUuwa/FhdVA3hK7dz314EidzGYSMUlC5quwAWyqNAw4y7g1P5Rc8O sdh2fz0Lh4o+2h5CYfDhFGkNir+JgC2HbzAIBnDrv/fpSSR5X+8l9PxBPlHbZKQC25tieCYYjA51Q uqfUmvp9X/Fr8eGSk/iMajRL1qzpydOX4WN3/6Psp0sMAaYRcfr0YXNOv2nXiXKMqHI6QPtzJ0+v4 LbTLyk/hGMxQPZBNKOTqmL9UkPVf38/U6HEkHpj8RjYzP+hT4RMTgt8a7ouRGXm58DLuQhKl7HJ/t jWoUISrQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tscat-0000000AI3f-2bxa; Thu, 13 Mar 2025 07:03:03 +0000 Received: from mail-pl1-x62f.google.com ([2607:f8b0:4864:20::62f]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tscW6-0000000AGyC-3Nsp for linux-arm-kernel@lists.infradead.org; Thu, 13 Mar 2025 06:58:07 +0000 Received: by mail-pl1-x62f.google.com with SMTP id d9443c01a7336-2241053582dso15434205ad.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=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=emEcgI1IcFZcczsFk7v4KbqV5pyU76mkqQgr8+I1+js=; b=oZMxlDMJ/j8Cfgva6+govv7BLl/F+p2qeXd/+8MCpe/BU1JF96ezFYmpHZ/XoLho5O awilBISq/RJ8UHygucoe5aQqt0OweMUc47rjbilDo5/Ve6wvTRUflpnDAScGoB5uad1U Ns1Zax1tPdWmiK7z7wzfpfLq2QUAjeHJlEToT7Ehu4r7r5azfhwXOdWrUPqeRvx3mX/c 4HatZ5roPQvjo7wPQB6zOYznAT6tOIH7/l3HNRFo4UMez3LA0VR8nUo0IrLlf66XLb/s YO7ZRR1g2ScQa+jOmy66ZqanNEB4rJyVk2A7SRec/eVVff8eRxaRFx8CuUEnrZ7hxUI/ /J1w== 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=WkNAuwJ+orZIqWkIDgYqkbta2K9kCvB/J0lTn+uR9JtvdEDh13IHAMD7d/RWA+XK6Q 9+BGKDWiTlt+JS6jRsY0quZZ1O7wdrUcG/cbap6ohTaOjvTFT0WtkgZfbSRHipxdF75I cDw/jkURW8z0Bce7WIlgqkJ/xn6a5QD/9yb55o5Sqd9yeHxOfDtz62Hf1GUO7cUv+zMy trfFThvHk2XOZaX5qmi7evnGkKbBcGJtNx0RUxKB6UaAXdh2qBbqZ7gznGmj2fuioVWd nNIMm5Sak34e3eT8Rf0MtxGcY/0PMyxkaT0kTtYc//iSEFMoN9MWBDieO3gwbDumundn oeeA== X-Gm-Message-State: AOJu0Yz9yPkJ5+j2eI9Qrzd314kMW0J+CXqwfLufI2GBaCv/qtTaGHb6 Ae8yGUsgm13jdcRz0i3amvU/gL9W18HwUdsg76Et5/8yq9TaW/lqRhBcAKDljjo= X-Gm-Gg: ASbGncuz9amk8cFFHMBg8BM+xbOivfRYKL5SXK/99HRggzzg5tmo4QXp8F3NoiTrsrD yZ/DucUiHxSufikPCeex3Q4AkJDo/huKGJpGg1vYfA8NXRiZHeCvQoGSULoy2VB9oXWWAJCktcZ +OO6N0D+L3OnqQKdOkcExDGLQFqgrETo/dII3NWOa8f+GQVcrdKySfH8hhgt6SEPdjKFEM8MeF+ zuIULV7thEL6T4xHt/X1+qpfS+DYwnmb5xNpnOp16bOCBCDOaW/FiOpUEjdrGOEpaBkZCUw/nCL +WZnuTD07mSt5XP2wh0a0y3fFpnZO/O9GR8DXEqyiOprSMCF 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 MIME-Version: 1.0 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 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250312_235806_868927_2732649B X-CRM114-Status: GOOD ( 18.65 ) 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. 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; - 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/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)); } @@ -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; 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 Thu Mar 13 06:57:44 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akihiko Odaki X-Patchwork-Id: 14014449 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 72CD2C28B28 for ; Thu, 13 Mar 2025 07:04:56 +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=i6iz2Tb4ku//H3AxfAexQ9B2Bw11aMopngIm2weGw1M=; b=vqZVnlW3vFvqBMXZK0tiZ4mxxX 2QE1R8/WRP1M/KC4i36J9Fl8SQEWT5oYL6YPqXs6bYHtg58cA+ePv/sI9F+17UgSEYZkQTq8/xVv3 ojJ+MS0RgcWRKT5n0aWCD0n2OrhMGOjUAiGtC3zJ96M3TAnKgY1kkLfDOrHQ/1GsjGjSHb9coCBx5 BIpBRwlm9V5/PJ5wOO0uvvz07nAAK/Q8kkUtGcx06LdnIyzuLb33kTwDcbTy1F09kRKXEK1ozBZL8 p7V5AdmovNA/Mle9+JykhLk58YJCHI/vJHlVURxJUJgaUKpSLmwmg2OxZEh32K0IQpAere9t66pK/ AahwIyjA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tsccW-0000000AIQk-1amV; Thu, 13 Mar 2025 07:04:44 +0000 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tscWA-0000000AGzn-3ast for linux-arm-kernel@lists.infradead.org; Thu, 13 Mar 2025 06:58:12 +0000 Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-223f4c06e9fso11001755ad.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=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=i6iz2Tb4ku//H3AxfAexQ9B2Bw11aMopngIm2weGw1M=; b=T29iSIaXz514OII6dJoDbcqXrjrGJqsQZPeJuZYgrlFxP+hMvPmCYgeOLW3oOT3do+ DJ+blnyVYYWwT81FhYRQIppKijK+Q+211Ywd7HgB4OHSPXnAaLX5IzJorn6zlOmK2cR7 MqL7WKK7vWI89pyhx9xzB+xH4HLkMOJzp7yxhok77VBjYPM/vJ8BG+Qyh9ucCIG2fsrj JvU++FHi2qvpf2BBp+/wpRnyh8F+3261/fOtbPkDWrh721he7tUVAHASYTaveBr2kT3d jb/xuuGX/uXbW9klC2c+IezyUYcRIaPIgVAMeRQEYNmku+YI7QhKh1ghTSFeTHCCUGHN 2ATw== 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=WgwCSbOQ1je7FIjZuX7kWvlROMparDqOPcwzujCTwyA6apXHX208vCsQB8A8+Q79Lp p+wDR4z1SCNa3LsROEuy+yR6U3crG6PwRJNMLupo9sjjhJLL7G8tmBfnA82wYLtyJpAk ZkXcW8Z7+ed7XKSgA52jPeu7M9GY1G9tVUXRCjSABUEZeqFuBQHixcca8QU2elQQ3m4m 61cBULV7XGSmpltY6mdvS2pSKUCSyRSU/rm9by61WON+YEQNqVg+cXlTbdompFCNX3Jz a1JMQ7Ig2yg6U9oWt0Ssk9vPvrKwRAi4dRyKOJvTO1c5P8fEdLFcJXAuKnx6Ip25R5NZ UTcQ== X-Gm-Message-State: AOJu0YwJSnwSWHM6xJfcGZlftMWcA1BgpkTxQx+0M/0pjSf7RoRak0JY Mm0zttlbg4Pd5ctfB6QSQmmhg6lrummKHi9edRd0NoBNhEUad+aMxByFqe/RPvk= X-Gm-Gg: ASbGnctt7d2h7mNdbjxsPGoDxUqw5/ojJ++7QAkH/9dGwTbIjLU+lVE/lqFoU4fiaYU 3LdDsH+VEKygBADMdT/yzu/eIiXimGqn9bpuOMsnE+9mFcIhalHdR+b3ECMaDaEbBr8TfIzfkYo kzNU4K05d2/P8+9lUbQl0TSrBmBlVS9PX0Nhc/zz/So4TzbMyfPBVeRrxrjowe/nckYzUZURQjT nehcLWWBUmtU0atUbS3EDnLTBXSTiM7+i+4paqQossEx0sHdlT6ik4Rws6ywOOSgn1Fbfs2REKE gtkiutZriMmZxk181OyW0LagR8msRhJjTt7VsD/FV49fK9M/ 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 MIME-Version: 1.0 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 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250312_235810_901060_736A5F17 X-CRM114-Status: GOOD ( 18.59 ) 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 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); } +/** + * 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 Thu Mar 13 06:57:45 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akihiko Odaki X-Patchwork-Id: 14014450 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 620B5C282DE for ; Thu, 13 Mar 2025 07:06:37 +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=ov1QC08xmBeOUCrm+sZTVT7zWaIK1Z9CIL8k0jXnjDA=; b=WSsjAg8eooHme/OzNAXuL3oT49 tl4W9Lvfc2j/yHOalXES55RN4Mez/ardP77OzVYYvVjYW06O3re4Gmi2ZTaOF02Qq2taIwuYQtrL4 yCcpjD9roQ8SbTTdXH8zjjqUrARp2mqT70XthnIgOU6axJ0XG1h2XPpBM2Qd/cwGGmvA2eC4U0WuT 1yyg6ifccQF1aMlRKBcjjBBaj5e2/kRivQ2y/5/2tEkGnHlvXjKG2k1JSNFmQrI3G3ZPYtUP/mIDe fF+iTt0m+3bAQKEw4yKcQOkY+C7U9G3JIpRhMhSVrnNa6wvXXg6tywZHLXAwcuPPcmRS//IdG/mlZ vaK9qc3g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tsceA-0000000AIw0-0jyA; Thu, 13 Mar 2025 07:06:26 +0000 Received: from mail-pl1-x62b.google.com ([2607:f8b0:4864:20::62b]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tscWF-0000000AH1e-0zSX for linux-arm-kernel@lists.infradead.org; Thu, 13 Mar 2025 06:58:16 +0000 Received: by mail-pl1-x62b.google.com with SMTP id d9443c01a7336-2241053582dso15436615ad.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=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=ov1QC08xmBeOUCrm+sZTVT7zWaIK1Z9CIL8k0jXnjDA=; b=2eboIbxjjn2r4D/fixNJ3LnmnhfZk8v5pRTaU78P4/zOd0peBcj+724s8rhrwwx/Uf j9YQIkqJEPZ/xKG++WEr0KTX30MEfmpKR8nZ4aipgN8l9E5oxzj4dVab4LIQ68PkQSg2 rUK1/613nqWwzvkwW10G7o56YnNUo40E2Gw9A/w4068SL+kD42bDy8xj2qin609/+GKl wo82iPZC4rwLs8akH3Io5c//MG4fUYKN+cBG/27WYYydtbhHqZrL8kg9jzHRuLUsPzCB dF7az9GYtJf3YyH0pYPLK1/To+Ha16EhlyCNLv1RHSEt1IkOeG1TTj6VfIE4Lc5vDo3R e1Ag== 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=YQlhk91x78CdMVYz+UKrw8nMkPfyiUSDn8+H5HHDwVTKeTHiXtS+KCPQHoretIEIgb VUPQvRkNNvaIItJjlMx2+AWAwFQVAzu6HK45kl46jQfzWG96VfOkZ1tWUOintBJchvwn N118Hen65OALABItltPGIDMuHXoKWVMMjddpBm0EIFhnyAbctvKC32OiYAXeQOOKemMl jXLZtDJH7b9s7ie+TJ2Z3Lw35NaQ5Dc8hiKp7j9l5+8zNhir8miixD8MZwmn1I5rVjsD y3ho+e6PcQVyu/uj4S6JwmD6OwwiBckqHX8/PLxSuUFIzCgJayuy6vRopNLNxvtmNlKo DpXw== X-Gm-Message-State: AOJu0YzTlIXDb0Pq0l/YEnmKUjHb4s8B44nRTlyRFVTSryBLbNfOzumT n6JJdWh0dAVgXL8D5VrybfIsco2EdoYc14p5CfHdT5glB1Pw6beKFU2bzwY0IZo= X-Gm-Gg: ASbGncuC6Ys26Y8onKgbUhs0S2caSEhu7qUtozoxf8aD+15Y9BzsyWV3asnkemCerlm DofuDVGKdejJwPbCGyNeNwBmuVcdUPCpW7uMvFWxLSvNwrxLKt+8S2o1Gow38NkWp1RAwYv2i08 Ym+WDoD6ypmo0SGkOBgRkB0Z1Ck2LifMhum5YtJotLUG06VfpxjZhuRezvEWtG2v1/zdCyUzPkU tROT+W0n5X749QQfNb89Whm/YwLpRW8p3+uwEpYvnfSshbiy9FY4dY6JSBJSYIlrS55RRz7HibV pp65aBXRNfvocYpAP4TQ9L1yq5XyUT6g1IR26njTpwTlw7aE 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 MIME-Version: 1.0 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 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250312_235815_278062_C703BA32 X-CRM114-Status: GOOD ( 15.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 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; } - /* 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..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) = 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; } From patchwork Thu Mar 13 06:57:46 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akihiko Odaki X-Patchwork-Id: 14014462 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 102E4C282DE for ; Thu, 13 Mar 2025 07:08:17 +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=dV52GHaIMEPgQHguZuBTFzmZYTI1o5W7vkJBLWdUl1Q=; b=sfhBiQl5XukZX3wfEKjaED2hQv BUpApRN6mndmFWvY8fiCtMY3HJ1GncXWEcyB8Dw1q09vNe0Dqj7tUmmPavsrI1BVZ7S5xDwhM7gGK qcyPPhEdW8G7X3TNbBdvGTqBmdd4o5kaUZYPnTfUal8Ipmxwb+aA6AkdcOydQ6jdpzSPHftzDgWCT j1UjQM46rHX+ihQ/q4XwtdielSUKozI8Om5OOwiU5zlkmvDZ6NEEFRV5hYR2yP9iI7zNBBe8VUTyT DYZl2Y3FTup0vkIePF8AwHoWab2tIyqzlwEwQoMMS9eK0LRHe2chL+14rIIPz0FZWNgGSCk0PTpOr cqING3mw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tscfm-0000000AJNR-3wY5; Thu, 13 Mar 2025 07:08:06 +0000 Received: from mail-pj1-x102e.google.com ([2607:f8b0:4864:20::102e]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tscWK-0000000AH2q-0CP3 for linux-arm-kernel@lists.infradead.org; Thu, 13 Mar 2025 06:58:21 +0000 Received: by mail-pj1-x102e.google.com with SMTP id 98e67ed59e1d1-3011737dda0so1181367a91.1 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=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=dV52GHaIMEPgQHguZuBTFzmZYTI1o5W7vkJBLWdUl1Q=; b=yt6wTNTMFvFwA/7Gw0AdNU90x9WbVKR8s9LhSYZuokZjw58ghdkEd3TLrvsUc1R9Sk I4GI2WvF+zXkX1gOpNAg6Wawo+LOeuEJnX97p0J7cIHt4Nr31wD/9JbE7clCT4oXObR7 fHjHDqGWPqSsqYCzj+AmsZ4MkDK2Gg4ecTAsIH46lHYUNlygLG/qrTyOYRwav4yWVyPW k2NktIqrct7PT/kd/Bga8JYGvO+MwkIA530P6fhB24f6K5wXGURGHVDAjPbMvLZA7n9j nMXdOb/4YOZhClrfkg7xWGio7sMVXjNGrY32NQ4cnfbrfsqTizy/BuVxaupv3KddOjnB Ca6w== 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=Yv3DidElkOEeMFS80X5QrN4HI4aqwn31L57LTmL4jtG4tkTtuUnxxw26pMD8rRF8ZQ pKRgnYgKDEcuf7o1vwxeAe/KdvJT5DUv9DoTijNf50I/ONuYtWJ7dt/bVxuCj7sUqEfq Iqug371OMuC02SqTbG4bjm0Gta3CXl5na0z0N9croz56fd7o7eGffw1RjnpPcpUgAYv/ 2GsSdK6aYBhP8Hi6BwTdT4+xGCWbB9nKKXSMFsnBuxeUYi2harGkeoZCQs/yU411Jk1U AX0jUBFxEmwp6BPi2uMMaW0w0YMXRahWsQuR/3icVQtolDfRP4GRGVwr8o6wN63rpISH uqPQ== X-Gm-Message-State: AOJu0YxDp2Nr6j92zlttxAVkV9Fy/3764x3T26bPHsGEgwdOoFAyXQR5 nUrdmstQzQCgWHdo8mXV2RB+wZ46PEwUVShsGZOenhcw6XBrYI/Ll5GBxoXGy3I= X-Gm-Gg: ASbGncsBOb1D5dnJCDfQ0vnN3VrdRD59pvIW1mRKnKfattBl37+KNwvq1LhADD9OI7o /QcVbGQYyuppZWebYLj08wKgyPljuQZvZ1mewdj3rN7Xr+OT1eena9AFCkRKp04dVrIS7Slga8O EQpwtRbCBOrdyd4H8PQeUjjlaxeyWyda3Rb80FLNUKZbNuxVPktHbyPUWf2Fr/moj/klSIi+NBN e7VUSZdU18GLfLfuLZ5uCw39Gh+PZ+oQhuQZWB0Ulrva3fYjVd9z6LeidsxoV2zs48yRwnIOxuw FtrksUJeuK4n/FTvwd4URP8Lc2x8wOuzoQMn+UzmqCPEz1lx 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 MIME-Version: 1.0 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 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250312_235820_089290_8316A060 X-CRM114-Status: UNSURE ( 9.84 ) 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 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 = 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 Thu Mar 13 06:57:47 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akihiko Odaki X-Patchwork-Id: 14014463 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 BE169C282DE for ; Thu, 13 Mar 2025 07:09:56 +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=NkHO/0se169XNtMWH0w7f9TQn0BTGs8vu96SI051qqc=; b=LP3k/0whYRb3PppjpSVo0S/Jgn Ga7VFgmWZ1M3ZlaUy4IAF5JXRVN94TN8fU53Pr8Hx9Rh0oawXumBI0gSm7pSreTa4sewFP6XSgbz3 7r0NK/iwI/NpIuhcqigmiDB8f2Moc7f1nFJh/KHYvUrXE8vOEnsS0x0SJ5ul1SOierrjpPbxRAA6A Ataz7mMZQB8QIX2i7Sx7KB6nHAzhFNeZI/enuIlHSDesoicbfIld2fzG2+Th47Uo8I856sSXqYvbB LFPWUGEPuaHC2rQMlWzkYmTnKbjL9rcFyfbWhCNUh5Bgt6ZLT94ZNxzg/D3vOTvaWc5DX0WErwC6X X4vIrc0g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tschP-0000000AJn9-3K78; Thu, 13 Mar 2025 07:09:47 +0000 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tscWO-0000000AH3S-1ewQ for linux-arm-kernel@lists.infradead.org; Thu, 13 Mar 2025 06:58:25 +0000 Received: by mail-pl1-x634.google.com with SMTP id d9443c01a7336-224191d92e4so11419345ad.3 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=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=NkHO/0se169XNtMWH0w7f9TQn0BTGs8vu96SI051qqc=; b=buJh3OSmSbz8JQxP+nO90s2bNCMi37QYEvShltfSXHQTrIYpRhKiHfsF1rRH0KkSuP QmWrDVuTavToxgjdFPuWv4C1INccBF8JQxpzsUj6ExxchAsS14m/HfnEQZXjZt3piJt7 fT5hG6Z5Hslho9eyTfAzvyZsCa/ZuoRYvJM3s4tSOlCZa/1p91QhEJP0OuK0KpRGBwWA o7qC90xjZ4YBeeLPT0eAgDzomiBE633cnHo3r1KxhWe/OiVZlSFCP2Lid6WOdQVEMs61 NDALWlhGpYQmXSV4068GC5q/d3rMi0/ukAA02NveYcDi1ohSgY91z3tTQTrM/L/piscP RgiA== 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=KOhjaEjVcayFhGQX/Oo9+90pUbydIcaa2voPPUvdAV+m2yUDezO/AT9pIk9ZcHAcEY DnfMuh3Wsuup7MjXWVEdEBFfKY+Y8RIrGM+Qo/RbAHt7q4PmOtLpYxab6Prk6O2RAACx h8UFlslh+HgToJi8OYgBj2jJrzKpo5atJ9vIbNrpwcNtUwqS2l5Y6Qtqv/Qb0sXFcb7Z /nn8m/1yVdueg88svVzHbtFVIQkjQctyrStn5clGvigVKDFl/lLfKAoY9e6JAoGCKKdy EtfT3HqrExS55V8505fc66aqPriZ1Pv+LXmDIOcTiXWKACy2IJK0WPWm18X7DeLX7QEy hHdg== X-Gm-Message-State: AOJu0Ywhn6db5wAfYdXeLwTXzSwHqki6n2cugPUvD0x6ChQJDPBLnPut jdk6YbgsS2QQJbPWqQo+pllY98gMdkJErsF3J7Q8ZhWoKbyXvbhG/CbF4yAvvEM= X-Gm-Gg: ASbGncu45D954zP++2dLvgy4+oZVaFN9JFM4RR9Bz46glLMl9BEGPd3U4mbkReH+XU5 3WcVvyRdVrWWjWz0w+7QFc2HDMxuEAFqAubTpKe5ppsJicbSJahNEfzGqPDATbIjKWGQYXjASo8 Q11mqZjQnG/LNDIO122fkHutdicPSSXdy9ms1zjKOwQ/f5R9MsiBuNg76amCgcsVNalrdY1efRs Sbv0ywxDScHhM3DUuuGe3K4qBaSoHErpVnaxyoqQ8ahbTxVYl0LQCL7v4LL5ZdkMiuDZ4XMq9MW K9fatZlX26J8nBr0OhFtqmvkPpN7m5jeIId04nPvnl97Cx/j 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 MIME-Version: 1.0 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 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250312_235824_436143_9FDE29D8 X-CRM114-Status: UNSURE ( 9.00 ) 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 | 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) &= mask; __vcpu_sys_reg(vcpu, PMCNTENSET_EL0) &= mask; + kvm_pmu_disable_counter_mask(vcpu, ~__vcpu_sys_reg(vcpu, PMCNTENSET_EL0)); kvm_pmu_handle_pmcr(vcpu, kvm_vcpu_read_pmcr(vcpu)); } From patchwork Thu Mar 13 06:57:48 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akihiko Odaki X-Patchwork-Id: 14014469 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 DBCB6C28B28 for ; Thu, 13 Mar 2025 07:11:38 +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=x7fhBUFv13S4cZKboUgbYf/t6ZbQKDXA1phxFoEaqP4=; b=zs91RuHfPHM5yJ9zAxDevFVES3 NPHiLNmEbYJZMiTlCcpgfjTIioVA04vtLKjKNk8GWEqSWf6FWrRtqUaduxTHNfhgS9qpRJ7kmCgj2 bZegn6vU8cUDOzlwvM323BiZVgmnd8P/J6KoJdJzX0na39u71WCLe84uVA7rSG+w86M4iNoWmK/HX z+gofLFsqC8Na7Sfsbgnh11QIgzKg5VGE2ONTAnlvf7PCQJqREpK11i33JmBCBFY6rI/13vKIEyhB 7bTaW+1PGHPlqG49evwlA38vRGgeN4u+tptvxcoNpiqH3Xpg4sljAgaAwl2U/93xQQ/AKq7mmRyP1 H1M9qaew==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tscj2-0000000AJz4-1yny; Thu, 13 Mar 2025 07:11:28 +0000 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tscWT-0000000AH5H-0whw for linux-arm-kernel@lists.infradead.org; Thu, 13 Mar 2025 06:58:30 +0000 Received: by mail-pl1-x62e.google.com with SMTP id d9443c01a7336-223959039f4so11262505ad.3 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=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=x7fhBUFv13S4cZKboUgbYf/t6ZbQKDXA1phxFoEaqP4=; b=JvSxVGfBZLBVtFbB7sCzN7W1qYFRHLabev0QUSTCfD9DwM+EiY4pQjbUQdW7gELt7h v+W7XggfTlLTRhB/srbNvbC/oYu1hDF9IxwuczswaNnXqpgiqN62rMrjT3cruTt4t5dB xmm1BalJ/lVVAgMY8Z4EuzDfE4E6hBSwxfcUqtUjn7G7IqT+MbuD9JszABkLGbqEiFNH maJ99SVXxklOXg85jp/WctwRGn41JDFHCJ9kCRmVJ85lSM72ST57rZxO2Snq4wLp3i0n dGGRNJehXDxB7Fx5lS4x6Q+oofNx6ZEqXP0vY80DeiP+9Z/JpwSA1mE8X923S52XKytN BRAA== 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=T637xBG3TMImPAhhXlcIl9aZMp+vEmrQwY41aVtdT4VhEsH85dj8KrfTE2qFoX4n/I A9XO/QezOfzoB71Zapevqn/yFdL85XHm2mikiZlTR0Cd/2Z/3Epc+a2d9Xjbz9UFU5jM 2L1FD5/VvUC39effNS3DSEQZ4xnf/dShbLAcSQW4qpKh0dDvezmKfeeFPboCkGKb3yhJ bZx4jYc+CFryPimSSQYsXKUViXF+MEiqsc3ec5dTkT4KvD03LUJ1Ayl4LPbQ/CDsskGm Qk/xRojh7Dys4yHjLaeM/aUKPkSP6AgmIuhV6bnUjClf3MXw4TrmAVtQ0FdRpHNiIjf1 pQrA== X-Gm-Message-State: AOJu0YzUvhlqvVuAmj2krCF7FWgvC5bNXtjQ4WMBTKUEmrl+Z8TgVoH/ UlbYe++Gl30cXYaY4KP/8g4u8YPxQ9ZRY/UuLlvWhPNNmC2hulgTARVB+aRvzB4= X-Gm-Gg: ASbGnctIfEXw7HIyEfUIfZMycQ2JDJu7MSn9tHwT104uN+/UlZzl5HGa7geIPygOrgd i6ugHQMy1mMZZ4ZI1SrynQnTs6C6sOZcBLKgeePc4sScYO6Vb1UWx6pk+9zYlwXS2X1qpNdb9NT Wp7loCVy5xv4W9CuYaky9GLsCCg2c35DkPmtJqn2bawP01do1ZvZrkN2gqU6vNUA7bpfb5y5FUt pExA3VnidDu11NUzVFIlpCth+O3ceewPu6qioDtEgBQ729LumOIvClM8dWohaFFb00mOxNZOtmb iDQn2HjQg9IqyDnujP9aYwXy/rHoHeQzwWB3X4Eakdc+mTOp 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 MIME-Version: 1.0 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 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250312_235829_267261_873FBBC8 X-CRM114-Status: GOOD ( 12.55 ) 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 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 = i; } -/** - * 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 = 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 = false; spin_unlock(&vcpu->arch.mp_state_lock); - /* Reset PMU outside of the non-preemptible section */ - kvm_pmu_vcpu_reset(vcpu); - preempt_disable(); loaded = (vcpu->cpu != -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) } 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); } /** 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) {}