From nobody Thu Oct 2 16:22:10 2025 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4ccxry6VdWz69TXh; Thu, 02 Oct 2025 16:22:10 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R12" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4ccxry4s4Qz3bSX; Thu, 02 Oct 2025 16:22:10 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1759422130; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=l8wOg+YYXSlfwBQZsRacT7Y6S9zJr7SETWhvCIktd4c=; b=w76Pz3Z05i4h1gn41Oo3wtk3tKqXO3gdWfGEfc7PTyrgJEoY06MsJOaEjSeWBD/X10+9xD LTpxmWocL5j81FsCrDIJHgIG2ZzQFwAgdGf32dExjrGT3Pc1pdNrHoRcq7TJNfj17ze7+p 7dZ/C6o7EL6d7r+teBhreQSPhl8tv55NCmhwNmK3YTNzGYKvX6dbUJ83MRHlk90TM9qgAn FdnVF6+GzNieCDE9DEeuXHL+cHSxUJLdtF84rQzgxW+xh4N7ukz1k0mB0wHjWSUrF++jVr 8RH122cJLAcsZMBx4T9Dz/9+QrJF52TMZ2z0PUbRrP8L5ULMI8qsHsYmnfs4hg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1759422130; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=l8wOg+YYXSlfwBQZsRacT7Y6S9zJr7SETWhvCIktd4c=; b=KxJi6GMLY2hyAz+zNU8uY9HUQhnClTTh1/b9ocuosNISTOVYgkJgGqAVNTcHk9ZeVB0hVg DzEYhTFzVMj7+Iq4MarFWC0WBVl9D1QbMdJqsRKzPBqFhs7VzIZJ0LjNBB6mPHP1sRz7LH JWrTyzeOeWML6e+vVEraQzih7uhTZ1i3zBm63FHBmgSRIfzDrhoRdTQHOXWCddcuzDf0Q0 60s11ty+qhqfXTiVxL2SbUZ/hCN08QQR1aVprre5L7ApiGDEtzCsN5s6IZTL02Hw6xsM0u UdYNeheZSYfzIAgpDc1BlG7zMnQBTuiOgpDSahAvS5Nk1e3OJ/PPCSYh8qQu3w== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1759422130; a=rsa-sha256; cv=none; b=ESmckuASt4eZ/TZvlVjRVGNi0GVhbc6USBPXEYRDVZQ28RhU3wV9HBhyCa+5UhkUowSldZ wIDyga3qiWJhrd0gazdpeDMugOv2ty7PpFC9lOAdVXARoCrBHV385ojwvyhmYQ3fmh+Jvs HSPUIab0GNGnstWwfjR9h30WJIhEY/8m5Z8FWFweLaBH1XdTECBc+zoJtLSC/paG7tAYnl 0jyLFV6jsXbE8ixeWdyb1w4hJuV/Eo9KeAEDypbO476pcHEyvn9arAMVfA7I4Sm8xJfDdk ZzfSa4cDEY9zL1xL8VXLGsSOLboXJFg63kmcUAJ6R9QtgFX2Qz3NBvozzLhUsw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4ccxry4SPSz1Nk; Thu, 02 Oct 2025 16:22:10 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 592GMAWf066023; Thu, 2 Oct 2025 16:22:10 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 592GMAJq066020; Thu, 2 Oct 2025 16:22:10 GMT (envelope-from git) Date: Thu, 2 Oct 2025 16:22:10 GMT Message-Id: <202510021622.592GMAJq066020@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Andrew Turner Subject: git: 35d0c9efb17a - main - arm64/vmm: Save more PMU registers List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: andrew X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 35d0c9efb17a9a7fea57c3a4a056141b21dad18f Auto-Submitted: auto-generated The branch main has been updated by andrew: URL: https://cgit.FreeBSD.org/src/commit/?id=35d0c9efb17a9a7fea57c3a4a056141b21dad18f commit 35d0c9efb17a9a7fea57c3a4a056141b21dad18f Author: Andrew Turner AuthorDate: 2025-10-02 15:34:35 +0000 Commit: Andrew Turner CommitDate: 2025-10-02 16:21:33 +0000 arm64/vmm: Save more PMU registers These were missed in the initial vmm.ko change. While here keep the order the same in all locations we handle these. Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D52802 --- sys/arm64/vmm/arm64.h | 5 +++-- sys/arm64/vmm/vmm_hyp.c | 8 +++++++- sys/arm64/vmm/vmm_reset.c | 4 +++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/sys/arm64/vmm/arm64.h b/sys/arm64/vmm/arm64.h index 82c4481b8692..29279f16d151 100644 --- a/sys/arm64/vmm/arm64.h +++ b/sys/arm64/vmm/arm64.h @@ -78,11 +78,12 @@ struct hypctx { uint64_t pmcr_el0; /* Performance Monitors Control Register */ uint64_t pmccntr_el0; uint64_t pmccfiltr_el0; + uint64_t pmuserenr_el0; + uint64_t pmselr_el0; + uint64_t pmxevcntr_el0; uint64_t pmcntenset_el0; uint64_t pmintenset_el1; uint64_t pmovsset_el0; - uint64_t pmselr_el0; - uint64_t pmuserenr_el0; uint64_t pmevcntr_el0[31]; uint64_t pmevtyper_el0[31]; diff --git a/sys/arm64/vmm/vmm_hyp.c b/sys/arm64/vmm/vmm_hyp.c index c6eeca28b712..b7a621c782b7 100644 --- a/sys/arm64/vmm/vmm_hyp.c +++ b/sys/arm64/vmm/vmm_hyp.c @@ -180,10 +180,13 @@ vmm_hyp_reg_store(struct hypctx *hypctx, struct hyp *hyp, bool guest, hypctx->pmcr_el0 = READ_SPECIALREG(pmcr_el0); hypctx->pmccntr_el0 = READ_SPECIALREG(pmccntr_el0); hypctx->pmccfiltr_el0 = READ_SPECIALREG(pmccfiltr_el0); + hypctx->pmuserenr_el0 = READ_SPECIALREG(pmuserenr_el0); + hypctx->pmselr_el0 = READ_SPECIALREG(pmselr_el0); + hypctx->pmxevcntr_el0 = READ_SPECIALREG(pmxevcntr_el0); hypctx->pmcntenset_el0 = READ_SPECIALREG(pmcntenset_el0); hypctx->pmintenset_el1 = READ_SPECIALREG(pmintenset_el1); hypctx->pmovsset_el0 = READ_SPECIALREG(pmovsset_el0); - hypctx->pmuserenr_el0 = READ_SPECIALREG(pmuserenr_el0); + switch ((hypctx->pmcr_el0 & PMCR_N_MASK) >> PMCR_N_SHIFT) { #define STORE_PMU(x) \ case (x + 1): \ @@ -337,6 +340,9 @@ vmm_hyp_reg_restore(struct hypctx *hypctx, struct hyp *hyp, bool guest, WRITE_SPECIALREG(pmcr_el0, hypctx->pmcr_el0); WRITE_SPECIALREG(pmccntr_el0, hypctx->pmccntr_el0); WRITE_SPECIALREG(pmccfiltr_el0, hypctx->pmccfiltr_el0); + WRITE_SPECIALREG(pmuserenr_el0, hypctx->pmuserenr_el0); + WRITE_SPECIALREG(pmselr_el0, hypctx->pmselr_el0); + WRITE_SPECIALREG(pmxevcntr_el0, hypctx->pmxevcntr_el0); /* Clear all events/interrupts then enable them */ WRITE_SPECIALREG(pmcntenclr_el0, ~0ul); WRITE_SPECIALREG(pmcntenset_el0, hypctx->pmcntenset_el0); diff --git a/sys/arm64/vmm/vmm_reset.c b/sys/arm64/vmm/vmm_reset.c index 79d022cf33e8..c4102277131d 100644 --- a/sys/arm64/vmm/vmm_reset.c +++ b/sys/arm64/vmm/vmm_reset.c @@ -100,10 +100,12 @@ reset_vm_el01_regs(void *vcpu) el2ctx->pmcr_el0 |= PMCR_LC; set_arch_unknown(el2ctx->pmccntr_el0); set_arch_unknown(el2ctx->pmccfiltr_el0); + set_arch_unknown(el2ctx->pmuserenr_el0); + set_arch_unknown(el2ctx->pmselr_el0); + set_arch_unknown(el2ctx->pmxevcntr_el0); set_arch_unknown(el2ctx->pmcntenset_el0); set_arch_unknown(el2ctx->pmintenset_el1); set_arch_unknown(el2ctx->pmovsset_el0); - set_arch_unknown(el2ctx->pmuserenr_el0); memset(el2ctx->pmevcntr_el0, 0, sizeof(el2ctx->pmevcntr_el0)); memset(el2ctx->pmevtyper_el0, 0, sizeof(el2ctx->pmevtyper_el0)); }