[libvirt PATCH 2/2] virDomainFeaturesHyperVDefParse: Compare hyperv mode

Michal Prívozník mprivozn at redhat.com
Wed Dec 15 08:18:03 UTC 2021


On 12/14/21 17:53, Tim Wiederhake wrote:
> Previous patch neglected the possibility of different modes for hyperv
> (e.g. "custom" and "passthrough").
> 
> Fixes: 6e83fafe331dd0b4fb19aa384c3dd36b3af62933
> Signed-off-by: Tim Wiederhake <twiederh at redhat.com>
> ---
>  src/conf/domain_conf.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index 9a21ac10ce..2d8851fa11 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -21734,6 +21734,15 @@ virDomainDefFeaturesCheckABIStability(virDomainDef *src,
>      }
>  
>      /* hyperv */
> +    if (src->features[VIR_DOMAIN_FEATURE_HYPERV] != dst->features[VIR_DOMAIN_FEATURE_HYPERV]) {
> +        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> +                       _("State of HyperV enlightenment mode differs: "
> +                         "source: '%s', destination: '%s'"),
> +                       virDomainHyperVModeTypeToString(src->features[VIR_DOMAIN_FEATURE_HYPERV]),
> +                       virDomainHyperVModeTypeToString(dst->features[VIR_DOMAIN_FEATURE_HYPERV]));
> +        return false;
> +    }
> +
>      if (src->features[VIR_DOMAIN_FEATURE_HYPERV] != VIR_DOMAIN_HYPERV_MODE_NONE) {
>          for (i = 0; i < VIR_DOMAIN_HYPERV_LAST; i++) {
>              switch ((virDomainHyperv) i) {

I worry that this is effectively a dead code. In this function, just a
couple of lines earlier we have:

    for (i = 0; i < VIR_DOMAIN_FEATURE_LAST; i++) {
        const char *featureName = virDomainFeatureTypeToString(i);

        switch ((virDomainFeature) i) {
        ...
        case VIR_DOMAIN_FEATURE_HYPERV:
        ...
            if (src->features[i] != dst->features[i]) {
                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
                               _("State of feature '%s' differs: "
                                 "source: '%s', destination: '%s'"),
                               featureName, ....
                return false;
            }
            break;


So if VIR_DOMAIN_FEATURE_HYPERV is not the same on src and dst we will
never get to this code you're adding.

Michal




More information about the libvir-list mailing list