The branch main has been updated by markj:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=23a28fe7776f6d76643a6ac16758d114dfbbeec2

commit 23a28fe7776f6d76643a6ac16758d114dfbbeec2
Author:     Mark Johnston <ma...@freebsd.org>
AuthorDate: 2025-02-06 14:37:46 +0000
Commit:     Mark Johnston <ma...@freebsd.org>
CommitDate: 2025-02-06 16:25:42 +0000

    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
---
 lib/libvmmapi/vmmapi.c | 22 ++++++++++++----------
 1 file 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
@@ -90,6 +90,14 @@ vm_device_open(const char *name)
        return (open(devpath, O_RDWR));
 }
 
+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)
 {
@@ -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);

Reply via email to