Re: [PATCH] qemu: cpu: fix fullCPU to include all emulatable qemu features

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I've checked against latest upstream version of libvirt. Issue is still not fixed.


I guess I should provide cpu data for tests like in next patch:

Author: Jiri Denemark <jdenemar@xxxxxxxxxx>
Date:   Fri Jan 5 14:52:45 2018 +0100

    cputest: Add data for Intel(R) Xeon(R) CPU E5-2609 v3
    
    The CPU contains the updated microcode for CVE-2017-5715.
    
    Signed-off-by: Jiri Denemark <jdenemar@xxxxxxxxxx>
    Reviewed-by: Pavel Hrdina <phrdina@xxxxxxxxxx>

 tests/cputest.c                                             |   1 +
 tests/cputestdata/x86_64-cpuid-Xeon-E5-2609-v3-disabled.xml |   6 +
 tests/cputestdata/x86_64-cpuid-Xeon-E5-2609-v3-enabled.xml  |   8 +
 tests/cputestdata/x86_64-cpuid-Xeon-E5-2609-v3-guest.xml    |  32 +++
 tests/cputestdata/x86_64-cpuid-Xeon-E5-2609-v3-host.xml     |  33 +++
 tests/cputestdata/x86_64-cpuid-Xeon-E5-2609-v3-json.xml     |  15 ++
 tests/cputestdata/x86_64-cpuid-Xeon-E5-2609-v3.json         | 726 ++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/cputestdata/x86_64-cpuid-Xeon-E5-2609-v3.xml          |  37 +++
 8 files changed, 858 insertions(+)

I just can not find a script in libvirt repo that generates them.

On 20.11.2017 15:55, Nikolay Shirokovskiy wrote:
> On Core i5 650 guest fail to start with error [1] if guest cpu config is taken
> from domcapabilities and check is set to partial.
> 
> The problem is in qemu caps fullCPU calculation in virQEMUCapsInitHostCPUModel.
> It is supposed to include features emulated by qemu and missed on host. Some of
> such features may be not included however.
> 
> For mentioned cpu host cpu is detected as Westmere and guest cpu as
> SandyBridge. x2apic is missed on host and provided by installed qemu. The
> feature is not mentioned in guest cpu features explicitly because SandyBridge
> model include it. As a result fullCPU does not include x2apic too.
> 
> Solution is to expand guest cpu features before updating fullCPU features.
> 
> [1] error: the CPU is incompatible with host CPU: Host CPU does not
>     provide required features: x2apic, tsc-deadline
> ---
>  src/qemu/qemu_capabilities.c | 12 +++++++++---
>  1 file changed, 9 insertions(+), 3 deletions(-)
> 
> diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
> index 9c1eeac..edba716 100644
> --- a/src/qemu/qemu_capabilities.c
> +++ b/src/qemu/qemu_capabilities.c
> @@ -3475,6 +3475,7 @@ virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps,
>                              virDomainVirtType type)
>  {
>      virCPUDefPtr cpu = NULL;
> +    virCPUDefPtr cpuExpanded = NULL;
>      virCPUDefPtr migCPU = NULL;
>      virCPUDefPtr hostCPU = NULL;
>      virCPUDefPtr fullCPU = NULL;
> @@ -3504,9 +3505,13 @@ virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps,
>                                        NULL, NULL)))
>              goto error;
>  
> -        for (i = 0; i < cpu->nfeatures; i++) {
> -            if (cpu->features[i].policy == VIR_CPU_FEATURE_REQUIRE &&
> -                virCPUDefUpdateFeature(fullCPU, cpu->features[i].name,
> +        if (!(cpuExpanded = virCPUDefCopy(cpu)) ||
> +            virCPUExpandFeatures(qemuCaps->arch, cpuExpanded) < 0)
> +            goto error;
> +
> +        for (i = 0; i < cpuExpanded->nfeatures; i++) {
> +            if (cpuExpanded->features[i].policy == VIR_CPU_FEATURE_REQUIRE &&
> +                virCPUDefUpdateFeature(fullCPU, cpuExpanded->features[i].name,
>                                         VIR_CPU_FEATURE_REQUIRE) < 0)
>                  goto error;
>          }
> @@ -3528,6 +3533,7 @@ virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps,
>      virQEMUCapsSetHostModel(qemuCaps, type, cpu, migCPU, fullCPU);
>  
>   cleanup:
> +    virCPUDefFree(cpuExpanded);
>      virCPUDefFree(hostCPU);
>      return;
>  
> 

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux