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);
 

Reply via email to