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