From: Peter Krempa Date: Fri, 11 Jun 2021 13:43:35 +0000 (+0200) Subject: qemuValidateDomainDeviceDefAddress: Add validation of CCW address X-Git-Tag: v7.5.0-rc1~93 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7a8895463b113d0b942bd6f04ce27c4a7dcde736;p=thirdparty%2Flibvirt.git qemuValidateDomainDeviceDefAddress: Add validation of CCW address Base the check on the logic from qemuDomainCheckCCWS390AddressSupport, which will be removed later. Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko --- diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index d0b73f2bfb..55f3171f4e 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -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) { diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 90a56ab2e0..bb794f89d1 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -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);