aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMark Johnston <markj@FreeBSD.org>2025-02-06 14:37:46 +0000
committerMark Johnston <markj@FreeBSD.org>2025-02-06 16:25:42 +0000
commit23a28fe7776f6d76643a6ac16758d114dfbbeec2 (patch)
tree00c43ea68b3353df38a246206cd51606d3358366 /lib
parent7a66b3008693ce61957e8b2a3d99829063e1e4af (diff)
libvmmapi: Fix auto-loading of vmm.ko
- We should autoload vmm.ko when creating a VM with vm_openf(), to preserve behaviour prior to commit 99127fd10362. - kldload(2) returns a non-zero value upon success, so the existing code was wrong. Reviewed by: jhb Reported by: olivier Fixes: 99127fd10362 ("libvmmapi: Use the vmmctl device file to create and destroy VMs") Differential Revision: https://reviews.freebsd.org/D48797
Diffstat (limited to 'lib')
-rw-r--r--lib/libvmmapi/vmmapi.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/lib/libvmmapi/vmmapi.c b/lib/libvmmapi/vmmapi.c
index 5042a1f3914e..a1a5d56ff8a2 100644
--- a/lib/libvmmapi/vmmapi.c
+++ b/lib/libvmmapi/vmmapi.c
@@ -91,6 +91,14 @@ vm_device_open(const char *name)
}
static int
+vm_ctl_open(void)
+{
+ if (modfind("vmm") < 0)
+ (void)kldload("vmm");
+ return (open("/dev/vmmctl", O_RDWR, 0));
+}
+
+static int
vm_ctl_create(const char *name, int ctlfd)
{
struct vmmctl_vm_create vmc;
@@ -108,16 +116,10 @@ vm_create(const char *name)
{
int error, fd;
- /* Try to load vmm(4) module before creating a guest. */
- if (modfind("vmm") < 0) {
- error = kldload("vmm");
- if (error != 0)
- return (-1);
- }
-
- fd = open("/dev/vmmctl", O_RDWR, 0);
+ fd = vm_ctl_open();
if (fd < 0)
- return (fd);
+ return (-1);
+
error = vm_ctl_create(name, fd);
if (error != 0) {
error = errno;
@@ -153,7 +155,7 @@ vm_openf(const char *name, int flags)
strcpy(vm->name, name);
memset(vm->memsegs, 0, sizeof(vm->memsegs));
- if ((vm->ctlfd = open("/dev/vmmctl", O_RDWR, 0)) < 0)
+ if ((vm->ctlfd = vm_ctl_open()) < 0)
goto err;
vm->fd = vm_device_open(vm->name);