]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu_validate: Deduplicate code for RNG model check
authorMichal Privoznik <mprivozn@redhat.com>
Tue, 17 Nov 2020 09:37:10 +0000 (10:37 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Wed, 18 Nov 2020 08:42:14 +0000 (09:42 +0100)
In my recent commit of 5216304bfe I've moved RNG model check
from domain capabilities validator into qemu validator. During
that I had to basically duplicate RNG model to qemuCaps checks.
Problem with this approach is that after my commit qemu validator
and domCaps are disconnected and thus domCaps might report (in
general) different set of supported RNG models.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Cole Robinson <crobinso@redhat.com>
src/qemu/qemu_capabilities.c
src/qemu/qemu_capabilities.h
src/qemu/qemu_validate.c

index 78d3b965c6e1ef02676f3a5794309eccfa41027a..58ab1beba67d864d5a0b3db92d1928c39990acf1 100644 (file)
@@ -6068,7 +6068,7 @@ virQEMUCapsFillDomainDeviceHostdevCaps(virQEMUCapsPtr qemuCaps,
 }
 
 
-static void
+void
 virQEMUCapsFillDomainDeviceRNGCaps(virQEMUCapsPtr qemuCaps,
                                    virDomainCapsDeviceRNGPtr rng)
 {
index 22b3da3e63601fc025f3620b9d6f725697abb544..0b28c9b635acdb65894be19b321e3f409ffb0546 100644 (file)
@@ -742,6 +742,8 @@ int virQEMUCapsFillDomainCaps(virQEMUCapsPtr qemuCaps,
 void virQEMUCapsFillDomainDeviceVideoCaps(virQEMUCapsPtr qemuCaps,
                                           virDomainCapsDeviceVideoPtr dev);
 
+void virQEMUCapsFillDomainDeviceRNGCaps(virQEMUCapsPtr qemuCaps,
+                                        virDomainCapsDeviceRNGPtr rng);
 
 bool virQEMUCapsGuestIsNative(virArch host,
                               virArch guest);
index 6e1db2715d37bb189ebfc9a3b537e311c4827b4e..7e2fe81e0843efb2463d4e74b71ba1beb8b3e7e4 100644 (file)
@@ -1845,6 +1845,8 @@ static int
 qemuValidateDomainRNGDef(const virDomainRNGDef *def,
                          virQEMUCapsPtr qemuCaps)
 {
+    virDomainCapsDeviceRNG rngCaps = { 0 };
+
     switch ((virDomainRNGBackend) def->backend) {
     case VIR_DOMAIN_RNG_BACKEND_RANDOM:
         if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_RNG_RANDOM)) {
@@ -1883,29 +1885,13 @@ qemuValidateDomainRNGDef(const virDomainRNGDef *def,
         return -1;
     }
 
-    switch ((virDomainRNGModel) def->model) {
-    case VIR_DOMAIN_RNG_MODEL_VIRTIO:
-        if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_RNG)) {
-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                           _("domain configuration does not support rng model '%s'"),
-                           virDomainRNGModelTypeToString(def->model));
-            return -1;
-        }
-        break;
+    virQEMUCapsFillDomainDeviceRNGCaps(qemuCaps, &rngCaps);
 
-    case VIR_DOMAIN_RNG_MODEL_VIRTIO_TRANSITIONAL:
-    case VIR_DOMAIN_RNG_MODEL_VIRTIO_NON_TRANSITIONAL:
-        if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_PCI_TRANSITIONAL) &&
-            !virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY)) {
-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                           _("domain configuration does not support rng model '%s'"),
-                           virDomainRNGModelTypeToString(def->model));
-            return -1;
-        }
-        break;
-
-    case VIR_DOMAIN_RNG_MODEL_LAST:
-        break;
+    if (!VIR_DOMAIN_CAPS_ENUM_IS_SET(rngCaps.model, def->model)) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                       _("domain configuration does not support rng model '%s'"),
+                       virDomainRNGModelTypeToString(def->model));
+        return -1;
     }
 
     if (qemuValidateDomainVirtioOptions(def->virtio, qemuCaps) < 0)