Module Name:    src
Committed By:   maxv
Date:           Sat May 11 07:31:57 UTC 2019

Modified Files:
        src/lib/libnvmm: libnvmm.c libnvmm_x86.c nvmm.h
        src/sys/dev/nvmm: nvmm.c nvmm.h
        src/sys/dev/nvmm/x86: nvmm_x86.h nvmm_x86_svm.c nvmm_x86_vmx.c
        src/tests/lib/libnvmm: h_io_assist.c h_mem_assist.c

Log Message:
Rework the machine configuration interface.

Provide three ranges in the conf space: <libnvmm:0-100>, <MI:100-200> and
<MD:200-...>. Remove nvmm_callbacks_register(), and replace it by the conf
op NVMM_MACH_CONF_CALLBACKS, handled by libnvmm. The callbacks are now
per-machine, and the emulators should now do:

-       nvmm_callbacks_register(&cbs);
+       nvmm_machine_configure(&mach, NVMM_MACH_CONF_CALLBACKS, &cbs);

This provides more granularity, for example if the process runs two VMs
and wants different callbacks for each.


To generate a diff of this commit:
cvs rdiff -u -r1.12 -r1.13 src/lib/libnvmm/libnvmm.c
cvs rdiff -u -r1.29 -r1.30 src/lib/libnvmm/libnvmm_x86.c
cvs rdiff -u -r1.10 -r1.11 src/lib/libnvmm/nvmm.h
cvs rdiff -u -r1.20 -r1.21 src/sys/dev/nvmm/nvmm.c
cvs rdiff -u -r1.9 -r1.10 src/sys/dev/nvmm/nvmm.h
cvs rdiff -u -r1.14 -r1.15 src/sys/dev/nvmm/x86/nvmm_x86.h
cvs rdiff -u -r1.45 -r1.46 src/sys/dev/nvmm/x86/nvmm_x86_svm.c
cvs rdiff -u -r1.33 -r1.34 src/sys/dev/nvmm/x86/nvmm_x86_vmx.c
cvs rdiff -u -r1.6 -r1.7 src/tests/lib/libnvmm/h_io_assist.c
cvs rdiff -u -r1.9 -r1.10 src/tests/lib/libnvmm/h_mem_assist.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.c
diff -u src/lib/libnvmm/libnvmm.c:1.12 src/lib/libnvmm/libnvmm.c:1.13
--- src/lib/libnvmm/libnvmm.c:1.12	Wed May  1 09:20:21 2019
+++ src/lib/libnvmm/libnvmm.c	Sat May 11 07:31:57 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: libnvmm.c,v 1.12 2019/05/01 09:20:21 maxv Exp $	*/
+/*	$NetBSD: libnvmm.c,v 1.13 2019/05/11 07:31:57 maxv Exp $	*/
 
 /*
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -44,7 +44,6 @@
 
 #include "nvmm.h"
 
-static struct nvmm_callbacks __callbacks;
 static struct nvmm_capability __capability;
 
 #ifdef __x86_64__
@@ -255,6 +254,12 @@ nvmm_machine_configure(struct nvmm_machi
 	struct nvmm_ioc_machine_configure args;
 	int ret;
 
+	switch (op) {
+	case NVMM_MACH_CONF_CALLBACKS:
+		memcpy(&mach->cbs, conf, sizeof(mach->cbs));
+		return 0;
+	}
+
 	args.machid = mach->machid;
 	args.op = op;
 	args.conf = conf;
@@ -510,12 +515,6 @@ nvmm_gpa_to_hva(struct nvmm_machine *mac
  * nvmm_assist_mem(): architecture-specific.
  */
 
