[libvirt] [PATCH 1/9] conf: Improve adding of new address types

John Ferlan jferlan at redhat.com
Tue Oct 14 08:56:48 UTC 2014



On 10/14/2014 03:29 AM, Peter Krempa wrote:
> Use typecasted switch statement and note the type used to select the
> address type in a comment.
> ---
>  src/conf/domain_conf.c | 36 ++++++++++++++++++++++++------------
>  src/conf/domain_conf.h |  2 +-
>  2 files changed, 25 insertions(+), 13 deletions(-)
> 
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index 35bbd91..55a1cc5 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -3306,7 +3306,7 @@ virDomainDeviceInfoFormat(virBufferPtr buf,
>      virBufferAsprintf(buf, "<address type='%s'",
>                        virDomainDeviceAddressTypeToString(info->type));
> 
> -    switch (info->type) {
> +    switch ((virDomainDeviceAddressType) info->type) {
>      case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI:
>          virBufferAsprintf(buf, " domain='0x%.4x' bus='0x%.2x' slot='0x%.2x' function='0x%.1x'",
>                            info->addr.pci.domain,
> @@ -3368,10 +3368,10 @@ virDomainDeviceInfoFormat(virBufferPtr buf,
>              virBufferAsprintf(buf, " irq='0x%x'", info->addr.isa.irq);
>          break;
> 
> -    default:
> -        virReportError(VIR_ERR_INTERNAL_ERROR,
> -                       _("unknown address type '%d'"), info->type);
> -        return -1;
> +    case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390:
> +    case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE:
> +    case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_LAST:
> +        break;
>      }
> 
>      virBufferAddLit(buf, "/>\n");
> @@ -3816,7 +3816,7 @@ virDomainDeviceInfoParseXML(xmlNodePtr node,
>      type = virXMLPropString(address, "type");
> 
>      if (type) {
> -        if ((info->type = virDomainDeviceAddressTypeFromString(type)) < 0) {
> +        if ((info->type = virDomainDeviceAddressTypeFromString(type)) <= 0) {
>              virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
>                             _("unknown address type '%s'"), type);
>              goto cleanup;
> @@ -3827,7 +3827,7 @@ virDomainDeviceInfoParseXML(xmlNodePtr node,
>          goto cleanup;
>      }
> 
> -    switch (info->type) {
> +    switch ((virDomainDeviceAddressType) info->type) {
>      case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI:
>          if (virDevicePCIAddressParseXML(address, &info->addr.pci) < 0)
>              goto cleanup;
> @@ -3873,11 +3873,14 @@ virDomainDeviceInfoParseXML(xmlNodePtr node,
>              goto cleanup;
>          break;
> 
> -    default:
> -        /* Should not happen */
> -        virReportError(VIR_ERR_INTERNAL_ERROR,
> -                       "%s", _("Unknown device address type"));
> +    case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390:
> +        virReportError(VIR_ERR_XML_ERROR, "%s",
> +                       _("virtio-s390 bus doesn't have an address"));

Do we really care? We could just ignore it (like MMIO) and it'll be
lost.  Of course since we would have fallen into 'default' before and
thus resulted in error - I do see why you've added the error.

I'm OK with the error - just figured I'd note it and let you decide..

ACK

John
>          goto cleanup;
> +
> +    case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE:
> +    case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_LAST:
> +        break;
>      }
> 
>      ret = 0;
> @@ -14223,7 +14226,7 @@ virDomainDeviceInfoCheckABIStability(virDomainDeviceInfoPtr src,
>          return false;
>      }
> 
> -    switch (src->type) {
> +    switch ((virDomainDeviceAddressType) 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 ||
> @@ -14297,6 +14300,15 @@ virDomainDeviceInfoCheckABIStability(virDomainDeviceInfoPtr src,
>              return false;
>          }
>          break;
> +
> +    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_CCW:
> +    case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_MMIO:
> +    case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE:
> +    case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_LAST:
> +        break;
>      }
> 
>      return true;
> diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
> index afa3da6..9908d88 100644
> --- a/src/conf/domain_conf.h
> +++ b/src/conf/domain_conf.h
> @@ -308,7 +308,7 @@ struct _virDomainDeviceInfo {
>       * to consider the new fields
>       */
>      char *alias;
> -    int type;
> +    int type; /* virDomainDeviceAddressType */
>      union {
>          virDevicePCIAddress pci;
>          virDomainDeviceDriveAddress drive;
> 




More information about the libvir-list mailing list