Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src Add the "nvmm" group, and make nvmm_init() public. Sent to t...
details: https://anonhg.NetBSD.org/src/rev/5642e88f0641
branches: trunk
changeset: 966332:5642e88f0641
user: maxv <maxv%NetBSD.org@localhost>
date: Sun Oct 27 07:08:15 2019 +0000
description:
Add the "nvmm" group, and make nvmm_init() public. Sent to tech-kern@ a few
days ago.
diffstat:
etc/MAKEDEV.tmpl | 5 +++--
etc/group | 1 +
lib/libnvmm/libnvmm.3 | 27 ++++++++++++++++++++++++++-
lib/libnvmm/libnvmm.c | 16 ++--------------
lib/libnvmm/nvmm.h | 4 +++-
tests/lib/libnvmm/h_io_assist.c | 4 +++-
tests/lib/libnvmm/h_mem_assist.c | 4 +++-
7 files changed, 41 insertions(+), 20 deletions(-)
diffs (198 lines):
diff -r e6489cc60fb6 -r 5642e88f0641 etc/MAKEDEV.tmpl
--- a/etc/MAKEDEV.tmpl Sun Oct 27 02:07:42 2019 +0000
+++ b/etc/MAKEDEV.tmpl Sun Oct 27 07:08:15 2019 +0000
@@ -1,5 +1,5 @@
#!/bin/sh -
-# $NetBSD: MAKEDEV.tmpl,v 1.208 2019/09/19 01:44:48 thorpej Exp $
+# $NetBSD: MAKEDEV.tmpl,v 1.209 2019/10/27 07:08:15 maxv Exp $
#
# Copyright (c) 2003,2007,2008 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -500,6 +500,7 @@
g_gpio="%gid__gpio%"
g_kmem="%gid_kmem%"
g_ntpd="%gid_ntpd%"
+ g_nvmm="%gid_nvmm%"
g_operator="%gid_operator%"
g_wheel="%gid_wheel%"
dialin=0
@@ -2227,7 +2228,7 @@
;;
nvmm)
- mkdev nvmm c %nvmm_chr% 0
+ mkdev nvmm c %nvmm_chr% 0 640 $g_nvmm
;;
autofs)
diff -r e6489cc60fb6 -r 5642e88f0641 etc/group
--- a/etc/group Sun Oct 27 02:07:42 2019 +0000
+++ b/etc/group Sun Oct 27 07:08:15 2019 +0000
@@ -29,6 +29,7 @@
guest:*:31:root
_unbound:*:32:
_nsd:*:33:
+nvmm:*:34:root
nobody:*:39:
utmp:*:45:
authpf:*:72:
diff -r e6489cc60fb6 -r 5642e88f0641 lib/libnvmm/libnvmm.3
--- a/lib/libnvmm/libnvmm.3 Sun Oct 27 02:07:42 2019 +0000
+++ b/lib/libnvmm/libnvmm.3 Sun Oct 27 07:08:15 2019 +0000
@@ -1,4 +1,4 @@
-.\" $NetBSD: libnvmm.3,v 1.20 2019/10/25 09:09:24 maxv Exp $
+.\" $NetBSD: libnvmm.3,v 1.21 2019/10/27 07:08:15 maxv Exp $
.\"
.\" Copyright (c) 2018, 2019 The NetBSD Foundation, Inc.
.\" All rights reserved.
@@ -38,6 +38,8 @@
.Sh SYNOPSIS
.In nvmm.h
.Ft int
+.Fn nvmm_init "void"
+.Ft int
.Fn nvmm_capability "struct nvmm_capability *cap"
.Ft int
.Fn nvmm_machine_create "struct nvmm_machine *mach"
@@ -98,6 +100,12 @@
A virtual CPU is described by a public structure,
.Cd nvmm_vcpu .
.Pp
+.Fn nvmm_init
+initializes NVMM.
+See
+.Sx NVMM Initialization
+below for details.
+.Pp
.Fn nvmm_capability
gets the capabilities of NVMM.
See
@@ -277,6 +285,23 @@
See
.Sx Mem Assist
below for details.
+.Ss NVMM Initialization
+NVMM initialization is performed by the
+.Fn nvmm_init
+function, which must be invoked by emulator software before any other NVMM
+function.
+.Pp
+.Fn nvmm_init
+opens the NVMM device, and expects to have the proper permissions to do so.
+In a default configuration, this implies being part of the "nvmm" group.
+If using a special configuration, emulator software should arrange to have the
+proper permissions before invoking
+.Fn nvmm_init ,
+and can drop them after the call has completed.
+.Pp
+It is to be noted that
+.Fn nvmm_init
+may perform non-re-entrant operations, and should be called only once.
.Ss NVMM Capability
The
.Cd nvmm_capability
diff -r e6489cc60fb6 -r 5642e88f0641 lib/libnvmm/libnvmm.c
--- a/lib/libnvmm/libnvmm.c Sun Oct 27 02:07:42 2019 +0000
+++ b/lib/libnvmm/libnvmm.c Sun Oct 27 07:08:15 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: libnvmm.c,v 1.16 2019/10/23 12:02:55 maxv Exp $ */
+/* $NetBSD: libnvmm.c,v 1.17 2019/10/27 07:08:15 maxv Exp $ */
/*
* Copyright (c) 2018-2019 The NetBSD Foundation, Inc.
@@ -156,7 +156,7 @@
/* -------------------------------------------------------------------------- */
-static int
+int
nvmm_init(void)
{
if (nvmm_fd != -1)
@@ -185,10 +185,6 @@
struct nvmm_ioc_capability args;
int ret;
- if (nvmm_init() == -1) {
- return -1;
- }
-
ret = ioctl(nvmm_fd, NVMM_IOC_CAPABILITY, &args);
if (ret == -1)
return -1;
@@ -206,10 +202,6 @@
area_list_t *areas;
int ret;
- if (nvmm_init() == -1) {
- return -1;
- }
-
areas = calloc(1, sizeof(*areas));
if (areas == NULL)
return -1;
@@ -537,10 +529,6 @@
struct nvmm_ioc_ctl args;
int ret;
- if (nvmm_init() == -1) {
- return -1;
- }
-
args.op = op;
args.data = data;
args.size = size;
diff -r e6489cc60fb6 -r 5642e88f0641 lib/libnvmm/nvmm.h
--- a/lib/libnvmm/nvmm.h Sun Oct 27 02:07:42 2019 +0000
+++ b/lib/libnvmm/nvmm.h Sun Oct 27 07:08:15 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: nvmm.h,v 1.14 2019/10/23 12:02:55 maxv Exp $ */
+/* $NetBSD: nvmm.h,v 1.15 2019/10/27 07:08:15 maxv Exp $ */
/*
* Copyright (c) 2018-2019 The NetBSD Foundation, Inc.
@@ -89,6 +89,8 @@
#define NVMM_PROT_ALL 0x0F
typedef uint64_t nvmm_prot_t;
+int nvmm_init(void);
+
int nvmm_capability(struct nvmm_capability *);
int nvmm_machine_create(struct nvmm_machine *);
diff -r e6489cc60fb6 -r 5642e88f0641 tests/lib/libnvmm/h_io_assist.c
--- a/tests/lib/libnvmm/h_io_assist.c Sun Oct 27 02:07:42 2019 +0000
+++ b/tests/lib/libnvmm/h_io_assist.c Sun Oct 27 07:08:15 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: h_io_assist.c,v 1.10 2019/10/23 12:02:55 maxv Exp $ */
+/* $NetBSD: h_io_assist.c,v 1.11 2019/10/27 07:08:15 maxv Exp $ */
/*
* Copyright (c) 2018-2019 The NetBSD Foundation, Inc.
@@ -373,6 +373,8 @@
struct nvmm_vcpu vcpu;
size_t i;
+ if (nvmm_init() == -1)
+ err(errno, "nvmm_init");
if (nvmm_machine_create(&mach) == -1)
err(errno, "nvmm_machine_create");
if (nvmm_vcpu_create(&mach, 0, &vcpu) == -1)
diff -r e6489cc60fb6 -r 5642e88f0641 tests/lib/libnvmm/h_mem_assist.c
--- a/tests/lib/libnvmm/h_mem_assist.c Sun Oct 27 02:07:42 2019 +0000
+++ b/tests/lib/libnvmm/h_mem_assist.c Sun Oct 27 07:08:15 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: h_mem_assist.c,v 1.16 2019/10/23 12:02:55 maxv Exp $ */
+/* $NetBSD: h_mem_assist.c,v 1.17 2019/10/27 07:08:15 maxv Exp $ */
/*
* Copyright (c) 2018-2019 The NetBSD Foundation, Inc.
@@ -459,6 +459,8 @@
int main(int argc, char *argv[])
{
+ if (nvmm_init() == -1)
+ err(errno, "nvmm_init");
test_vm64();
test_vm16();
return 0;
Home |
Main Index |
Thread Index |
Old Index