diff options
author | Mark Johnston <markj@FreeBSD.org> | 2025-02-06 14:37:46 +0000 |
---|---|---|
committer | Mark Johnston <markj@FreeBSD.org> | 2025-02-06 16:25:42 +0000 |
commit | 23a28fe7776f6d76643a6ac16758d114dfbbeec2 (patch) | |
tree | 00c43ea68b3353df38a246206cd51606d3358366 /lib | |
parent | 7a66b3008693ce61957e8b2a3d99829063e1e4af (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.c | 22 |
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); |