]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: prepare domain for vhost-user GPU
authorMarc-André Lureau <marcandre.lureau@redhat.com>
Mon, 23 Sep 2019 10:44:40 +0000 (14:44 +0400)
committerCole Robinson <crobinso@redhat.com>
Tue, 24 Sep 2019 17:19:09 +0000 (13:19 -0400)
Call qemuExtVhostUserGPUPrepareDomain() to fill the domain with the
location of the vhost-user binary to start.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Cole Robinson <crobinso@redhat.com>
src/qemu/qemu_extdevice.c
src/qemu/qemu_extdevice.h
src/qemu/qemu_process.c

index 409e2d82eed533041641fce961b373f534958e31..7855fa677081d70aecff61a214c0fd1e74661961 100644 (file)
@@ -21,6 +21,7 @@
 #include <config.h>
 
 #include "qemu_extdevice.h"
+#include "qemu_vhost_user_gpu.h"
 #include "qemu_domain.h"
 #include "qemu_tpm.h"
 #include "qemu_slirp.h"
@@ -78,6 +79,34 @@ qemuExtDevicesInitPaths(virQEMUDriverPtr driver,
 }
 
 
+/*
+ * qemuExtDevicesPrepareDomain:
+ *
+ * @driver: QEMU driver
+ * @vm: domain
+ *
+ * Code that modifies live XML of a domain which is about to start.
+ */
+int
+qemuExtDevicesPrepareDomain(virQEMUDriverPtr driver,
+                            virDomainObjPtr vm)
+{
+    int ret = 0;
+    size_t i;
+
+    for (i = 0; i < vm->def->nvideos; i++) {
+        virDomainVideoDefPtr video = vm->def->videos[i];
+
+        if (video->backend == VIR_DOMAIN_VIDEO_BACKEND_TYPE_VHOSTUSER) {
+            if ((ret = qemuExtVhostUserGPUPrepareDomain(driver, video)) < 0)
+                break;
+        }
+    }
+
+    return ret;
+}
+
+
 /*
  * qemuExtDevicesPrepareHost:
  *
index f29317498ba84d977974e2797717d70946a7df69..a035c9f6380dbed028615356371a71e8f2f7789c 100644 (file)
@@ -30,6 +30,11 @@ int qemuExtDeviceLogCommand(virQEMUDriverPtr driver,
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4)
     ATTRIBUTE_RETURN_CHECK;
 
+int qemuExtDevicesPrepareDomain(virQEMUDriverPtr driver,
+                                virDomainObjPtr vm)
+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
+    ATTRIBUTE_RETURN_CHECK;
+
 int qemuExtDevicesPrepareHost(virQEMUDriverPtr driver,
                               virDomainObjPtr vm)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
index a92e9617cc3f4f7f030840c1aeafdf6bfaadc42e..a50cd54393c4a639952f0b4d9f9a2c4550ef1053 100644 (file)
@@ -6367,6 +6367,10 @@ qemuProcessPrepareDomain(virQEMUDriverPtr driver,
     if (qemuFirmwareFillDomain(driver, vm, flags) < 0)
         goto cleanup;
 
+    VIR_DEBUG("Preparing external devices");
+    if (qemuExtDevicesPrepareDomain(driver, vm) < 0)
+        goto cleanup;
+
     for (i = 0; i < vm->def->nchannels; i++) {
         if (qemuDomainPrepareChannel(vm->def->channels[i],
                                      priv->channelTargetDir) < 0)