[libvirt] [PATCH] cpuBaseline: Detect empty set of common features

Daniel P. Berrange berrange at redhat.com
Wed Jul 7 11:32:13 UTC 2010


On Fri, Jul 02, 2010 at 11:16:16PM +0200, Jiri Denemark wrote:
> In case the set of CPUs has no features in common, report incompatible
> CPUs instead of returning the simplest CPU model with all features
> disabled.
> ---
>  src/cpu/cpu_x86.c |   26 ++++++++++++++++++++++++++
>  1 files changed, 26 insertions(+), 0 deletions(-)
> 
> diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
> index 30a2db6..0266ce9 100644
> --- a/src/cpu/cpu_x86.c
> +++ b/src/cpu/cpu_x86.c
> @@ -233,6 +233,26 @@ x86DataSubtract(union cpuData *data1,
>  }
>  
>  
> +static bool
> +x86DataIsEmpty(union cpuData *data)
> +{
> +    struct cpuX86cpuid zero = { 0, 0, 0, 0, 0 };
> +    unsigned int i;
> +
> +    for (i = 0; i < data->x86.basic_len; i++) {
> +        if (!x86cpuidMatch(data->x86.basic + i, &zero))
> +            return false;
> +    }
> +
> +    for (i = 0; i < data->x86.extended_len; i++) {
> +        if (!x86cpuidMatch(data->x86.extended + i, &zero))
> +            return false;
> +    }
> +
> +    return true;
> +}
> +
> +
>  static union cpuData *
>  x86DataFromModel(const struct x86_model *model)
>  {
> @@ -1363,6 +1383,12 @@ x86Baseline(virCPUDefPtr *cpus,
>      if (!(data = x86DataFromModel(base_model)))
>          goto no_memory;
>  
> +    if (x86DataIsEmpty(data)) {
> +        virCPUReportError(VIR_ERR_OPERATION_FAILED,
> +                "%s", _("CPUs are incompatible"));
> +        goto error;
> +    }
> +
>      if (x86Decode(cpu, data, models, nmodels, NULL) < 0)
>          goto error;
>  

ACK

Daniel
-- 
|: Red Hat, Engineering, London    -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://deltacloud.org :|
|: http://autobuild.org        -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-   F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the libvir-list mailing list