-void
-nvmm_callbacks_register(const struct nvmm_callbacks *cbs)
-{
-	memcpy(&__callbacks, cbs, sizeof(__callbacks));
-}
-
 int
 nvmm_ctl(int op, void *data, size_t size)
 {

Index: src/lib/libnvmm/libnvmm_x86.c
diff -u src/lib/libnvmm/libnvmm_x86.c:1.29 src/lib/libnvmm/libnvmm_x86.c:1.30
--- src/lib/libnvmm/libnvmm_x86.c:1.29	Sun Apr 28 14:22:13 2019
+++ src/lib/libnvmm/libnvmm_x86.c	Sat May 11 07:31:57 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: libnvmm_x86.c,v 1.29 2019/04/28 14:22:13 maxv Exp $	*/
+/*	$NetBSD: libnvmm_x86.c,v 1.30 2019/05/11 07:31:57 maxv Exp $	*/
 
 /*
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -606,7 +606,7 @@ read_guest_memory(struct nvmm_machine *m
 		mem.gpa = gpa;
 		mem.write = false;
 		mem.size = size;
-		(*__callbacks.mem)(&mem);
+		(*mach->cbs.mem)(&mem);
 	} else {
 		if (__predict_false(!(prot & NVMM_PROT_READ))) {
 			errno = EFAULT;
@@ -660,7 +660,7 @@ write_guest_memory(struct nvmm_machine *
 		mem.gpa = gpa;
 		mem.write = true;
 		mem.size = size;
-		(*__callbacks.mem)(&mem);
+		(*mach->cbs.mem)(&mem);
 	} else {
 		if (__predict_false(!(prot & NVMM_PROT_WRITE))) {
 			errno = EFAULT;
@@ -706,7 +706,7 @@ assist_io_batch(struct nvmm_machine *mac
 	}
 
 	for (i = 0; i < iocnt; i++) {
-		(*__callbacks.io)(io);
+		(*mach->cbs.io)(io);
 		io->data += io->size;
 	}
 
@@ -816,7 +816,7 @@ nvmm_assist_io(struct nvmm_machine *mach
 		}
 	}
 
-	(*__callbacks.io)(&io);
+	(*mach->cbs.io)(&io);
 
 	if (io.in) {
 		if (!exit->u.io.str) {
@@ -865,19 +865,19 @@ out:
 struct x86_emul {
 	bool read;
 	bool notouch;
-	void (*func)(struct nvmm_mem *, uint64_t *);
+	void (*func)(struct nvmm_machine *, struct nvmm_mem *, uint64_t *);
 };
 
-static void x86_func_or(struct nvmm_mem *, uint64_t *);
-static void x86_func_and(struct nvmm_mem *, uint64_t *);
-static void x86_func_sub(struct nvmm_mem *, uint64_t *);
-static void x86_func_xor(struct nvmm_mem *, uint64_t *);
-static void x86_func_cmp(struct nvmm_mem *, uint64_t *);
-static void x86_func_test(struct nvmm_mem *, uint64_t *);
-static void x86_func_mov(struct nvmm_mem *, uint64_t *);
-static void x86_func_stos(struct nvmm_mem *, uint64_t *);
-static void x86_func_lods(struct nvmm_mem *, uint64_t *);
-static void x86_func_movs(struct nvmm_mem *, uint64_t *);
+static void x86_func_or(struct nvmm_machine *, struct nvmm_mem *, uint64_t *);
+static void x86_func_and(struct nvmm_machine *, struct nvmm_mem *, uint64_t *);
+static void x86_func_sub(struct nvmm_machine *, struct nvmm_mem *, uint64_t *);
+static void x86_func_xor(struct nvmm_machine *, struct nvmm_mem *, uint64_t *);
+static void x86_func_cmp(struct nvmm_machine *, struct nvmm_mem *, uint64_t *);
+static void x86_func_test(struct nvmm_machine *, struct nvmm_mem *, uint64_t *);
+static void x86_func_mov(struct nvmm_machine *, struct nvmm_mem *, uint64_t *);
+static void x86_func_stos(struct nvmm_machine *, struct nvmm_mem *, uint64_t *);
+static void x86_func_lods(struct nvmm_machine *, struct nvmm_mem *, uint64_t *);
+static void x86_func_movs(struct nvmm_machine *, struct nvmm_mem *, uint64_t *);
 
 static const struct x86_emul x86_emul_or = {
 	.read = true,
@@ -2631,7 +2631,7 @@ EXEC_DISPATCHER(xor)
  */
 
 static void
-x86_func_or(struct nvmm_mem *mem, uint64_t *gprs)
+x86_func_or(struct nvmm_machine *mach, struct nvmm_mem *mem, uint64_t *gprs)
 {
 	uint64_t *retval = (uint64_t *)mem->data;
 	const bool write = mem->write;
@@ -2643,7 +2643,7 @@ x86_func_or(struct nvmm_mem *mem, uint64
 	/* Fetch the value to be OR'ed (op2). */
 	mem->data = (uint8_t *)&op2;
 	mem->write = false;
-	(*__callbacks.mem)(mem);
+	(*mach->cbs.mem)(mem);
 
 	/* Perform the OR. */
 	ret = exec_or(*op1, op2, &fl, mem->size);
@@ -2652,7 +2652,7 @@ x86_func_or(struct nvmm_mem *mem, uint64
 		/* Write back the result. */
 		mem->data = (uint8_t *)&ret;
 		mem->write = true;
-		(*__callbacks.mem)(mem);
+		(*mach->cbs.mem)(mem);
 	} else {
 		/* Return data to the caller. */
 		*retval = ret;
@@ -2663,7 +2663,7 @@ x86_func_or(struct nvmm_mem *mem, uint64
 }
 
 static void
-x86_func_and(struct nvmm_mem *mem, uint64_t *gprs)
+x86_func_and(struct nvmm_machine *mach, struct nvmm_mem *mem, uint64_t *gprs)
 {
 	uint64_t *retval = (uint64_t *)mem->data;
 	const bool write = mem->write;
@@ -2675,7 +2675,7 @@ x86_func_and(struct nvmm_mem *mem, uint6
 	/* Fetch the value to be AND'ed (op2). */
 	mem->data = (uint8_t *)&op2;
 	mem->write = false;
-	(*__callbacks.mem)(mem);
+	(*mach->cbs.mem)(mem);
 
 	/* Perform the AND. */
 	ret = exec_and(*op1, op2, &fl, mem->size);
@@ -2684,7 +2684,7 @@ x86_func_and(struct nvmm_mem *mem, uint6
 		/* Write back the result. */
 		mem->data = (uint8_t *)&ret;
 		mem->write = true;
-		(*__callbacks.mem)(mem);
+		(*mach->cbs.mem)(mem);
 	} else {
 		/* Return data to the caller. */
 		*retval = ret;
@@ -2695,7 +2695,7 @@ x86_func_and(struct nvmm_mem *mem, uint6
 }
 
 static void
-x86_func_sub(struct nvmm_mem *mem, uint64_t *gprs)
+x86_func_sub(struct nvmm_machine *mach, struct nvmm_mem *mem, uint64_t *gprs)
 {
 	uint64_t *retval = (uint64_t *)mem->data;
 	const bool write = mem->write;
@@ -2710,7 +2710,7 @@ x86_func_sub(struct nvmm_mem *mem, uint6
 	/* Fetch the value to be SUB'ed (op1 or op2). */
 	mem->data = (uint8_t *)&tmp;
 	mem->write = false;
-	(*__callbacks.mem)(mem);
+	(*mach->cbs.mem)(mem);
 
 	/* Perform the SUB. */
 	ret = exec_sub(*op1, *op2, &fl, mem->size);
@@ -2719,7 +2719,7 @@ x86_func_sub(struct nvmm_mem *mem, uint6
 		/* Write back the result. */
 		mem->data = (uint8_t *)&ret;
 		mem->write = true;
-		(*__callbacks.mem)(mem);
+		(*mach->cbs.mem)(mem);
 	} else {
 		/* Return data to the caller. */
 		*retval = ret;
@@ -2730,7 +2730,7 @@ x86_func_sub(struct nvmm_mem *mem, uint6
 }
 
 static void
-x86_func_xor(struct nvmm_mem *mem, uint64_t *gprs)
+x86_func_xor(struct nvmm_machine *mach, struct nvmm_mem *mem, uint64_t *gprs)
 {
 	uint64_t *retval = (uint64_t *)mem->data;
 	const bool write = mem->write;
@@ -2742,7 +2742,7 @@ x86_func_xor(struct nvmm_mem *mem, uint6
 	/* Fetch the value to be XOR'ed (op2). */
 	mem->data = (uint8_t *)&op2;
 	mem->write = false;
-	(*__callbacks.mem)(mem);
+	(*mach->cbs.mem)(mem);
 
 	/* Perform the XOR. */
 	ret = exec_xor(*op1, op2, &fl, mem->size);
@@ -2751,7 +2751,7 @@ x86_func_xor(struct nvmm_mem *mem, uint6
 		/* Write back the result. */
 		mem->data = (uint8_t *)&ret;
 		mem->write = true;
-		(*__callbacks.mem)(mem);
+		(*mach->cbs.mem)(mem);
 	} else {
 		/* Return data to the caller. */
 		*retval = ret;
@@ -2762,7 +2762,7 @@ x86_func_xor(struct nvmm_mem *mem, uint6
 }
 
 static void
-x86_func_cmp(struct nvmm_mem *mem, uint64_t *gprs)
+x86_func_cmp(struct nvmm_machine *mach, struct nvmm_mem *mem, uint64_t *gprs)
 {
 	uint64_t *op1, *op2, fl;
 	uint64_t tmp;
@@ -2775,7 +2775,7 @@ x86_func_cmp(struct nvmm_mem *mem, uint6
 	/* Fetch the value to be CMP'ed (op1 or op2). */
 	mem->data = (uint8_t *)&tmp;
 	mem->write = false;
-	(*__callbacks.mem)(mem);
+	(*mach->cbs.mem)(mem);
 
 	/* Perform the CMP. */
 	exec_sub(*op1, *op2, &fl, mem->size);
@@ -2785,7 +2785,7 @@ x86_func_cmp(struct nvmm_mem *mem, uint6
 }
 
 static void
-x86_func_test(struct nvmm_mem *mem, uint64_t *gprs)
+x86_func_test(struct nvmm_machine *mach, struct nvmm_mem *mem, uint64_t *gprs)
 {
 	uint64_t *op1, *op2, fl;
 	uint64_t tmp;
@@ -2798,7 +2798,7 @@ x86_func_test(struct nvmm_mem *mem, uint
 	/* Fetch the value to be TEST'ed (op1 or op2). */
 	mem->data = (uint8_t *)&tmp;
 	mem->write = false;
-	(*__callbacks.mem)(mem);
+	(*mach->cbs.mem)(mem);
 
 	/* Perform the TEST. */
 	exec_and(*op1, *op2, &fl, mem->size);
@@ -2808,21 +2808,21 @@ x86_func_test(struct nvmm_mem *mem, uint
 }
 
 static void
-x86_func_mov(struct nvmm_mem *mem, uint64_t *gprs)
+x86_func_mov(struct nvmm_machine *mach, struct nvmm_mem *mem, uint64_t *gprs)
 {
 	/*
 	 * Nothing special, just move without emulation.
 	 */
-	(*__callbacks.mem)(mem);
+	(*mach->cbs.mem)(mem);
 }
 
 static void
-x86_func_stos(struct nvmm_mem *mem, uint64_t *gprs)
+x86_func_stos(struct nvmm_machine *mach, struct nvmm_mem *mem, uint64_t *gprs)
 {
 	/*
 	 * Just move, and update RDI.
 	 */
-	(*__callbacks.mem)(mem);
+	(*mach->cbs.mem)(mem);
 
 	if (gprs[NVMM_X64_GPR_RFLAGS] & PSL_D) {
 		gprs[NVMM_X64_GPR_RDI] -= mem->size;
@@ -2832,12 +2832,12 @@ x86_func_stos(struct nvmm_mem *mem, uint
 }
 
 static void
-x86_func_lods(struct nvmm_mem *mem, uint64_t *gprs)
+x86_func_lods(struct nvmm_machine *mach, struct nvmm_mem *mem, uint64_t *gprs)
 {
 	/*
 	 * Just move, and update RSI.
 	 */
-	(*__callbacks.mem)(mem);
+	(*mach->cbs.mem)(mem);
 
 	if (gprs[NVMM_X64_GPR_RFLAGS] & PSL_D) {
 		gprs[NVMM_X64_GPR_RSI] -= mem->size;
@@ -2847,7 +2847,7 @@ x86_func_lods(struct nvmm_mem *mem, uint
 }
 
 static void
-x86_func_movs(struct nvmm_mem *mem, uint64_t *gprs)
+x86_func_movs(struct nvmm_machine *mach, struct nvmm_mem *mem, uint64_t *gprs)
 {
 	/*
 	 * Special instruction: double memory operand. Don't call the cb,
@@ -3047,7 +3047,7 @@ assist_mem_double(struct nvmm_machine *m
 		return -1;
 
 	mem.size = size;
-	(*instr->emul->func)(&mem, state->gprs);
+	(*instr->emul->func)(mach, &mem, state->gprs);
 
 	return 0;
 }
@@ -3124,7 +3124,7 @@ assist_mem_single(struct nvmm_machine *m
 		memcpy(mem.data, &val, mem.size);
 	}
 
-	(*instr->emul->func)(&mem, state->gprs);
+	(*instr->emul->func)(mach, &mem, state->gprs);
 
 	if (!instr->emul->notouch && !mem.write) {
 		if (instr->dst.type != STORE_REG) {

Index: src/lib/libnvmm/nvmm.h
diff -u src/lib/libnvmm/nvmm.h:1.10 src/lib/libnvmm/nvmm.h:1.11
--- src/lib/libnvmm/nvmm.h:1.10	Sun Apr 28 14:22:13 2019
+++ src/lib/libnvmm/nvmm.h	Sat May 11 07:31:57 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: nvmm.h,v 1.10 2019/04/28 14:22:13 maxv Exp $	*/
+/*	$NetBSD: nvmm.h,v 1.11 2019/05/11 07:31:57 maxv Exp $	*/
 
 /*
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -38,13 +38,6 @@
 #include <dev/nvmm/nvmm.h>
 #include <dev/nvmm/nvmm_ioctl.h>
 
-struct nvmm_machine {
-	nvmm_machid_t machid;
-	struct nvmm_comm_page **pages;
-	size_t npages;
-	void *areas; /* opaque */
-};
-
 struct nvmm_io {
 	uint64_t port;
 	bool in;
@@ -64,6 +57,16 @@ struct nvmm_callbacks {
 	void (*mem)(struct nvmm_mem *);
 };
 
+struct nvmm_machine {
+	nvmm_machid_t machid;
+	struct nvmm_comm_page **pages;
+	size_t npages;
+	void *areas; /* opaque */
+	struct nvmm_callbacks cbs;
+};
+
+#define NVMM_MACH_CONF_CALLBACKS	NVMM_MACH_CONF_LIBNVMM_BEGIN
+
 #define NVMM_PROT_READ		0x01
 #define NVMM_PROT_WRITE		0x02
 #define NVMM_PROT_EXEC		0x04
@@ -96,7 +99,6 @@ int nvmm_gpa_to_hva(struct nvmm_machine 
 
 int nvmm_assist_io(struct nvmm_machine *, nvmm_cpuid_t, struct nvmm_exit *);
 int nvmm_assist_mem(struct nvmm_machine *, nvmm_cpuid_t, struct nvmm_exit *);
-void nvmm_callbacks_register(const struct nvmm_callbacks *);
 
 int nvmm_ctl(int, void *, size_t);
 

Index: src/sys/dev/nvmm/nvmm.c
diff -u src/sys/dev/nvmm/nvmm.c:1.20 src/sys/dev/nvmm/nvmm.c:1.21
--- src/sys/dev/nvmm/nvmm.c:1.20	Wed May  1 09:20:21 2019
+++ src/sys/dev/nvmm/nvmm.c	Sat May 11 07:31:56 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: nvmm.c,v 1.20 2019/05/01 09:20:21 maxv Exp $	*/
+/*	$NetBSD: nvmm.c,v 1.21 2019/05/11 07:31:56 maxv Exp $	*/
 
 /*
  * Copyright (c) 2018-2019 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nvmm.c,v 1.20 2019/05/01 09:20:21 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nvmm.c,v 1.21 2019/05/11 07:31:56 maxv Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -338,14 +338,16 @@ nvmm_machine_configure(struct nvmm_owner
 {
 	struct nvmm_machine *mach;
 	size_t allocsz;
+	uint64_t op;
 	void *data;
 	int error;
 
-	if (__predict_false(args->op >= nvmm_impl->conf_max)) {
+	op = NVMM_MACH_CONF_MD(args->op);
+	if (__predict_false(op >= nvmm_impl->conf_max)) {
 		return EINVAL;
 	}
 
-	allocsz = nvmm_impl->conf_sizes[args->op];
+	allocsz = nvmm_impl->conf_sizes[op];
 	data = kmem_alloc(allocsz, KM_SLEEP);
 
 	error = nvmm_machine_get(owner, args->machid, &mach, true);
@@ -359,7 +361,7 @@ nvmm_machine_configure(struct nvmm_owner
 		goto out;
 	}
 
-	error = (*nvmm_impl->machine_configure)(mach, args->op, data);
+	error = (*nvmm_impl->machine_configure)(mach, op, data);
 
 out:
 	nvmm_machine_put(mach);

Index: src/sys/dev/nvmm/nvmm.h
diff -u src/sys/dev/nvmm/nvmm.h:1.9 src/sys/dev/nvmm/nvmm.h:1.10
--- src/sys/dev/nvmm/nvmm.h:1.9	Wed May  1 09:20:21 2019
+++ src/sys/dev/nvmm/nvmm.h	Sat May 11 07:31:56 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: nvmm.h,v 1.9 2019/05/01 09:20:21 maxv Exp $	*/
+/*	$NetBSD: nvmm.h,v 1.10 2019/05/11 07:31:56 maxv Exp $	*/
 
 /*
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -94,6 +94,13 @@ struct nvmm_capability {
 	struct nvmm_cap_md arch;
 };
 
+/* Configuration slots. */
+#define NVMM_MACH_CONF_LIBNVMM_BEGIN	0
+#define NVMM_MACH_CONF_MI_BEGIN		100
+#define NVMM_MACH_CONF_MD_BEGIN		200
+
+#define NVMM_MACH_CONF_MD(op)		(op - NVMM_MACH_CONF_MD_BEGIN)
+
 struct nvmm_comm_page {
 	/* State. */
 	uint64_t state_wanted;

Index: src/sys/dev/nvmm/x86/nvmm_x86.h
diff -u src/sys/dev/nvmm/x86/nvmm_x86.h:1.14 src/sys/dev/nvmm/x86/nvmm_x86.h:1.15
--- src/sys/dev/nvmm/x86/nvmm_x86.h:1.14	Wed May  1 09:20:21 2019
+++ src/sys/dev/nvmm/x86/nvmm_x86.h	Sat May 11 07:31:56 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: nvmm_x86.h,v 1.14 2019/05/01 09:20:21 maxv Exp $	*/
+/*	$NetBSD: nvmm_x86.h,v 1.15 2019/05/11 07:31:56 maxv Exp $	*/
 
 /*
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -231,10 +231,10 @@ struct nvmm_x64_state {
 
 #define nvmm_vcpu_state nvmm_x64_state
 
-#define NVMM_X86_CONF_CPUID	0
-#define NVMM_X86_NCONF		1
+#define NVMM_MACH_CONF_X86_CPUID	NVMM_MACH_CONF_MD_BEGIN
+#define NVMM_X86_NCONF			1
 
-struct nvmm_x86_conf_cpuid {
+struct nvmm_mach_conf_x86_cpuid {
 	uint32_t leaf;
 	struct {
 		uint32_t eax;

Index: src/sys/dev/nvmm/x86/nvmm_x86_svm.c
diff -u src/sys/dev/nvmm/x86/nvmm_x86_svm.c:1.45 src/sys/dev/nvmm/x86/nvmm_x86_svm.c:1.46
--- src/sys/dev/nvmm/x86/nvmm_x86_svm.c:1.45	Wed May  1 09:20:21 2019
+++ src/sys/dev/nvmm/x86/nvmm_x86_svm.c	Sat May 11 07:31:56 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: nvmm_x86_svm.c,v 1.45 2019/05/01 09:20:21 maxv Exp $	*/
+/*	$NetBSD: nvmm_x86_svm.c,v 1.46 2019/05/11 07:31:56 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.45 2019/05/01 09:20:21 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nvmm_x86_svm.c,v 1.46 2019/05/11 07:31:56 maxv Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -496,12 +496,13 @@ static uint64_t svm_xcr0_mask __read_mos
 
 struct svm_machdata {
 	bool cpuidpresent[SVM_NCPUIDS];
-	struct nvmm_x86_conf_cpuid cpuid[SVM_NCPUIDS];
+	struct nvmm_mach_conf_x86_cpuid cpuid[SVM_NCPUIDS];
 	volatile uint64_t mach_htlb_gen;
 };
 
 static const size_t svm_conf_sizes[NVMM_X86_NCONF] = {
-	[NVMM_X86_CONF_CPUID] = sizeof(struct nvmm_x86_conf_cpuid)
+	[NVMM_MACH_CONF_MD(NVMM_MACH_CONF_X86_CPUID)] =
+	    sizeof(struct nvmm_mach_conf_x86_cpuid)
 };
 
 struct svm_cpudata {
@@ -846,7 +847,7 @@ svm_exit_cpuid(struct nvmm_machine *mach
 {
 	struct svm_machdata *machdata = mach->machdata;
 	struct svm_cpudata *cpudata = vcpu->cpudata;
-	struct nvmm_x86_conf_cpuid *cpuid;
+	struct nvmm_mach_conf_x86_cpuid *cpuid;
 	uint64_t eax, ecx;
 	u_int descs[4];
 	size_t i;
@@ -2149,11 +2150,11 @@ svm_machine_destroy(struct nvmm_machine 
 static int
 svm_machine_configure(struct nvmm_machine *mach, uint64_t op, void *data)
 {
-	struct nvmm_x86_conf_cpuid *cpuid = data;
+	struct nvmm_mach_conf_x86_cpuid *cpuid = data;
 	struct svm_machdata *machdata = (struct svm_machdata *)mach->machdata;
 	size_t i;
 
-	if (__predict_false(op != NVMM_X86_CONF_CPUID)) {
+	if (__predict_false(op != NVMM_MACH_CONF_MD(NVMM_MACH_CONF_X86_CPUID))) {
 		return EINVAL;
 	}
 
@@ -2171,7 +2172,7 @@ svm_machine_configure(struct nvmm_machin
 		}
 		if (machdata->cpuid[i].leaf == cpuid->leaf) {
 			memcpy(&machdata->cpuid[i], cpuid,
-			    sizeof(struct nvmm_x86_conf_cpuid));
+			    sizeof(struct nvmm_mach_conf_x86_cpuid));
 			return 0;
 		}
 	}
@@ -2181,7 +2182,7 @@ svm_machine_configure(struct nvmm_machin
 		if (!machdata->cpuidpresent[i]) {
 			machdata->cpuidpresent[i] = true;
 			memcpy(&machdata->cpuid[i], cpuid,
-			    sizeof(struct nvmm_x86_conf_cpuid));
+			    sizeof(struct nvmm_mach_conf_x86_cpuid));
 			return 0;
 		}
 	}

Index: src/sys/dev/nvmm/x86/nvmm_x86_vmx.c
diff -u src/sys/dev/nvmm/x86/nvmm_x86_vmx.c:1.33 src/sys/dev/nvmm/x86/nvmm_x86_vmx.c:1.34
--- src/sys/dev/nvmm/x86/nvmm_x86_vmx.c:1.33	Wed May  1 09:20:21 2019
+++ src/sys/dev/nvmm/x86/nvmm_x86_vmx.c	Sat May 11 07:31:56 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: nvmm_x86_vmx.c,v 1.33 2019/05/01 09:20:21 maxv Exp $	*/
+/*	$NetBSD: nvmm_x86_vmx.c,v 1.34 2019/05/11 07:31:56 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.33 2019/05/01 09:20:21 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nvmm_x86_vmx.c,v 1.34 2019/05/11 07:31:56 maxv Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -698,12 +698,13 @@ static uint64_t vmx_xcr0_mask __read_mos
 
 struct vmx_machdata {
 	bool cpuidpresent[VMX_NCPUIDS];
-	struct nvmm_x86_conf_cpuid cpuid[VMX_NCPUIDS];
+	struct nvmm_mach_conf_x86_cpuid cpuid[VMX_NCPUIDS];
 	volatile uint64_t mach_htlb_gen;
 };
 
 static const size_t vmx_conf_sizes[NVMM_X86_NCONF] = {
-	[NVMM_X86_CONF_CPUID] = sizeof(struct nvmm_x86_conf_cpuid)
+	[NVMM_MACH_CONF_MD(NVMM_MACH_CONF_X86_CPUID)] =
+	    sizeof(struct nvmm_mach_conf_x86_cpuid)
 };
 
 struct vmx_cpudata {
@@ -1210,7 +1211,7 @@ vmx_exit_cpuid(struct nvmm_machine *mach
 {
 	struct vmx_machdata *machdata = mach->machdata;
 	struct vmx_cpudata *cpudata = vcpu->cpudata;
-	struct nvmm_x86_conf_cpuid *cpuid;
+	struct nvmm_mach_conf_x86_cpuid *cpuid;
 	uint64_t eax, ecx;
 	u_int descs[4];
 	size_t i;
@@ -2783,11 +2784,11 @@ vmx_machine_destroy(struct nvmm_machine 
 static int
 vmx_machine_configure(struct nvmm_machine *mach, uint64_t op, void *data)
 {
-	struct nvmm_x86_conf_cpuid *cpuid = data;
+	struct nvmm_mach_conf_x86_cpuid *cpuid = data;
 	struct vmx_machdata *machdata = (struct vmx_machdata *)mach->machdata;
 	size_t i;
 
-	if (__predict_false(op != NVMM_X86_CONF_CPUID)) {
+	if (__predict_false(op != NVMM_MACH_CONF_MD(NVMM_MACH_CONF_X86_CPUID))) {
 		return EINVAL;
 	}
 
@@ -2805,7 +2806,7 @@ vmx_machine_configure(struct nvmm_machin
 		}
 		if (machdata->cpuid[i].leaf == cpuid->leaf) {
 			memcpy(&machdata->cpuid[i], cpuid,
-			    sizeof(struct nvmm_x86_conf_cpuid));
+			    sizeof(struct nvmm_mach_conf_x86_cpuid));
 			return 0;
 		}
 	}
@@ -2815,7 +2816,7 @@ vmx_machine_configure(struct nvmm_machin
 		if (!machdata->cpuidpresent[i]) {
 			machdata->cpuidpresent[i] = true;
 			memcpy(&machdata->cpuid[i], cpuid,
-			    sizeof(struct nvmm_x86_conf_cpuid));
+			    sizeof(struct nvmm_mach_conf_x86_cpuid));
 			return 0;
 		}
 	}

Index: src/tests/lib/libnvmm/h_io_assist.c
diff -u src/tests/lib/libnvmm/h_io_assist.c:1.6 src/tests/lib/libnvmm/h_io_assist.c:1.7
--- src/tests/lib/libnvmm/h_io_assist.c:1.6	Fri Mar 22 01:50:14 2019
+++ src/tests/lib/libnvmm/h_io_assist.c	Sat May 11 07:31:57 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: h_io_assist.c,v 1.6 2019/03/22 01:50:14 htodd Exp $	*/
+/*	$NetBSD: h_io_assist.c,v 1.7 2019/05/11 07:31:57 maxv Exp $	*/
 
 /*
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -353,7 +353,7 @@ static const struct test tests[] = {
 	{ NULL, NULL, NULL, NULL, false }
 };
 
-static const struct nvmm_callbacks callbacks = {
+static struct nvmm_callbacks callbacks = {
 	.io = io_callback,
 	.mem = NULL
 };
@@ -375,7 +375,7 @@ int main(int argc, char *argv[])
 		err(errno, "nvmm_machine_create");
 	if (nvmm_vcpu_create(&mach, 0) == -1)
 		err(errno, "nvmm_vcpu_create");
-	nvmm_callbacks_register(&callbacks);
+	nvmm_machine_configure(&mach, NVMM_MACH_CONF_CALLBACKS, &callbacks);
 	map_pages(&mach);
 
 	for (i = 0; tests[i].name != NULL; i++) {

Index: src/tests/lib/libnvmm/h_mem_assist.c
diff -u src/tests/lib/libnvmm/h_mem_assist.c:1.9 src/tests/lib/libnvmm/h_mem_assist.c:1.10
--- src/tests/lib/libnvmm/h_mem_assist.c:1.9	Fri Mar 22 01:50:14 2019
+++ src/tests/lib/libnvmm/h_mem_assist.c	Sat May 11 07:31:57 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: h_mem_assist.c,v 1.9 2019/03/22 01:50:14 htodd Exp $	*/
+/*	$NetBSD: h_mem_assist.c,v 1.10 2019/05/11 07:31:57 maxv Exp $	*/
 
 /*
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -328,7 +328,7 @@ static const struct test tests[] = {
 	{ NULL, NULL, NULL, -1 }
 };
 
-static const struct nvmm_callbacks callbacks = {
+static struct nvmm_callbacks callbacks = {
 	.io = NULL,
 	.mem = mem_callback
 };
@@ -350,7 +350,7 @@ int main(int argc, char *argv[])
 		err(errno, "nvmm_machine_create");
 	if (nvmm_vcpu_create(&mach, 0) == -1)
 		err(errno, "nvmm_vcpu_create");
-	nvmm_callbacks_register(&callbacks);
+	nvmm_machine_configure(&mach, NVMM_MACH_CONF_CALLBACKS, &callbacks);
 	map_pages(&mach);
 
 	for (i = 0; tests[i].name != NULL; i++) {

Reply via email to