]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemuValidateDomainDeviceDefAddress: Add validation of CCW address
authorPeter Krempa <pkrempa@redhat.com>
Fri, 11 Jun 2021 13:43:35 +0000 (15:43 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 15 Jun 2021 14:58:23 +0000 (16:58 +0200)
Base the check on the logic from qemuDomainCheckCCWS390AddressSupport,
which will be removed later.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_validate.c
tests/qemuxml2argvtest.c

index d0b73f2bfbfdfa14b9e03b2bf9fccef7d82034ef..55f3171f4e42b1129b12dc924dbc2ea9b9313b87 100644 (file)
@@ -1276,6 +1276,7 @@ qemuValidateDomainDeviceDefZPCIAddress(virDomainDeviceInfo *info,
 
 static int
 qemuValidateDomainDeviceDefAddress(const virDomainDeviceDef *dev,
+                                   const virDomainDef *def,
                                    virQEMUCaps *qemuCaps)
 {
     virDomainDeviceInfo *info;
@@ -1314,11 +1315,26 @@ qemuValidateDomainDeviceDefAddress(const virDomainDeviceDef *dev,
                        _("'virtio-s390' addresses are no longer supported"));
         return -1;
 
+    case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW:
+        if (!qemuDomainIsS390CCW(def)) {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                           _("cannot use CCW address type for device '%s' using machine type '%s'"),
+                           NULLSTR(info->alias), def->os.machine);
+            return -1;
+        }
+
+        if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_CCW)) {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                           _("CCW address type is not supported by this QEMU"));
+            return -1;
+        }
+
+        break;
+
     case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE:
     case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_SERIAL:
     case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCID:
     case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_USB:
-    case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW:
     case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_MMIO:
     case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_ISA:
     case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DIMM:
@@ -5008,7 +5024,7 @@ qemuValidateDomainDeviceDef(const virDomainDeviceDef *dev,
         qemuCaps = qemuCapsLocal;
     }
 
-    if ((ret = qemuValidateDomainDeviceDefAddress(dev, qemuCaps)) < 0)
+    if ((ret = qemuValidateDomainDeviceDefAddress(dev, def, qemuCaps)) < 0)
         return ret;
 
     switch ((virDomainDeviceType)dev->type) {
index 90a56ab2e03fd868c052e0fba6aa04d3b5b5b663..bb794f89d1816b9a50da3ed026c772484753ec18 100644 (file)
@@ -1893,7 +1893,7 @@ mymain(void)
     DO_TEST("balloon-device-deflate",
             QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
     DO_TEST("balloon-ccw-deflate",
-            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
+            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE, QEMU_CAPS_CCW);
     DO_TEST("balloon-mmio-deflate",
             QEMU_CAPS_DEVICE_VIRTIO_MMIO,
             QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);