[libvirt] [PATCH 6/6] cpu_map: Drop pconfig from Icelake-Server CPU model

Daniel P. Berrangé berrange at redhat.com
Tue Nov 12 13:30:48 UTC 2019


On Mon, Nov 11, 2019 at 09:35:37PM +0100, Jiri Denemark wrote:
> The pconfig feature was enabled in QEMU by accident in 3.1.0. All other
> newer versions do not support it and it was removed from the
> Icelake-Server CPU model in QEMU.
> 
> We don't normally change our CPU models even when QEMU does so to avoid
> breaking migrations between different versions of libvirt. But we can
> safely do so in this specific case. QEMU never supported enabling
> pconfig so any domain which was able to start has pconfig disabled.
> 
> With a small compatibility hack which explicitly disables pconfig when
> CPU model equals Icelake-Server in migratable domain definition, only
> one migration scenario stays broken (and there's nothing we can do about
> it): from any host to a host with libvirt < 5.10.0 and QEMU > 3.1.0.
> 
> https://bugzilla.redhat.com/show_bug.cgi?id=1749672
> 
> Signed-off-by: Jiri Denemark <jdenemar at redhat.com>
> ---
>  src/cpu_map/x86_Icelake-Server.xml            |  1 -
>  src/qemu/qemu_domain.c                        | 23 +++++++++++++++++++
>  src/qemu/qemu_domain.h                        |  3 +++
>  src/qemu/qemu_migration_cookie.c              |  3 +++
>  .../x86_64-cpuid-Ice-Lake-Server-guest.xml    |  1 -
>  .../x86_64-cpuid-Ice-Lake-Server-host.xml     | 11 +--------
>  .../x86_64-cpuid-Ice-Lake-Server-json.xml     |  1 -
>  7 files changed, 30 insertions(+), 13 deletions(-)
> 
> diff --git a/src/cpu_map/x86_Icelake-Server.xml b/src/cpu_map/x86_Icelake-Server.xml
> index ecd21cf5c7..a565371977 100644
> --- a/src/cpu_map/x86_Icelake-Server.xml
> +++ b/src/cpu_map/x86_Icelake-Server.xml
> @@ -54,7 +54,6 @@
>      <feature name='pat'/>
>      <feature name='pcid'/>
>      <feature name='pclmuldq'/>
> -    <feature name='pconfig'/>
>      <feature name='pdpe1gb'/>
>      <feature name='pge'/>
>      <feature name='pku'/>
> diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
> index 58a82fbd60..4a641019be 100644
> --- a/src/qemu/qemu_domain.c
> +++ b/src/qemu/qemu_domain.c
> @@ -8921,6 +8921,26 @@ qemuDomainDefCopy(virQEMUDriverPtr driver,
>  }
>  
>  
> +int
> +qemuDomainMakeCPUMigratable(virCPUDefPtr cpu)
> +{
> +    if (cpu->mode == VIR_CPU_MODE_CUSTOM &&
> +        STREQ_NULLABLE(cpu->model, "Icelake-Server")) {

This might need tweaking when we merge support for versioned CPU
I presume, but not a blocker for this series as is.

> +        /* Originally Icelake-Server CPU model contained pconfig CPU feature.
> +         * It was never actually enabled and thus it was removed. To enable
> +         * migration to QEMU 3.1.0 (with both new and old libvirt), we
> +         * explicitly disable pconfig in migration XML (otherwise old libvirt
> +         * would think it was implicitly enabled on the source). New libvirt
> +         * will drop it from the XML before starting the domain on new QEMU.
> +         */
> +        if (virCPUDefUpdateFeature(cpu, "pconfig", VIR_CPU_FEATURE_DISABLE) < 0)
> +            return -1;
> +    }
> +
> +    return 0;
> +}
> +

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|




More information about the libvir-list mailing list