]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: Adapt to virtio-gpu-gl-pci device
authorHan Han <hhan@redhat.com>
Wed, 9 Jun 2021 08:32:25 +0000 (16:32 +0800)
committerMichal Privoznik <mprivozn@redhat.com>
Fri, 11 Jun 2021 11:06:53 +0000 (13:06 +0200)
QEMU 6.1 will add virtio-gpu-gl-pci device to replace the virgl property
of virtio-gpu-pci device. Adapt to that change.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1967356

Signed-off-by: Han Han <hhan@redhat.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/qemu/qemu_command.c

index 7834fc2130c74bcf35b7750447630adecdfb0a02..e595efe97a49e5fe0598e757b3de7026e246aae9 100644 (file)
@@ -4203,6 +4203,10 @@ qemuBuildDeviceVideoStr(const virDomainDef *def,
 {
     g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
     const char *model = NULL;
+    virTristateSwitch accel3d = VIR_TRISTATE_SWITCH_ABSENT;
+
+    if (video->accel)
+        accel3d = video->accel->accel3d;
 
     /* We try to chose the best model for primary video device by preferring
      * model with VGA compatibility mode.  For some video devices on some
@@ -4228,6 +4232,11 @@ qemuBuildDeviceVideoStr(const virDomainDef *def,
     }
 
     if (STREQ(model, "virtio-gpu") || STREQ(model, "vhost-user-gpu")) {
+        if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_GPU_GL_PCI) &&
+            accel3d == VIR_TRISTATE_SWITCH_ON &&
+            STREQ(model, "virtio-gpu"))
+            model = "virtio-gpu-gl";
+
         if (qemuBuildVirtioDevStr(&buf, model, qemuCaps,
                                   VIR_DOMAIN_DEVICE_VIDEO, video) < 0) {
             return NULL;
@@ -4242,10 +4251,10 @@ qemuBuildDeviceVideoStr(const virDomainDef *def,
         video->type == VIR_DOMAIN_VIDEO_TYPE_VIRTIO) {
         if (video->accel &&
             virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_GPU_VIRGL) &&
-            (video->accel->accel3d == VIR_TRISTATE_SWITCH_ON ||
-             video->accel->accel3d == VIR_TRISTATE_SWITCH_OFF)) {
+            (accel3d == VIR_TRISTATE_SWITCH_ON ||
+             accel3d == VIR_TRISTATE_SWITCH_OFF)) {
             virBufferAsprintf(&buf, ",virgl=%s",
-                              virTristateSwitchTypeToString(video->accel->accel3d));
+                              virTristateSwitchTypeToString(accel3d));
         }
     }