[PATCH v2 5/6] qemu: unify domain caps validation for video devices

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



As suggested by Cole, this patch uses the domain capabilities to
validate the supported video model types. By using the domain
capabilities, the validation will automatically adjust when new enum
members are added.

Signed-off-by: Jonathon Jongsma <jjongsma@xxxxxxxxxx>
---
 src/conf/domain_capabilities.c | 17 ++++++++++++-
 src/qemu/qemu_domain.c         | 45 ----------------------------------
 2 files changed, 16 insertions(+), 46 deletions(-)

diff --git a/src/conf/domain_capabilities.c b/src/conf/domain_capabilities.c
index fe93388cce..baf33b4722 100644
--- a/src/conf/domain_capabilities.c
+++ b/src/conf/domain_capabilities.c
@@ -686,6 +686,19 @@ virDomainCapsDeviceRNGDefValidate(virDomainCapsPtr const caps,
     return 0;
 }
 
+static int
+virDomainCapsDeviceVideoDefValidate(virDomainCapsPtr const caps,
+                                  const virDomainVideoDefPtr dev)
+{
+    if (ENUM_VALUE_MISSING(caps->video.modelType, dev->type)) {
+        ENUM_VALUE_ERROR("video model",
+                         virDomainVideoTypeToString(dev->type));
+        return -1;
+    }
+
+    return 0;
+}
+
 
 int
 virDomainCapsDeviceDefValidate(virDomainCapsPtr const caps,
@@ -698,6 +711,9 @@ virDomainCapsDeviceDefValidate(virDomainCapsPtr const caps,
     case VIR_DOMAIN_DEVICE_RNG:
         ret = virDomainCapsDeviceRNGDefValidate(caps, dev->data.rng);
         break;
+    case VIR_DOMAIN_DEVICE_VIDEO:
+        ret = virDomainCapsDeviceVideoDefValidate(caps, dev->data.video);
+        break;
 
     case VIR_DOMAIN_DEVICE_DISK:
     case VIR_DOMAIN_DEVICE_REDIRDEV:
@@ -706,7 +722,6 @@ virDomainCapsDeviceDefValidate(virDomainCapsPtr const caps,
     case VIR_DOMAIN_DEVICE_CHR:
     case VIR_DOMAIN_DEVICE_SMARTCARD:
     case VIR_DOMAIN_DEVICE_HOSTDEV:
-    case VIR_DOMAIN_DEVICE_VIDEO:
     case VIR_DOMAIN_DEVICE_MEMORY:
     case VIR_DOMAIN_DEVICE_VSOCK:
     case VIR_DOMAIN_DEVICE_INPUT:
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index def90a0f7d..bb34638427 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -5717,51 +5717,6 @@ qemuDomainDeviceDefValidateVideo(const virDomainVideoDef *video,
             return -1;
         }
     } else {
-        switch ((virDomainVideoType) video->type) {
-            case VIR_DOMAIN_VIDEO_TYPE_NONE:
-                return 0;
-            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_DEFAULT:
-                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                               _("video type '%s' is not supported with QEMU"),
-                               virDomainVideoTypeToString(video->type));
-                return -1;
-            case VIR_DOMAIN_VIDEO_TYPE_VGA:
-            case VIR_DOMAIN_VIDEO_TYPE_CIRRUS:
-            case VIR_DOMAIN_VIDEO_TYPE_VMVGA:
-            case VIR_DOMAIN_VIDEO_TYPE_QXL:
-            case VIR_DOMAIN_VIDEO_TYPE_VIRTIO:
-            case VIR_DOMAIN_VIDEO_TYPE_BOCHS:
-            case VIR_DOMAIN_VIDEO_TYPE_RAMFB:
-            case VIR_DOMAIN_VIDEO_TYPE_LAST:
-                break;
-        }
-        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)) ||
-            (video->type == VIR_DOMAIN_VIDEO_TYPE_BOCHS &&
-             !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_BOCHS_DISPLAY)) ||
-            (video->type == VIR_DOMAIN_VIDEO_TYPE_RAMFB &&
-             !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_RAMFB))) {
-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                           _("this QEMU does not support '%s' video device"),
-                           virDomainVideoTypeToString(video->type));
-            return -1;
-        }
-
         if (!video->primary &&
             video->type != VIR_DOMAIN_VIDEO_TYPE_QXL &&
             video->type != VIR_DOMAIN_VIDEO_TYPE_VIRTIO) {
-- 
2.21.0

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux