Module Name: src
Committed By: maxv
Date: Sat Apr 27 15:45:21 UTC 2019
Modified Files:
src/lib/libnvmm: 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:
Reorder the NVMM headers, to make a clear(er) distinction between MI and
MD. Also use #defines for the exit reasons rather than an union. No ABI
change, and no API change except 'cap->u.{}' renamed to 'cap->arch'.
To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 src/lib/libnvmm/nvmm.h
cvs rdiff -u -r1.6 -r1.7 src/sys/dev/nvmm/nvmm.h
cvs rdiff -u -r1.11 -r1.12 src/sys/dev/nvmm/x86/nvmm_x86.h
cvs rdiff -u -r1.41 -r1.42 src/sys/dev/nvmm/x86/nvmm_x86_svm.c
cvs rdiff -u -r1.29 -r1.30 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/nvmm.h
diff -u src/lib/libnvmm/nvmm.h:1.8 src/lib/libnvmm/nvmm.h:1.9
--- src/lib/libnvmm/nvmm.h:1.8 Wed Apr 10 18:49:04 2019
+++ src/lib/libnvmm/nvmm.h Sat Apr 27 15:45:21 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: nvmm.h,v 1.8 2019/04/10 18:49:04 maxv Exp $ */
+/* $NetBSD: nvmm.h,v 1.9 2019/04/27 15:45:21 maxv Exp $ */
/*
* Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -37,9 +37,6 @@
#include <dev/nvmm/nvmm.h>
#include <dev/nvmm/nvmm_ioctl.h>
-#ifdef __x86_64__
-#include <dev/nvmm/x86/nvmm_x86.h>
-#endif
struct nvmm_machine {
nvmm_machid_t machid;
Index: src/sys/dev/nvmm/nvmm.h
diff -u src/sys/dev/nvmm/nvmm.h:1.6 src/sys/dev/nvmm/nvmm.h:1.7
--- src/sys/dev/nvmm/nvmm.h:1.6 Wed Apr 24 18:19:28 2019
+++ src/sys/dev/nvmm/nvmm.h Sat Apr 27 15:45:21 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: nvmm.h,v 1.6 2019/04/24 18:19:28 maxv Exp $ */
+/* $NetBSD: nvmm.h,v 1.7 2019/04/27 15:45:21 maxv Exp $ */
/*
* Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -44,78 +44,24 @@ typedef uint64_t gvaddr_t;
typedef uint32_t nvmm_machid_t;
typedef uint32_t nvmm_cpuid_t;
-enum nvmm_exit_reason {
- NVMM_EXIT_NONE = 0x0000000000000000,
-
- /* General. */
- NVMM_EXIT_MEMORY = 0x0000000000000001,
- NVMM_EXIT_IO = 0x0000000000000002,
- NVMM_EXIT_MSR = 0x0000000000000003,
- NVMM_EXIT_INT_READY = 0x0000000000000004,
- NVMM_EXIT_NMI_READY = 0x0000000000000005,
- NVMM_EXIT_HALTED = 0x0000000000000006,
- NVMM_EXIT_SHUTDOWN = 0x0000000000000007,
-
- /* Instructions (x86). */
- NVMM_EXIT_MONITOR = 0x0000000000001000,
- NVMM_EXIT_MWAIT = 0x0000000000001001,
- NVMM_EXIT_MWAIT_COND = 0x0000000000001002,
-
- NVMM_EXIT_INVALID = 0xFFFFFFFFFFFFFFFF
-};
-
-struct nvmm_exit_memory {
- int prot;
- gpaddr_t gpa;
- uint8_t inst_len;
- uint8_t inst_bytes[15];
-};
-
-enum nvmm_exit_io_type {
- NVMM_EXIT_IO_IN,
- NVMM_EXIT_IO_OUT
-};
-
-struct nvmm_exit_io {
- enum nvmm_exit_io_type type;
- uint16_t port;
- int seg;
- uint8_t address_size;
- uint8_t operand_size;
- bool rep;
- bool str;
- uint64_t npc;
-};
-
-enum nvmm_exit_msr_type {
- NVMM_EXIT_MSR_RDMSR,
- NVMM_EXIT_MSR_WRMSR
-};
-
-struct nvmm_exit_msr {
- enum nvmm_exit_msr_type type;
- uint64_t msr;
- uint64_t val;
- uint64_t npc;
-};
-
-struct nvmm_exit_insn {
- uint64_t npc;
-};
+#ifdef __x86_64__
+#include <dev/nvmm/x86/nvmm_x86.h>
+#endif
-struct nvmm_exit_invalid {
- uint64_t hwcode;
-};
+#define NVMM_EXIT_NONE 0x0000000000000000ULL
+#define NVMM_EXIT_MEMORY 0x0000000000000001ULL
+#define NVMM_EXIT_IO 0x0000000000000002ULL
+#define NVMM_EXIT_MSR 0x0000000000000003ULL /* x86 only? */
+#define NVMM_EXIT_INT_READY 0x0000000000000004ULL
+#define NVMM_EXIT_NMI_READY 0x0000000000000005ULL
+#define NVMM_EXIT_HALTED 0x0000000000000006ULL
+#define NVMM_EXIT_SHUTDOWN 0x0000000000000007ULL
+/* Range 0x1000-0x10000 is MD. */
+#define NVMM_EXIT_INVALID 0xFFFFFFFFFFFFFFFFULL
struct nvmm_exit {
- enum nvmm_exit_reason reason;
- union {
- struct nvmm_exit_memory mem;
- struct nvmm_exit_io io;
- struct nvmm_exit_msr msr;
- struct nvmm_exit_insn insn;
- struct nvmm_exit_invalid inv;
- } u;
+ uint64_t reason;
+ union nvmm_exit_md u;
uint64_t exitstate[8];
};
@@ -145,14 +91,7 @@ struct nvmm_capability {
uint64_t max_machines;
uint64_t max_vcpus;
uint64_t max_ram;
- union {
- struct {
- uint64_t xcr0_mask;
- uint64_t mxcsr_mask;
- uint64_t conf_cpuid_maxops;
- } x86;
- uint64_t rsvd[8];
- } u;
+ struct nvmm_cap_md arch;
};
#endif
Index: src/sys/dev/nvmm/x86/nvmm_x86.h
diff -u src/sys/dev/nvmm/x86/nvmm_x86.h:1.11 src/sys/dev/nvmm/x86/nvmm_x86.h:1.12
--- src/sys/dev/nvmm/x86/nvmm_x86.h:1.11 Sat Apr 6 11:49:53 2019
+++ src/sys/dev/nvmm/x86/nvmm_x86.h Sat Apr 27 15:45:21 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: nvmm_x86.h,v 1.11 2019/04/06 11:49:53 maxv Exp $ */
+/* $NetBSD: nvmm_x86.h,v 1.12 2019/04/27 15:45:21 maxv Exp $ */
/*
* Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -32,6 +32,76 @@
#ifndef _NVMM_X86_H_
#define _NVMM_X86_H_
+/* --------------------------------------------------------------------- */
+
+#ifndef ASM_NVMM
+
+struct nvmm_exit_memory {
+ int prot;
+ gpaddr_t gpa;
+ uint8_t inst_len;
+ uint8_t inst_bytes[15];
+};
+
+enum nvmm_exit_io_type {
+ NVMM_EXIT_IO_IN,
+ NVMM_EXIT_IO_OUT
+};
+
+struct nvmm_exit_io {
+ enum nvmm_exit_io_type type;
+ uint16_t port;
+ int seg;
+ uint8_t address_size;
+ uint8_t operand_size;
+ bool rep;
+ bool str;
+ uint64_t npc;
+};
+
+enum nvmm_exit_msr_type {
+ NVMM_EXIT_MSR_RDMSR,
+ NVMM_EXIT_MSR_WRMSR
+};
+
+struct nvmm_exit_msr {
+ enum nvmm_exit_msr_type type;
+ uint64_t msr;
+ uint64_t val;
+ uint64_t npc;
+};
+
+struct nvmm_exit_insn {
+ uint64_t npc;
+};
+
+struct nvmm_exit_invalid {
+ uint64_t hwcode;
+};
+
+union nvmm_exit_md {
+ struct nvmm_exit_memory mem;
+ struct nvmm_exit_io io;
+ struct nvmm_exit_msr msr;
+ struct nvmm_exit_insn insn;
+ struct nvmm_exit_invalid inv;
+};
+
+#define NVMM_EXIT_MONITOR 0x0000000000001000ULL
+#define NVMM_EXIT_MWAIT 0x0000000000001001ULL
+#define NVMM_EXIT_MWAIT_COND 0x0000000000001002ULL
+
+struct nvmm_cap_md {
+ uint64_t xcr0_mask;
+ uint64_t mxcsr_mask;
+ uint64_t conf_cpuid_maxops;
+ uint64_t rsvd[5];
+};
+
+#endif
+
+/* --------------------------------------------------------------------- */
+
/* Segments. */
#define NVMM_X64_SEG_ES 0
#define NVMM_X64_SEG_CS 1
Index: src/sys/dev/nvmm/x86/nvmm_x86_svm.c
diff -u src/sys/dev/nvmm/x86/nvmm_x86_svm.c:1.41 src/sys/dev/nvmm/x86/nvmm_x86_svm.c:1.42
--- src/sys/dev/nvmm/x86/nvmm_x86_svm.c:1.41 Sat Apr 27 09:06:18 2019
+++ src/sys/dev/nvmm/x86/nvmm_x86_svm.c Sat Apr 27 15:45:21 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: nvmm_x86_svm.c,v 1.41 2019/04/27 09:06:18 maxv Exp $ */
+/* $NetBSD: nvmm_x86_svm.c,v 1.42 2019/04/27 15:45:21 maxv Exp $ */
/*
* Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nvmm_x86_svm.c,v 1.41 2019/04/27 09:06:18 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nvmm_x86_svm.c,v 1.42 2019/04/27 15:45:21 maxv Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -2288,9 +2288,9 @@ svm_fini(void)
static void
svm_capability(struct nvmm_capability *cap)
{
- cap->u.x86.xcr0_mask = svm_xcr0_mask;
- cap->u.x86.mxcsr_mask = x86_fpu_mxcsr_mask;
- cap->u.x86.conf_cpuid_maxops = SVM_NCPUIDS;
+ cap->arch.xcr0_mask = svm_xcr0_mask;
+ cap->arch.mxcsr_mask = x86_fpu_mxcsr_mask;
+ cap->arch.conf_cpuid_maxops = SVM_NCPUIDS;
}
const struct nvmm_impl nvmm_x86_svm = {
Index: src/sys/dev/nvmm/x86/nvmm_x86_vmx.c
diff -u src/sys/dev/nvmm/x86/nvmm_x86_vmx.c:1.29 src/sys/dev/nvmm/x86/nvmm_x86_vmx.c:1.30
--- src/sys/dev/nvmm/x86/nvmm_x86_vmx.c:1.29 Sat Apr 27 09:06:18 2019
+++ src/sys/dev/nvmm/x86/nvmm_x86_vmx.c Sat Apr 27 15:45:21 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: nvmm_x86_vmx.c,v 1.29 2019/04/27 09:06:18 maxv Exp $ */
+/* $NetBSD: nvmm_x86_vmx.c,v 1.30 2019/04/27 15:45:21 maxv Exp $ */
/*
* Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nvmm_x86_vmx.c,v 1.29 2019/04/27 09:06:18 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nvmm_x86_vmx.c,v 1.30 2019/04/27 15:45:21 maxv Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -3083,9 +3083,9 @@ vmx_fini(void)
static void
vmx_capability(struct nvmm_capability *cap)
{
- cap->u.x86.xcr0_mask = vmx_xcr0_mask;
- cap->u.x86.mxcsr_mask = x86_fpu_mxcsr_mask;
- cap->u.x86.conf_cpuid_maxops = VMX_NCPUIDS;
+ cap->arch.xcr0_mask = vmx_xcr0_mask;
+ cap->arch.mxcsr_mask = x86_fpu_mxcsr_mask;
+ cap->arch.conf_cpuid_maxops = VMX_NCPUIDS;
}
const struct nvmm_impl nvmm_x86_vmx = {