[libvirt] [PATCH 4/4] cpu: Allow fine tuning of "host-model" cpu

Jiri Denemark jdenemar at redhat.com
Tue Jul 16 08:45:05 UTC 2013


On Mon, Jul 15, 2013 at 18:24:47 +0200, Peter Krempa wrote:
> https://bugzilla.redhat.com/show_bug.cgi?id=799354
> 
> Until now, the "host-model" cpu mode couldn't be influenced. This patch
> allows to use the <feature> elements to either enable or disable
> specific CPU flags. This can be used to force flags that can be emulated
> even if the host CPU doesn't support them.
...
> diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
> index 928a67b..ec99106 100644
> --- a/src/cpu/cpu_x86.c
> +++ b/src/cpu/cpu_x86.c
> @@ -1739,6 +1739,41 @@ cleanup:
>      return ret;
>  }
> 
> +
> +static int
> +x86UpdateHostModel(virCPUDefPtr guest,
> +                   const virCPUDefPtr host)
> +{
> +    virCPUDefPtr oldguest;
> +    size_t i;
> +
> +    guest->match = VIR_CPU_MATCH_EXACT;
> +
> +    /* no updates are required */
> +    if (guest->nfeatures == 0) {
> +        virCPUDefFreeModel(guest);
> +        return virCPUDefCopyModel(guest, host, true);
> +    }
> +
> +    /* update the host model according to the desired configuration */
> +    if (!(oldguest = virCPUDefCopy(guest)))
> +        return -1;
> +
> +    virCPUDefFreeModel(guest);
> +    if (virCPUDefCopyModel(guest, host, true) < 0)
> +        return -1;
> +
> +    for (i = 0; i < oldguest->nfeatures; i++) {
> +        if (virCPUDefUpdateFeature(guest,
> +                                   oldguest->features[i].name,
> +                                   oldguest->features[i].policy) < 0)
> +            return -1;
> +    }
> +
> +    return 0;
> +}
> +
> +
>  static int
>  x86Update(virCPUDefPtr guest,
>            const virCPUDefPtr host)
> @@ -1748,11 +1783,11 @@ x86Update(virCPUDefPtr guest,
>          return x86UpdateCustom(guest, host);
> 
>      case VIR_CPU_MODE_HOST_MODEL:
> +        return x86UpdateHostModel(guest, host);
> +
> +

Too many empty lines :-)

>      case VIR_CPU_MODE_HOST_PASSTHROUGH:
> -        if (guest->mode == VIR_CPU_MODE_HOST_MODEL)
> -            guest->match = VIR_CPU_MATCH_EXACT;
> -        else
> -            guest->match = VIR_CPU_MATCH_MINIMUM;
> +        guest->match = VIR_CPU_MATCH_MINIMUM;
>          virCPUDefFreeModel(guest);
>          return virCPUDefCopyModel(guest, host, true);

ACK

Jirka




More information about the libvir-list mailing list