[libvirt] [PATCH 08/11] qemu: Fix GIC behavior for the default case

John Ferlan jferlan at redhat.com
Mon Feb 12 21:05:54 UTC 2018



On 02/06/2018 11:42 AM, Andrea Bolognani wrote:
> When no GIC version is specified, we currently default to GIC v2;
> however, that's not a great default, since guests will fail to
> start if the hardware only supports GIC v3.
> 
> Change the behavior so that a sensible default is chosen instead.
> That basically means using the same algorithm whether the user
> didn't explicitly enable the GIC feature or they explicitly
> enabled it but didn't specify any GIC version.
> 
> Signed-off-by: Andrea Bolognani <abologna at redhat.com>
> ---
>  src/qemu/qemu_domain.c                             | 25 +++++++++++-----------
>  .../qemuxml2argvdata/aarch64-gic-default-both.args |  2 +-
>  tests/qemuxml2argvdata/aarch64-gic-default-v3.args |  2 +-
>  .../aarch64-gic-default-both.xml                   |  2 +-
>  .../qemuxml2xmloutdata/aarch64-gic-default-v3.xml  |  2 +-
>  5 files changed, 17 insertions(+), 16 deletions(-)
> 
> diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
> index 98cba8789..ee720d328 100644
> --- a/src/qemu/qemu_domain.c
> +++ b/src/qemu/qemu_domain.c
> @@ -2838,13 +2838,14 @@ static void
>  qemuDomainDefEnableDefaultFeatures(virDomainDefPtr def,
>                                     virQEMUCapsPtr qemuCaps)
>  {
> -    virGICVersion version;
> -
> -    /* The virt machine type always uses GIC: if the relevant element
> +    /* The virt machine type always uses GIC: if the relevant information
>       * was not included in the domain XML, we need to choose a suitable
>       * GIC version ourselves */
> -    if (def->features[VIR_DOMAIN_FEATURE_GIC] == VIR_TRISTATE_SWITCH_ABSENT &&
> -        qemuDomainIsVirt(def)) {
> +    if ((def->features[VIR_DOMAIN_FEATURE_GIC] == VIR_TRISTATE_SWITCH_ABSENT &&
> +         qemuDomainIsVirt(def)) ||
> +        (def->features[VIR_DOMAIN_FEATURE_GIC] == VIR_TRISTATE_SWITCH_ON &&

And patch3 (e.g. verification) takes care of us if this is "on", but
!qemuDomainIsVirt(def) ends up being true... It's a tangled web.

> +         def->gic_version == VIR_GIC_VERSION_NONE)) {
> +        virGICVersion version;
>  
>          VIR_DEBUG("Looking for usable GIC version in domain capabilities");
>          for (version = VIR_GIC_VERSION_LAST - 1;
> @@ -2878,17 +2879,17 @@ qemuDomainDefEnableDefaultFeatures(virDomainDefPtr def,
>              }
>          }
>  

FWIW: There's a hunk above here which notes something about bz
1414081... If one goes and reads that bz, one finds it's closed notabug.

In any case, there's a lot of verbiage there.. Can any of it be shaved?

What's being done seems reasonable, but if we can take the opportunity
to revisit the comment as well - that'd be good.

For what's here as long as the above comment doesn't cause you to have
an oh sh* moment...


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

John

> +        /* Use the default GIC version (GICv2) as a last-ditch attempt
> +         * if no match could be found above */
> +        if (def->gic_version == VIR_GIC_VERSION_NONE) {
> +            VIR_DEBUG("Using GIC version 2 (default)");
> +            def->gic_version = VIR_GIC_VERSION_2;
> +        }
> +
>          /* Even if we haven't found a usable GIC version in the domain
>           * capabilities, we still want to enable this */
>          def->features[VIR_DOMAIN_FEATURE_GIC] = VIR_TRISTATE_SWITCH_ON;
>      }
> -
> -    /* Use the default GIC version (GICv2) if no version was specified */
> -    if (def->features[VIR_DOMAIN_FEATURE_GIC] == VIR_TRISTATE_SWITCH_ON &&
> -        def->gic_version == VIR_GIC_VERSION_NONE) {
> -        VIR_DEBUG("Using GIC version 2 (default)");
> -        def->gic_version = VIR_GIC_VERSION_2;
> -    }
>  }
>  
>  
[...]




More information about the libvir-list mailing list