]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: Translate features in virQEMUCapsGetCPUFeatures
authorJiri Denemark <jdenemar@redhat.com>
Thu, 25 Jul 2019 08:27:45 +0000 (10:27 +0200)
committerJiri Denemark <jdenemar@redhat.com>
Fri, 26 Jul 2019 14:37:30 +0000 (16:37 +0200)
Starting with QEMU 4.1 qemuMonitorCPUModelInfo structure in virQEMUCaps
stores only canonical feature names which may differ from the name used
by libvirt. We need translate these canonical names into libvirt names
for further consumption.

This fixes a bug in qemuConnectBaselineHypervisorCPU which would remove
all features for which libvirt's spelling differs from the QEMU's
preferred name. For example, the following result of
qemuConnectBaselineHypervisorCPU on my host with QEMU 4.1 is wrong:

    <cpu mode='custom' match='exact'>
      <model fallback='forbid'>Skylake-Client</model>
      <vendor>Intel</vendor>
      <feature policy='require' name='ss'/>
      <feature policy='require' name='vmx'/>
      <feature policy='require' name='hypervisor'/>
      <feature policy='require' name='clflushopt'/>
      <feature policy='require' name='umip'/>
      <feature policy='require' name='arch-capabilities'/>
      <feature policy='require' name='xsaves'/>
      <feature policy='require' name='pdpe1gb'/>
      <feature policy='require' name='invtsc'/>
      <feature policy='disable' name='pclmuldq'/>
      <feature policy='disable' name='lahf_lm'/>
    </cpu>

The 'pclmuldq' and 'lahf_lm' should not be disabled in the baseline CPU
as they are supported by QEMU on this host.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
src/qemu/qemu_capabilities.c

index 65192469da8bf0ea2c9036956e3703f56b21af9a..2388f145af86037dd902526e9f1055fd709ca56d 100644 (file)
@@ -2598,7 +2598,8 @@ virQEMUCapsGetCPUFeatures(virQEMUCapsPtr qemuCaps,
         if (migratable && prop->migratable == VIR_TRISTATE_BOOL_NO)
             continue;
 
-        if (VIR_STRDUP(list[n++], prop->name) < 0)
+        if (VIR_STRDUP(list[n++],
+                       virQEMUCapsCPUFeatureFromQEMU(qemuCaps, prop->name)) < 0)
             goto cleanup;
     }