]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: Validate video model
authorMichal Privoznik <mprivozn@redhat.com>
Fri, 13 Nov 2020 19:43:39 +0000 (20:43 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Mon, 16 Nov 2020 17:26:46 +0000 (18:26 +0100)
The aim is to eliminate virDomainCapsDeviceDefValidate(). And in
order to do so, the domain video model has to be validated in
qemuValidateDomainDeviceDefVideo().

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
src/conf/domain_capabilities.c
src/qemu/qemu_validate.c
tests/qemuxml2argvdata/default-video-type-x86_64-caps-test-0.err
tests/qemuxml2argvdata/video-invalid-multiple-devices.err

index b886ba70904c316483b0f7d89402448129968a78..0e0e6d16007bbdff0797b9da623474a983d85b8f 100644 (file)
@@ -640,22 +640,8 @@ virDomainCapsFormat(const virDomainCaps *caps)
     } while (0)
 
 
-static int
-virDomainCapsDeviceVideoDefValidate(const virDomainCaps *caps,
-                                    const virDomainVideoDef *dev)
-{
-    if (ENUM_VALUE_MISSING(caps->video.modelType, dev->type)) {
-        ENUM_VALUE_ERROR("video model",
-                         virDomainVideoTypeToString(dev->type));
-        return -1;
-    }
-
-    return 0;
-}
-
-
 int
-virDomainCapsDeviceDefValidate(const virDomainCaps *caps,
+virDomainCapsDeviceDefValidate(const virDomainCaps *caps G_GNUC_UNUSED,
                                const virDomainDeviceDef *dev,
                                const virDomainDef *def G_GNUC_UNUSED)
 {
@@ -663,9 +649,6 @@ virDomainCapsDeviceDefValidate(const virDomainCaps *caps,
 
     switch ((virDomainDeviceType) dev->type) {
     case VIR_DOMAIN_DEVICE_VIDEO:
-        ret = virDomainCapsDeviceVideoDefValidate(caps, dev->data.video);
-        break;
-
     case VIR_DOMAIN_DEVICE_AUDIO:
         /* TODO: add validation */
         break;
index c18865367eb198f168395c53f9facdeb7f93dcb7..4defdb02cf01b31060d432532abc6745bf4b0c51 100644 (file)
@@ -2203,10 +2203,52 @@ static int
 qemuValidateDomainDeviceDefVideo(const virDomainVideoDef *video,
                                  virQEMUCapsPtr qemuCaps)
 {
+    virQEMUCapsFlags cap = QEMU_CAPS_LAST;
+
     /* there's no properties to validate for NONE video devices */
     if (video->type == VIR_DOMAIN_VIDEO_TYPE_NONE)
         return 0;
 
+    switch ((virDomainVideoType) video->type) {
+    case VIR_DOMAIN_VIDEO_TYPE_VGA:
+        cap = QEMU_CAPS_DEVICE_VGA;
+        break;
+    case VIR_DOMAIN_VIDEO_TYPE_CIRRUS:
+        cap = QEMU_CAPS_DEVICE_CIRRUS_VGA;
+        break;
+    case VIR_DOMAIN_VIDEO_TYPE_VMVGA:
+        cap = QEMU_CAPS_DEVICE_VMWARE_SVGA;
+        break;
+    case VIR_DOMAIN_VIDEO_TYPE_QXL:
+        cap = QEMU_CAPS_DEVICE_QXL;
+        break;
+    case VIR_DOMAIN_VIDEO_TYPE_VIRTIO:
+        cap = QEMU_CAPS_DEVICE_VIRTIO_GPU;
+        break;
+    case VIR_DOMAIN_VIDEO_TYPE_BOCHS:
+        cap = QEMU_CAPS_DEVICE_BOCHS_DISPLAY;
+        break;
+    case VIR_DOMAIN_VIDEO_TYPE_RAMFB:
+        cap = QEMU_CAPS_DEVICE_RAMFB;
+        break;
+    case VIR_DOMAIN_VIDEO_TYPE_DEFAULT:
+    case VIR_DOMAIN_VIDEO_TYPE_XEN:
+    case VIR_DOMAIN_VIDEO_TYPE_VBOX:
+    case VIR_DOMAIN_VIDEO_TYPE_PARALLELS:
+    case VIR_DOMAIN_VIDEO_TYPE_GOP:
+    case VIR_DOMAIN_VIDEO_TYPE_NONE:
+    case VIR_DOMAIN_VIDEO_TYPE_LAST:
+        /* nada */
+        break;
+    }
+
+    if (!virQEMUCapsGet(qemuCaps, cap)) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                       _("domain configuration does not support video model '%s'"),
+                       virDomainVideoTypeToString(video->type));
+        return -1;
+    }
+
     if (!video->primary &&
         video->type != VIR_DOMAIN_VIDEO_TYPE_QXL &&
         video->type != VIR_DOMAIN_VIDEO_TYPE_VIRTIO) {
index 82576471b7aa05d4091394efe695cd6c88486a3c..f7b6b57926d4ba090dc16b104759ca88729f31ed 100644 (file)
@@ -1 +1 @@
-unsupported configuration: domain configuration does not support 'video model' value 'default'
+unsupported configuration: domain configuration does not support video model 'default'
index 7fc20b23702111517c963f21725046da420a9bf5..5c1e557021c93d2b19dcae78487482cfe5bc59c1 100644 (file)
@@ -1 +1 @@
-unsupported configuration: domain configuration does not support 'video model' value 'qxl'
+unsupported configuration: domain configuration does not support video model 'qxl'