Module Name: src Committed By: maxv Date: Mon Oct 28 08:30:49 UTC 2019
Modified Files: src/lib/libnvmm: libnvmm.3 nvmm.h src/sys/dev/nvmm: nvmm.h src/sys/dev/nvmm/x86: nvmm_x86.h nvmm_x86_svm.c nvmm_x86_vmx.c Log Message: A few changes: - Use smaller types in struct nvmm_capability. - Use smaller type for nvmm_io.port. - Switch exitstate to a compacted structure. To generate a diff of this commit: cvs rdiff -u -r1.22 -r1.23 src/lib/libnvmm/libnvmm.3 cvs rdiff -u -r1.16 -r1.17 src/lib/libnvmm/nvmm.h cvs rdiff -u -r1.11 -r1.12 src/sys/dev/nvmm/nvmm.h cvs rdiff -u -r1.17 -r1.18 src/sys/dev/nvmm/x86/nvmm_x86.h cvs rdiff -u -r1.52 -r1.53 src/sys/dev/nvmm/x86/nvmm_x86_svm.c cvs rdiff -u -r1.43 -r1.44 src/sys/dev/nvmm/x86/nvmm_x86_vmx.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libnvmm/libnvmm.3 diff -u src/lib/libnvmm/libnvmm.3:1.22 src/lib/libnvmm/libnvmm.3:1.23 --- src/lib/libnvmm/libnvmm.3:1.22 Sun Oct 27 10:28:55 2019 +++ src/lib/libnvmm/libnvmm.3 Mon Oct 28 08:30:49 2019 @@ -1,4 +1,4 @@ -.\" $NetBSD: libnvmm.3,v 1.22 2019/10/27 10:28:55 maxv Exp $ +.\" $NetBSD: libnvmm.3,v 1.23 2019/10/28 08:30:49 maxv Exp $ .\" .\" Copyright (c) 2018, 2019 The NetBSD Foundation, Inc. .\" All rights reserved. @@ -27,7 +27,7 @@ .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE .\" POSSIBILITY OF SUCH DAMAGE. .\" -.Dd October 27, 2019 +.Dd October 28, 2019 .Dt LIBNVMM 3 .Os .Sh NAME @@ -502,7 +502,9 @@ struct nvmm_vcpu_exit { union { ... } u; - uint64_t exitstate[8]; + struct { + ... + } exitstate; }; .Ed .Pp @@ -611,7 +613,7 @@ This structure describes an I/O transact struct nvmm_io { struct nvmm_machine *mach; struct nvmm_vcpu *vcpu; - uint64_t port; + uint16_t port; bool in; size_t size; uint8_t *data; Index: src/lib/libnvmm/nvmm.h diff -u src/lib/libnvmm/nvmm.h:1.16 src/lib/libnvmm/nvmm.h:1.17 --- src/lib/libnvmm/nvmm.h:1.16 Sun Oct 27 20:17:36 2019 +++ src/lib/libnvmm/nvmm.h Mon Oct 28 08:30:49 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: nvmm.h,v 1.16 2019/10/27 20:17:36 maxv Exp $ */ +/* $NetBSD: nvmm.h,v 1.17 2019/10/28 08:30:49 maxv Exp $ */ /* * Copyright (c) 2018-2019 The NetBSD Foundation, Inc. @@ -65,7 +65,7 @@ struct nvmm_vcpu { struct nvmm_io { struct nvmm_machine *mach; struct nvmm_vcpu *vcpu; - uint64_t port; + uint16_t port; bool in; size_t size; uint8_t *data; Index: src/sys/dev/nvmm/nvmm.h diff -u src/sys/dev/nvmm/nvmm.h:1.11 src/sys/dev/nvmm/nvmm.h:1.12 --- src/sys/dev/nvmm/nvmm.h:1.11 Wed Oct 23 07:01:11 2019 +++ src/sys/dev/nvmm/nvmm.h Mon Oct 28 08:30:49 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: nvmm.h,v 1.11 2019/10/23 07:01:11 maxv Exp $ */ +/* $NetBSD: nvmm.h,v 1.12 2019/10/28 08:30:49 maxv Exp $ */ /* * Copyright (c) 2018-2019 The NetBSD Foundation, Inc. @@ -51,10 +51,10 @@ typedef uint32_t nvmm_cpuid_t; #define NVMM_KERN_VERSION 1 struct nvmm_capability { - uint64_t version; - uint64_t state_size; - uint64_t max_machines; - uint64_t max_vcpus; + uint32_t version; + uint32_t state_size; + uint32_t max_machines; + uint32_t max_vcpus; uint64_t max_ram; struct nvmm_cap_md arch; }; Index: src/sys/dev/nvmm/x86/nvmm_x86.h diff -u src/sys/dev/nvmm/x86/nvmm_x86.h:1.17 src/sys/dev/nvmm/x86/nvmm_x86.h:1.18 --- src/sys/dev/nvmm/x86/nvmm_x86.h:1.17 Sun Oct 27 10:28:55 2019 +++ src/sys/dev/nvmm/x86/nvmm_x86.h Mon Oct 28 08:30:49 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: nvmm_x86.h,v 1.17 2019/10/27 10:28:55 maxv Exp $ */ +/* $NetBSD: nvmm_x86.h,v 1.18 2019/10/28 08:30:49 maxv Exp $ */ /* * Copyright (c) 2018-2019 The NetBSD Foundation, Inc. @@ -102,7 +102,15 @@ struct nvmm_x86_exit { struct nvmm_x86_exit_insn insn; struct nvmm_x86_exit_invalid inv; } u; - uint64_t exitstate[8]; + struct { + uint64_t rflags; + uint64_t cr8; + uint64_t int_shadow:1; + uint64_t int_window_exiting:1; + uint64_t nmi_window_exiting:1; + uint64_t evt_pending:1; + uint64_t rsvd:60; + } exitstate; }; #define NVMM_VCPU_EVENT_EXCP 0 @@ -128,7 +136,7 @@ struct nvmm_cap_md { uint64_t xcr0_mask; uint32_t mxcsr_mask; uint32_t conf_cpuid_maxops; - uint64_t rsvd[4]; + uint64_t rsvd[6]; }; #endif @@ -236,14 +244,6 @@ struct nvmm_x64_state_intr { uint64_t rsvd:60; }; -/* VM exit state indexes. */ -#define NVMM_X64_EXITSTATE_CR8 0 -#define NVMM_X64_EXITSTATE_RFLAGS 1 -#define NVMM_X64_EXITSTATE_INT_SHADOW 2 -#define NVMM_X64_EXITSTATE_INT_WINDOW_EXIT 3 -#define NVMM_X64_EXITSTATE_NMI_WINDOW_EXIT 4 -#define NVMM_X64_EXITSTATE_EVT_PENDING 5 - /* Flags. */ #define NVMM_X64_STATE_SEGS 0x01 #define NVMM_X64_STATE_GPRS 0x02 Index: src/sys/dev/nvmm/x86/nvmm_x86_svm.c diff -u src/sys/dev/nvmm/x86/nvmm_x86_svm.c:1.52 src/sys/dev/nvmm/x86/nvmm_x86_svm.c:1.53 --- src/sys/dev/nvmm/x86/nvmm_x86_svm.c:1.52 Sun Oct 27 10:28:55 2019 +++ src/sys/dev/nvmm/x86/nvmm_x86_svm.c Mon Oct 28 08:30:49 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: nvmm_x86_svm.c,v 1.52 2019/10/27 10:28:55 maxv Exp $ */ +/* $NetBSD: nvmm_x86_svm.c,v 1.53 2019/10/28 08:30:49 maxv Exp $ */ /* * Copyright (c) 2018-2019 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nvmm_x86_svm.c,v 1.52 2019/10/27 10:28:55 maxv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nvmm_x86_svm.c,v 1.53 2019/10/28 08:30:49 maxv Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -1452,18 +1452,13 @@ svm_vcpu_run(struct nvmm_machine *mach, kpreempt_enable(); - exit->exitstate[NVMM_X64_EXITSTATE_CR8] = __SHIFTOUT(vmcb->ctrl.v, - VMCB_CTRL_V_TPR); - exit->exitstate[NVMM_X64_EXITSTATE_RFLAGS] = vmcb->state.rflags; - - exit->exitstate[NVMM_X64_EXITSTATE_INT_SHADOW] = + exit->exitstate.rflags = vmcb->state.rflags; + exit->exitstate.cr8 = __SHIFTOUT(vmcb->ctrl.v, VMCB_CTRL_V_TPR); + exit->exitstate.int_shadow = ((vmcb->ctrl.intr & VMCB_CTRL_INTR_SHADOW) != 0); - exit->exitstate[NVMM_X64_EXITSTATE_INT_WINDOW_EXIT] = - cpudata->int_window_exit; - exit->exitstate[NVMM_X64_EXITSTATE_NMI_WINDOW_EXIT] = - cpudata->nmi_window_exit; - exit->exitstate[NVMM_X64_EXITSTATE_EVT_PENDING] = - cpudata->evt_pending; + exit->exitstate.int_window_exiting = cpudata->int_window_exit; + exit->exitstate.nmi_window_exiting = cpudata->nmi_window_exit; + exit->exitstate.evt_pending = cpudata->evt_pending; return 0; } Index: src/sys/dev/nvmm/x86/nvmm_x86_vmx.c diff -u src/sys/dev/nvmm/x86/nvmm_x86_vmx.c:1.43 src/sys/dev/nvmm/x86/nvmm_x86_vmx.c:1.44 --- src/sys/dev/nvmm/x86/nvmm_x86_vmx.c:1.43 Sun Oct 27 18:26:54 2019 +++ src/sys/dev/nvmm/x86/nvmm_x86_vmx.c Mon Oct 28 08:30:49 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: nvmm_x86_vmx.c,v 1.43 2019/10/27 18:26:54 maxv Exp $ */ +/* $NetBSD: nvmm_x86_vmx.c,v 1.44 2019/10/28 08:30:49 maxv Exp $ */ /* * Copyright (c) 2018-2019 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nvmm_x86_vmx.c,v 1.43 2019/10/27 18:26:54 maxv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nvmm_x86_vmx.c,v 1.44 2019/10/28 08:30:49 maxv Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -2072,18 +2072,14 @@ vmx_vcpu_run(struct nvmm_machine *mach, vmx_vcpu_guest_misc_leave(vcpu); vmx_vcpu_guest_dbregs_leave(vcpu); - exit->exitstate[NVMM_X64_EXITSTATE_CR8] = cpudata->gcr8; - exit->exitstate[NVMM_X64_EXITSTATE_RFLAGS] = - vmx_vmread(VMCS_GUEST_RFLAGS); + exit->exitstate.rflags = vmx_vmread(VMCS_GUEST_RFLAGS); + exit->exitstate.cr8 = cpudata->gcr8; intstate = vmx_vmread(VMCS_GUEST_INTERRUPTIBILITY); - exit->exitstate[NVMM_X64_EXITSTATE_INT_SHADOW] = + exit->exitstate.int_shadow = (intstate & (INT_STATE_STI|INT_STATE_MOVSS)) != 0; - exit->exitstate[NVMM_X64_EXITSTATE_INT_WINDOW_EXIT] = - cpudata->int_window_exit; - exit->exitstate[NVMM_X64_EXITSTATE_NMI_WINDOW_EXIT] = - cpudata->nmi_window_exit; - exit->exitstate[NVMM_X64_EXITSTATE_EVT_PENDING] = - cpudata->evt_pending; + exit->exitstate.int_window_exiting = cpudata->int_window_exit; + exit->exitstate.nmi_window_exiting = cpudata->nmi_window_exit; + exit->exitstate.evt_pending = cpudata->evt_pending; vmx_vmcs_leave(vcpu);