From nobody Wed Feb 07 13:53:10 2024 X-Original-To: dev-commits-src-all@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 4TVM5L3WM5z59QWK; Wed, 7 Feb 2024 13:53: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 "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TVM5L2z0Gz4624; Wed, 7 Feb 2024 13:53:10 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1707313990; 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=tKis0et04bLyue8SUaHP478a05GDnZ1GrGyVAUUBdZQ=; b=APXdgsJKoO5CLRRmVV3qUUQh/LwfsLBOQ5RqnMXYt3cgstkAZPm2ttwLqPYesuj8jDMdNT DkrtMaQssU/keKpLZIczgW1VdXqXQNgIEegaiJURl0fqTruzKL2QAcwga3tyauD4P9/a6a hV6q/i/GqNZeeydK58jA+zqshE+vbjS40kGuvQXL7B+o0eG+9oiSuxu5+81d6HoPMSxmyK niY5f0sDaOD/ryTiHqoWGqqkmycn1iwvvOCPmmksX7ZofsrueW17h+8YoLUiky0NpCT8m4 fhJiWkeoS7MHy//MDyCW8E5iJ+8PjRZa1JCFcMn8hfSY43PkF5Z82XOkOVxstA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1707313990; 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=tKis0et04bLyue8SUaHP478a05GDnZ1GrGyVAUUBdZQ=; b=nlOo+dTIurW9quiJjNTdnTazVwr3DNRXBG1f/PEE9m2rRiLPKrJ6dmiI6oxj2uGMnFEAoi +K4fz4avrDQmCVygROUAinpzCYEEBgUf+aeJsuxtlKsPJ+aFGIgV6o9SilOcOQHv+W4bkG Kzj9Wbk70D7cn54IVA3YJ9uSiy77Db9M2GNXqsG1MT3u6mhpOAWRJJuCx63VuLQWpQYAKA NeMjh61sIf5Q3rYttZwuWrIn1LMcF94gHgOcIZT5ONtcy0lDA4vluAHlesYuEBWpYnyS7D mv+ZmZKvVvdhWGtzue7LB94sH1fGmFfc7401elRTYZuJNmyvticMKczeo45wzA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1707313990; a=rsa-sha256; cv=none; b=dhSz5a79c0VIGMaFyBafWBzaznhFj4A10tO9zF0obDKgo705oJPXVmyverENz1U2fCjPc3 lV3W3wgPeJOWzrLq6OCgNb1Q4fdbKXZcvoBYz6R9Zy/twRh9nxAJuBtFRt2sEvgjUwVcu4 gfANkwKerYcSSyd5JwvsMYStkLhXubEfk3QBb7jPIAXkFfE1Utj+za7AdsTW8orJ/s0dbj dNC2QT+aDFEjMY+pwZ3YjxJ+LST56nDkbl47PtTif4ILnH5cErWLc8PklkhUzFE+g2+OSA WdGGX5oGeuNZJO2e0FdaJnBaIPG9VIiCz/V2S/BpbWGfBrE7qY0RW3BMcOU38Q== 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 4TVM5L22b6z189L; Wed, 7 Feb 2024 13:53:10 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 417DrAKD034580; Wed, 7 Feb 2024 13:53:10 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 417DrAu7034577; Wed, 7 Feb 2024 13:53:10 GMT (envelope-from git) Date: Wed, 7 Feb 2024 13:53:10 GMT Message-Id: <202402071353.417DrAu7034577@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: f493ea650e61 - main - vmm: Expose more registers to VM_GET_REGISTER List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: markj X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: f493ea650e6137ba657dfa0627da1e8bb4a985e9 Auto-Submitted: auto-generated The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=f493ea650e6137ba657dfa0627da1e8bb4a985e9 commit f493ea650e6137ba657dfa0627da1e8bb4a985e9 Author: Mark Johnston AuthorDate: 2024-02-07 13:47:24 +0000 Commit: Mark Johnston CommitDate: 2024-02-07 13:52:46 +0000 vmm: Expose more registers to VM_GET_REGISTER In a follow-up revision the gdb stub will support sending an XML target description to gdb, which lets us send additional registers, including the ones added in this patch. Reviewed by: jhb MFC after: 1 month Sponsored by: Innovate UK Differential Revision: https://reviews.freebsd.org/D43665 --- sys/amd64/include/vmm.h | 4 ++++ sys/amd64/vmm/amd/vmcb.c | 17 +++++++++++++++++ sys/amd64/vmm/intel/vmcs.c | 5 ++++- sys/amd64/vmm/intel/vmx.c | 10 +++++++++- 4 files changed, 34 insertions(+), 2 deletions(-) diff --git a/sys/amd64/include/vmm.h b/sys/amd64/include/vmm.h index 273a1a46ba04..7d5d13678122 100644 --- a/sys/amd64/include/vmm.h +++ b/sys/amd64/include/vmm.h @@ -98,6 +98,10 @@ enum vm_reg_name { VM_REG_GUEST_DR3, VM_REG_GUEST_DR6, VM_REG_GUEST_ENTRY_INST_LENGTH, + VM_REG_GUEST_FS_BASE, + VM_REG_GUEST_GS_BASE, + VM_REG_GUEST_KGS_BASE, + VM_REG_GUEST_TPR, VM_REG_LAST }; diff --git a/sys/amd64/vmm/amd/vmcb.c b/sys/amd64/vmm/amd/vmcb.c index ce05c912fc6a..4bd2fae9f821 100644 --- a/sys/amd64/vmm/amd/vmcb.c +++ b/sys/amd64/vmm/amd/vmcb.c @@ -39,6 +39,7 @@ #include "vmm_ktr.h" +#include "vlapic.h" #include "vmcb.h" #include "svm.h" #include "svm_softc.h" @@ -231,6 +232,22 @@ vmcb_read(struct svm_vcpu *vcpu, int ident, uint64_t *retval) *retval = seg->selector; break; + case VM_REG_GUEST_FS_BASE: + case VM_REG_GUEST_GS_BASE: + seg = vmcb_segptr(vmcb, ident == VM_REG_GUEST_FS_BASE ? + VM_REG_GUEST_FS : VM_REG_GUEST_GS); + KASSERT(seg != NULL, ("%s: unable to get segment %d from VMCB", + __func__, ident)); + *retval = seg->base; + break; + case VM_REG_GUEST_KGS_BASE: + *retval = state->kernelgsbase; + break; + + case VM_REG_GUEST_TPR: + *retval = vlapic_get_cr8(vm_lapic(vcpu->vcpu)); + break; + case VM_REG_GUEST_GDTR: case VM_REG_GUEST_IDTR: /* GDTR and IDTR don't have segment selectors */ diff --git a/sys/amd64/vmm/intel/vmcs.c b/sys/amd64/vmm/intel/vmcs.c index 52068b8eba54..35c2ee5b6eff 100644 --- a/sys/amd64/vmm/intel/vmcs.c +++ b/sys/amd64/vmm/intel/vmcs.c @@ -119,10 +119,13 @@ vmcs_field_encoding(int ident) return (VMCS_GUEST_PDPTE3); case VM_REG_GUEST_ENTRY_INST_LENGTH: return (VMCS_ENTRY_INST_LENGTH); + case VM_REG_GUEST_FS_BASE: + return (VMCS_GUEST_FS_BASE); + case VM_REG_GUEST_GS_BASE: + return (VMCS_GUEST_GS_BASE); default: return (-1); } - } static int diff --git a/sys/amd64/vmm/intel/vmx.c b/sys/amd64/vmm/intel/vmx.c index b7c1544ac0b3..31ca9256b527 100644 --- a/sys/amd64/vmm/intel/vmx.c +++ b/sys/amd64/vmm/intel/vmx.c @@ -3404,8 +3404,16 @@ vmx_getreg(void *vcpui, int reg, uint64_t *retval) panic("vmx_getreg: %s%d is running", vm_name(vmx->vm), vcpu->vcpuid); - if (reg == VM_REG_GUEST_INTR_SHADOW) + switch (reg) { + case VM_REG_GUEST_INTR_SHADOW: return (vmx_get_intr_shadow(vcpu, running, retval)); + case VM_REG_GUEST_KGS_BASE: + *retval = vcpu->guest_msrs[IDX_MSR_KGSBASE]; + return (0); + case VM_REG_GUEST_TPR: + *retval = vlapic_get_cr8(vm_lapic(vcpu->vcpu)); + return (0); + } if (vmxctx_getreg(&vcpu->ctx, reg, retval) == 0) return (0);