[libvirt] [PATCH v2] conf: add enum constants for default controller models

John Ferlan jferlan at redhat.com
Tue Feb 20 14:14:05 UTC 2018



On 02/20/2018 05:56 AM, Daniel P. Berrangé wrote:
> The controller model is slightly unusual in that the default value is
> -1, not 0. As a result the default value is not covered by any of the
> existing enum cases. This in turn means that any switch() statements
> that think they have covered all cases, will in fact not match the
> default value at all. In the qemuDomainDeviceCalculatePCIConnectFlags()
> method this has caused a serious mistake where we fallthrough from the
> SCSI controller case, to the VirtioSerial controller case, and from
> the USB controller case to the IDE controller case.
> 
> By adding explicit enum constant starting at -1, we can ensure switches
> remember to handle the default case.
> 
> Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>
> ---
>  src/conf/domain_addr.c         |  6 +++---
>  src/conf/domain_conf.c         |  3 ++-
>  src/conf/domain_conf.h         |  4 ++++
>  src/libxl/libxl_conf.c         |  2 +-
>  src/qemu/qemu_command.c        | 21 ++++++++++++++++-----
>  src/qemu/qemu_domain.c         | 14 +++++++++++---
>  src/qemu/qemu_domain_address.c | 19 +++++++++++++++++--
>  src/qemu/qemu_hotplug.c        |  2 +-
>  src/vbox/vbox_common.c         | 13 +++++++++----
>  src/vmx/vmx.c                  |  2 +-
>  10 files changed, 65 insertions(+), 21 deletions(-)
> 
> diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c
> index 6422682391..4f969adc00 100644
> --- a/src/conf/domain_addr.c
> +++ b/src/conf/domain_addr.c

[...]

> @@ -1710,10 +1712,8 @@ virDomainUSBAddressControllerModelToPorts(virDomainControllerDefPtr cont)
>  {
>      int model = cont->model;

NIT: No need for @model anymore... Could just go directly to cont->model
in the switch statement.

>  
> -    if (model == -1)
> -        model = VIR_DOMAIN_CONTROLLER_MODEL_USB_PIIX3_UHCI;
> -
>      switch ((virDomainControllerModelUSB) model) {
> +    case VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT:
>      case VIR_DOMAIN_CONTROLLER_MODEL_USB_PIIX3_UHCI:
>      case VIR_DOMAIN_CONTROLLER_MODEL_USB_PIIX4_UHCI:
>      case VIR_DOMAIN_CONTROLLER_MODEL_USB_VT82C686B_UHCI:

Reviewed-by: John Ferlan <jferlan at redhat.com>

John




More information about the libvir-list mailing list