From 2dd6369477807f79995474b1b5e48993f18129a8 Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Wed, 13 Sep 2023 18:10:54 +0200 Subject: [PATCH] virDomainDeviceInfo: Convert 'type' field to proper enum type MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Convert the field, adjust the XML parsers to use virXMLPropEnum() and fill in missing cases to switch() statements. Signed-off-by: Michal Privoznik Reviewed-by: Ján Tomko --- src/conf/device_conf.c | 12 +++++++++++- src/conf/device_conf.h | 4 ++-- src/conf/domain_conf.c | 21 +++++++-------------- src/conf/domain_validate.c | 2 +- src/qemu/qemu_command.c | 4 ++-- src/qemu/qemu_monitor.c | 12 ++++++++++++ src/qemu/qemu_validate.c | 2 +- 7 files changed, 36 insertions(+), 21 deletions(-) diff --git a/src/conf/device_conf.c b/src/conf/device_conf.c index aa0cc8945c..f3d977f2b7 100644 --- a/src/conf/device_conf.c +++ b/src/conf/device_conf.c @@ -98,7 +98,7 @@ virDomainDeviceInfoAddressIsEqual(const virDomainDeviceInfo *a, if (a->type != b->type) return false; - switch ((virDomainDeviceAddressType) a->type) { + switch (a->type) { case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE: case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_LAST: /* address types below don't have any specific data */ @@ -427,6 +427,16 @@ virDomainDeviceAddressIsValid(virDomainDeviceInfo *info, case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_USB: return true; + + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE: + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_SERIAL: + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCID: + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO: + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_ISA: + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DIMM: + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_UNASSIGNED: + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_LAST: + break; } return false; diff --git a/src/conf/device_conf.h b/src/conf/device_conf.h index f2907dc596..a83377417a 100644 --- a/src/conf/device_conf.h +++ b/src/conf/device_conf.h @@ -32,7 +32,7 @@ #include "virenum.h" typedef enum { - VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE, + VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE = 0, VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI, VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE, VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_SERIAL, @@ -116,7 +116,7 @@ struct _virDomainDeviceDimmAddress { typedef struct _virDomainDeviceInfo virDomainDeviceInfo; struct _virDomainDeviceInfo { char *alias; - int type; /* virDomainDeviceAddressType */ + virDomainDeviceAddressType type; union { virPCIDeviceAddress pci; virDomainDeviceDriveAddress drive; diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index f48020f893..a743a0628c 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -5366,7 +5366,7 @@ virDomainDeviceInfoFormat(virBuffer *buf, virBufferAsprintf(&attrBuf, " type='%s'", virDomainDeviceAddressTypeToString(info->type)); - switch ((virDomainDeviceAddressType) info->type) { + switch (info->type) { case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI: if (!virPCIDeviceAddressIsEmpty(&info->addr.pci)) { virBufferAsprintf(&attrBuf, " domain='0x%04x' bus='0x%02x' " @@ -5539,21 +5539,14 @@ static int virDomainDeviceAddressParseXML(xmlNodePtr address, virDomainDeviceInfo *info) { - g_autofree char *type = virXMLPropString(address, "type"); - - if (!type) { - virReportError(VIR_ERR_INTERNAL_ERROR, - "%s", _("No type specified for device address")); + if (virXMLPropEnum(address, "type", + virDomainDeviceAddressTypeFromString, + VIR_XML_PROP_REQUIRED | VIR_XML_PROP_NONZERO, + &info->type) < 0) { return -1; } - if ((info->type = virDomainDeviceAddressTypeFromString(type)) <= 0) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("unknown address type '%1$s'"), type); - return -1; - } - - switch ((virDomainDeviceAddressType) info->type) { + switch (info->type) { case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI: if (virPCIDeviceAddressParseXML(address, &info->addr.pci) < 0) return -1; @@ -19625,7 +19618,7 @@ virDomainDeviceInfoCheckABIStability(virDomainDeviceInfo *src, return false; } - switch ((virDomainDeviceAddressType) src->type) { + switch (src->type) { case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI: if (src->addr.pci.domain != dst->addr.pci.domain || src->addr.pci.bus != dst->addr.pci.bus || diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index 1d25aa32c2..e70841c1d6 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -2806,7 +2806,7 @@ virDomainDeviceInfoValidate(const virDomainDeviceDef *dev) if (!(info = virDomainDeviceGetInfo(dev))) return 0; - switch ((virDomainDeviceAddressType) info->type) { + switch (info->type) { case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI: case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE: case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO: diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 11ede25c0b..8a7b80719f 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -541,7 +541,7 @@ qemuBuildDeviceAddressProps(virJSONValue *props, const virDomainDef *domainDef, const virDomainDeviceInfo *info) { - switch ((virDomainDeviceAddressType) info->type) { + switch (info->type) { case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI: { g_autofree char *pciaddr = NULL; g_autofree char *bus = qemuBuildDeviceAddressPCIGetBus(domainDef, info); @@ -981,7 +981,7 @@ qemuBuildVirtioDevGetConfig(const virDomainDeviceDef *device, virBufferAdd(&buf, baseName, -1); - switch ((virDomainDeviceAddressType) info->type) { + switch (info->type) { case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI: implName = "pci"; break; diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 7053539c7d..320729f067 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -954,6 +954,18 @@ qemuMonitorInitBalloonObjectPath(qemuMonitor *mon, case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW: name = "virtio-balloon-ccw"; break; + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE: + 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_SPAPRVIO: + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390: + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_MMIO: + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_ISA: + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DIMM: + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_UNASSIGNED: + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_LAST: default: return; } diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 27fd5b9a99..36c7941fe9 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -1479,7 +1479,7 @@ qemuValidateDomainDeviceDefAddress(const virDomainDeviceDef *dev, const virDomainDef *def, virQEMUCaps *qemuCaps) { - switch ((virDomainDeviceAddressType) info->type) { + switch (info->type) { case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI: if (qemuValidateDomainDeviceDefZPCIAddress(info, qemuCaps) < 0) return -1;