]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: command: move qemuBuildSoundDevStr caps validation to qemu_domain
authorDaniel Henrique Barboza <danielhb413@gmail.com>
Mon, 9 Dec 2019 23:15:14 +0000 (20:15 -0300)
committerCole Robinson <crobinso@redhat.com>
Mon, 16 Dec 2019 23:12:40 +0000 (18:12 -0500)
Move QEMU caps validation of QEMU_CAPS_OBJECT_USB_AUDIO and
QEMU_CAPS_DEVICE_ICH9_INTEL_HDA to a new function in qemu_domain.c,
qemuDomainDeviceDefValidateSound(). This function is called by
qemuDomainDeviceDefValidate() to validate the sound device
in domain define time.

qemuxml2xmltest.c was adjusted to add the now required caps for
domain definition.

Reviewed-by: Cole Robinson <crobinso@redhat.com>
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
src/qemu/qemu_command.c
src/qemu/qemu_domain.c
tests/qemuxml2xmltest.c

index 72d65b64454220368e1a1a7eb780a30fe6ccd873..0d9dd66c3364f96633b0d40a133f1492557b97c0 100644 (file)
@@ -4280,30 +4280,15 @@ qemuBuildSoundDevStr(const virDomainDef *def,
         break;
     case VIR_DOMAIN_SOUND_MODEL_USB:
         model = "usb-audio";
-        if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_USB_AUDIO)) {
-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                           _("usb-audio controller is not supported "
-                             "by this QEMU binary"));
-            return NULL;
-        }
         break;
     case VIR_DOMAIN_SOUND_MODEL_ICH9:
         model = "ich9-intel-hda";
-        if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_ICH9_INTEL_HDA)) {
-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                           _("The ich9-intel-hda audio controller "
-                             "is not supported in this QEMU binary"));
-            return NULL;
-        }
         break;
     case VIR_DOMAIN_SOUND_MODEL_SB16:
         model = "sb16";
         break;
     case VIR_DOMAIN_SOUND_MODEL_PCSPK: /* pc-speaker is handled separately */
     case VIR_DOMAIN_SOUND_MODEL_LAST:
-        virReportError(VIR_ERR_INTERNAL_ERROR,
-                       _("sound card model '%s' is not supported by qemu"),
-                       virDomainSoundModelTypeToString(sound->model));
         return NULL;
     }
 
index a8dc1787618cd9f0c47908ef2d21cf1c53ed165e..db423b62d0b0fbcedfc699b139b1318ad8dd3415 100644 (file)
@@ -5563,6 +5563,45 @@ qemuDomainDefValidateConsole(const virDomainDef *def,
 }
 
 
+static int
+qemuDomainDeviceDefValidateSound(virDomainSoundDefPtr sound,
+                                 virQEMUCapsPtr qemuCaps)
+{
+    switch ((virDomainSoundModel) sound->model) {
+    case VIR_DOMAIN_SOUND_MODEL_USB:
+        if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_USB_AUDIO)) {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                           _("usb-audio controller is not supported "
+                             "by this QEMU binary"));
+            return -1;
+        }
+        break;
+    case VIR_DOMAIN_SOUND_MODEL_ICH9:
+        if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_ICH9_INTEL_HDA)) {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                           _("The ich9-intel-hda audio controller "
+                             "is not supported in this QEMU binary"));
+            return -1;
+        }
+        break;
+
+    case VIR_DOMAIN_SOUND_MODEL_ES1370:
+    case VIR_DOMAIN_SOUND_MODEL_AC97:
+    case VIR_DOMAIN_SOUND_MODEL_ICH6:
+    case VIR_DOMAIN_SOUND_MODEL_SB16:
+    case VIR_DOMAIN_SOUND_MODEL_PCSPK:
+        break;
+    case VIR_DOMAIN_SOUND_MODEL_LAST:
+        virReportError(VIR_ERR_INTERNAL_ERROR,
+                       _("sound card model '%s' is not supported by qemu"),
+                       virDomainSoundModelTypeToString(sound->model));
+        return -1;
+    }
+
+    return 0;
+}
+
+
 static int
 qemuDomainDefValidate(const virDomainDef *def,
                       void *opaque)
@@ -8286,8 +8325,11 @@ qemuDomainDeviceDefValidate(const virDomainDeviceDef *dev,
         ret = qemuDomainDeviceDefValidateHub(dev->data.hub, qemuCaps);
         break;
 
-    case VIR_DOMAIN_DEVICE_LEASE:
     case VIR_DOMAIN_DEVICE_SOUND:
+        ret = qemuDomainDeviceDefValidateSound(dev->data.sound, qemuCaps);
+        break;
+
+    case VIR_DOMAIN_DEVICE_LEASE:
     case VIR_DOMAIN_DEVICE_SHMEM:
     case VIR_DOMAIN_DEVICE_MEMORY:
     case VIR_DOMAIN_DEVICE_PANIC:
index ac259320bccfcd064f9caa551488ee9063c73917..1f08e303b6b0ea22324a24c553882c8d15046528 100644 (file)
@@ -456,7 +456,9 @@ mymain(void)
     DO_TEST("net-midonet", NONE);
     DO_TEST("net-openvswitch", NONE);
     DO_TEST("sound", NONE);
-    DO_TEST("sound-device", NONE);
+    DO_TEST("sound-device",
+            QEMU_CAPS_DEVICE_ICH9_INTEL_HDA,
+            QEMU_CAPS_OBJECT_USB_AUDIO);
     DO_TEST("watchdog", NONE);
     DO_TEST("net-bandwidth", QEMU_CAPS_DEVICE_VGA, QEMU_CAPS_VNC);
     DO_TEST("net-bandwidth2", QEMU_CAPS_DEVICE_VGA, QEMU_CAPS_VNC);