]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: validate virtio-gpu with vhost-user
authorMarc-André Lureau <marcandre.lureau@redhat.com>
Mon, 23 Sep 2019 10:44:31 +0000 (14:44 +0400)
committerCole Robinson <crobinso@redhat.com>
Tue, 24 Sep 2019 16:30:02 +0000 (12:30 -0400)
Check qemu capability, and accept 3d acceleration. 3d acceleration
support is checked when looking for a suitable vhost-user helper.

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

index 0b2afe6841a5514539700cdf35fca6d02a959fb7..a92e9617cc3f4f7f030840c1aeafdf6bfaadc42e 100644 (file)
@@ -5266,34 +5266,43 @@ qemuProcessStartValidateVideo(virDomainObjPtr vm,
     for (i = 0; i < vm->def->nvideos; i++) {
         video = vm->def->videos[i];
 
-        if ((video->type == VIR_DOMAIN_VIDEO_TYPE_VGA &&
-             !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VGA)) ||
-            (video->type == VIR_DOMAIN_VIDEO_TYPE_CIRRUS &&
-             !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_CIRRUS_VGA)) ||
-            (video->type == VIR_DOMAIN_VIDEO_TYPE_VMVGA &&
-             !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VMWARE_SVGA)) ||
-            (video->type == VIR_DOMAIN_VIDEO_TYPE_QXL &&
-             !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QXL)) ||
-            (video->type == VIR_DOMAIN_VIDEO_TYPE_VIRTIO &&
-             !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_GPU)) ||
-            (video->type == VIR_DOMAIN_VIDEO_TYPE_VIRTIO &&
-             video->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW &&
-             !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_GPU_CCW))) {
-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                           _("this QEMU does not support '%s' video device"),
-                           virDomainVideoTypeToString(video->type));
-            return -1;
-        }
-
-        if (video->accel) {
-            if (video->accel->accel3d == VIR_TRISTATE_SWITCH_ON &&
-                (video->type != VIR_DOMAIN_VIDEO_TYPE_VIRTIO ||
-                 !virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_GPU_VIRGL))) {
+        if (video->backend == VIR_DOMAIN_VIDEO_BACKEND_TYPE_VHOSTUSER) {
+            if (video->type == VIR_DOMAIN_VIDEO_TYPE_VIRTIO &&
+                !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VHOST_USER_GPU)) {
+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                               _("this QEMU does not support 'vhost-user' video device"));
+                return -1;
+            }
+        } else {
+            if ((video->type == VIR_DOMAIN_VIDEO_TYPE_VGA &&
+                 !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VGA)) ||
+                (video->type == VIR_DOMAIN_VIDEO_TYPE_CIRRUS &&
+                 !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_CIRRUS_VGA)) ||
+                (video->type == VIR_DOMAIN_VIDEO_TYPE_VMVGA &&
+                 !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VMWARE_SVGA)) ||
+                (video->type == VIR_DOMAIN_VIDEO_TYPE_QXL &&
+                 !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QXL)) ||
+                (video->type == VIR_DOMAIN_VIDEO_TYPE_VIRTIO &&
+                 !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_GPU)) ||
+                (video->type == VIR_DOMAIN_VIDEO_TYPE_VIRTIO &&
+                 video->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW &&
+                 !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_GPU_CCW))) {
                 virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                               _("%s 3d acceleration is not supported"),
+                               _("this QEMU does not support '%s' video device"),
                                virDomainVideoTypeToString(video->type));
                 return -1;
             }
+
+            if (video->accel) {
+                if (video->accel->accel3d == VIR_TRISTATE_SWITCH_ON &&
+                    (video->type != VIR_DOMAIN_VIDEO_TYPE_VIRTIO ||
+                     !virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_GPU_VIRGL))) {
+                    virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                                   _("%s 3d acceleration is not supported"),
+                                   virDomainVideoTypeToString(video->type));
+                    return -1;
+                }
+            }
         }
     }
 
index a8fd371674200a6dd6cad98b0b082086f83d60ac..0b8ea13f5883540f83416dcd35e5cf3cc9f68998 100644 (file)
@@ -2892,8 +2892,7 @@ mymain(void)
     DO_TEST("virtio-options", QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_KEYBOARD,
             QEMU_CAPS_VIRTIO_MOUSE, QEMU_CAPS_VIRTIO_TABLET,
             QEMU_CAPS_VIRTIO_INPUT_HOST,
-            QEMU_CAPS_DEVICE_VIRTIO_GPU,
-            QEMU_CAPS_VIRTIO_GPU_VIRGL,
+            QEMU_CAPS_DEVICE_VHOST_USER_GPU,
             QEMU_CAPS_DEVICE_VIRTIO_RNG,
             QEMU_CAPS_OBJECT_RNG_RANDOM,
             QEMU_CAPS_DEVICE_VIDEO_PRIMARY,