]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemuBuildUSBControllerDevStr: Split out validation of USB controller
authorPeter Krempa <pkrempa@redhat.com>
Tue, 5 Oct 2021 11:02:02 +0000 (13:02 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 12 Oct 2021 08:26:05 +0000 (10:26 +0200)
Move the validation code into a separate function. For now the
validation is still kept in the commandline format step as simply just
moving it to the validator causes failures in the test suite, which will
need to be investigated deeper.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_command.c
tests/qemuxml2argvdata/usb-controller-explicit-unavailable-q35.err
tests/qemuxml2argvdata/usb-controller-qemu-xhci-unavailable.err

index 2eec17e55308066de57226e706fcfb0dc5e398e0..63ce58ff2be682c708e54e5e29f11dec8eaec8ce 100644 (file)
@@ -2779,6 +2779,38 @@ qemuControllerModelUSBToCaps(int model)
 }
 
 
+static int
+qemuValidateDomainDeviceDefControllerUSB(const virDomainControllerDef *def,
+                                         virQEMUCaps *qemuCaps)
+{
+    if (def->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                       _("no model provided for USB controller"));
+        return -1;
+    }
+
+    if (!virQEMUCapsGet(qemuCaps, qemuControllerModelUSBToCaps(def->model))) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                       _("USB controller model '%s' not supported in this QEMU binary"),
+                       virDomainControllerModelUSBTypeToString(def->model));
+        return -1;
+    }
+
+    if (def->opts.usbopts.ports != -1) {
+        if ((def->model != VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI ||
+             !virQEMUCapsGet(qemuCaps, QEMU_CAPS_NEC_USB_XHCI_PORTS)) &&
+            def->model != VIR_DOMAIN_CONTROLLER_MODEL_USB_QEMU_XHCI) {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                           _("usb controller type '%s' doesn't support 'ports' with this QEMU binary"),
+                           virDomainControllerModelUSBTypeToString(def->model));
+            return -1;
+        }
+    }
+
+    return 0;
+}
+
+
 static const char *
 qemuBuildUSBControllerFindMasterAlias(const virDomainDef *domainDef,
                                       const virDomainControllerDef *def)
@@ -2810,38 +2842,12 @@ qemuBuildUSBControllerDevStr(const virDomainDef *domainDef,
                              virQEMUCaps *qemuCaps,
                              virBuffer *buf)
 {
-    const char *smodel;
-    int model, flags;
-
-    model = def->model;
-
-    if (model == VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT) {
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                       "%s", _("no model provided for USB controller"));
-        return -1;
-    }
-
-    smodel = qemuControllerModelUSBTypeToString(model);
-    flags = qemuControllerModelUSBToCaps(model);
-
-    if (flags == -1 || !virQEMUCapsGet(qemuCaps, flags)) {
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                       _("%s not supported in this QEMU binary"), smodel);
+    if (qemuValidateDomainDeviceDefControllerUSB(def, qemuCaps) < 0)
         return -1;
-    }
 
-    virBufferAsprintf(buf, "%s", smodel);
+    virBufferAsprintf(buf, "%s", qemuControllerModelUSBTypeToString(def->model));
 
     if (def->opts.usbopts.ports != -1) {
-        if ((model != VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI ||
-             !virQEMUCapsGet(qemuCaps, QEMU_CAPS_NEC_USB_XHCI_PORTS)) &&
-            model != VIR_DOMAIN_CONTROLLER_MODEL_USB_QEMU_XHCI) {
-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                           _("usb controller type %s doesn't support 'ports' "
-                             "with this QEMU binary"), smodel);
-            return -1;
-        }
-
         virBufferAsprintf(buf, ",p2=%d,p3=%d",
                           def->opts.usbopts.ports, def->opts.usbopts.ports);
     }
index 4940f896cc2d38a54154e0298c081e89c99f7783..6907a515055166d1f7bc7320be62a1fee9e045f9 100644 (file)
@@ -1 +1 @@
-unsupported configuration: nec-usb-xhci not supported in this QEMU binary
+unsupported configuration: USB controller model 'nec-xhci' not supported in this QEMU binary
index 1b797dd3430e028e16048e8a648267a881c83dbd..aec91f75598ed46d51e347684c7a95ba12bf2797 100644 (file)
@@ -1 +1 @@
-unsupported configuration: qemu-xhci not supported in this QEMU binary
+unsupported configuration: USB controller model 'qemu-xhci' not supported in this QEMU binary