[PATCH] qemu: modprobe vhost-vsock module

Nikolay Shirokovskiy nshirokovskiy at virtuozzo.com
Tue Jul 28 09:58:07 UTC 2020


/dev/vhost-vsock is usable only if the module is loaded.  Let's load the module
just like in other places where kernel module is required (nbd, pci stub
driver).

Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy at virtuozzo.com>
---
 src/qemu/qemu_process.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index ec6ca14..5aaa77c 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -92,6 +92,7 @@
 #include "viridentity.h"
 #include "virthreadjob.h"
 #include "virutil.h"
+#include "virkmod.h"
 
 #define VIR_FROM_THIS VIR_FROM_QEMU
 
@@ -6414,6 +6415,7 @@ qemuProcessPrepareHostStorage(virQEMUDriverPtr driver,
     return 0;
 }
 
+#define VHOST_VSOCK_MODULE "vhost-vsock"
 
 int
 qemuProcessOpenVhostVsock(virDomainVsockDefPtr vsock)
@@ -6422,6 +6424,22 @@ qemuProcessOpenVhostVsock(virDomainVsockDefPtr vsock)
     const char *vsock_path = "/dev/vhost-vsock";
     int fd;
 
+    if (virKModIsProhibited(VHOST_VSOCK_MODULE)) {
+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                       _("Failed to load vhost-vsock module: "
+                         "administratively prohibited"));
+        return -1;
+    } else {
+        g_autofree char *errbuf = NULL;
+
+        if ((errbuf = virKModLoad(VHOST_VSOCK_MODULE))) {
+            virReportError(VIR_ERR_INTERNAL_ERROR,
+                           _("Failed to load vhost-vsock module: %s"),
+                           errbuf);
+            return -1;
+        }
+    }
+
     if ((fd = open(vsock_path, O_RDWR)) < 0) {
         virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
                        "%s", _("unable to open vhost-vsock device"));
-- 
1.8.3.1




More information about the libvir-list mailing list