From 7a8895463b113d0b942bd6f04ce27c4a7dcde736 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Fri, 11 Jun 2021 15:43:35 +0200 Subject: [PATCH] qemuValidateDomainDeviceDefAddress: Add validation of CCW address MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Base the check on the logic from qemuDomainCheckCCWS390AddressSupport, which will be removed later. Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko --- src/qemu/qemu_validate.c | 20 ++++++++++++++++++-- tests/qemuxml2argvtest.c | 2 +- 2 files changed, 19 insertions(+), 3 deletions(-) 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);