[libvirt] [PATCH v2 24/33] qemu: Use full CPU model expansion on x86

Jiri Denemark posted 33 patches 8 years, 11 months ago
There is a newer version of this series
[libvirt] [PATCH v2 24/33] qemu: Use full CPU model expansion on x86
Posted by Jiri Denemark 8 years, 11 months ago
The static CPU model expansion is designed to return only canonical
names of all CPU properties. TO maintain backward compatibility libvirt
is stuck with different spelling of some of the features, which is only
returned by the full expansion. But in addition to returned all spelling
variants for all properties the full expansion will contain properties
which are not guaranteed to be migration compatible. We need to combine
both expansions. First we need to call the static expansion to limit the
result to migratable properties. Then we can use the result of the
static expansion as an input to the full expansion to get both canonical
names and their aliases.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
---

Notes:
    Version 2:
    - no change

 src/qemu/qemu_capabilities.c                       |  10 +-
 src/qemu/qemu_monitor.h                            |   2 +
 src/qemu/qemu_monitor_json.c                       |  28 +-
 .../domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml |   2 -
 tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml   |   3 +-
 .../qemucapabilitiesdata/caps_2.9.0.x86_64.replies | 476 +++++++++++++++++++++
 tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml   | 178 ++++++--
 7 files changed, 657 insertions(+), 42 deletions(-)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 20aaaf8f0..a77e300b7 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -2844,6 +2844,7 @@ virQEMUCapsProbeQMPHostCPU(virQEMUCapsPtr qemuCaps,
 {
     qemuMonitorCPUModelInfoPtr *modelInfo;
     const char *model;
+    qemuMonitorCPUModelExpansionType type;
 
     if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION))
         return 0;
@@ -2856,9 +2857,12 @@ virQEMUCapsProbeQMPHostCPU(virQEMUCapsPtr qemuCaps,
         model = "host";
     }
 
-    return qemuMonitorGetCPUModelExpansion(mon,
-                                           QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC,
-                                           model, modelInfo);
+    if (ARCH_IS_X86(qemuCaps->arch))
+        type = QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC_FULL;
+    else
+        type = QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC;
+
+    return qemuMonitorGetCPUModelExpansion(mon, type, model, modelInfo);
 }
 
 struct tpmTypeToCaps {
diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
index b61f1cf54..6407a309f 100644
--- a/src/qemu/qemu_monitor.h
+++ b/src/qemu/qemu_monitor.h
@@ -950,6 +950,8 @@ struct _qemuMonitorCPUModelInfo {
 
 typedef enum {
     QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC,
+    QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC_FULL,
+    QEMU_MONITOR_CPU_MODEL_EXPANSION_FULL,
 } qemuMonitorCPUModelExpansionType;
 
 int qemuMonitorGetCPUModelExpansion(qemuMonitorPtr mon,
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index dd7907482..0454571c1 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -5026,7 +5026,7 @@ qemuMonitorJSONGetCPUModelExpansion(qemuMonitorPtr mon,
                                     qemuMonitorCPUModelInfoPtr *model_info)
 {
     int ret = -1;
-    virJSONValuePtr model;
+    virJSONValuePtr model = NULL;
     virJSONValuePtr cmd = NULL;
     virJSONValuePtr reply = NULL;
     virJSONValuePtr data;
@@ -5038,16 +5038,24 @@ qemuMonitorJSONGetCPUModelExpansion(qemuMonitorPtr mon,
 
     *model_info = NULL;
 
-    if (!(model = virJSONValueNewObject()))
-        goto cleanup;
+ retry:
+    if (!model) {
+        if (!(model = virJSONValueNewObject()))
+            goto cleanup;
 
-    if (virJSONValueObjectAppendString(model, "name", model_name) < 0)
-        goto cleanup;
+        if (virJSONValueObjectAppendString(model, "name", model_name) < 0)
+            goto cleanup;
+    }
 
     switch (type) {
     case QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC:
+    case QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC_FULL:
         typeStr = "static";
         break;
+
+    case QEMU_MONITOR_CPU_MODEL_EXPANSION_FULL:
+        typeStr = "full";
+        break;
     }
 
     if (!(cmd = qemuMonitorJSONMakeCommand("query-cpu-model-expansion",
@@ -5084,6 +5092,16 @@ qemuMonitorJSONGetCPUModelExpansion(qemuMonitorPtr mon,
         goto cleanup;
     }
 
+    if (type == QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC_FULL) {
+        if (!(model = virJSONValueCopy(cpu_model)))
+            goto cleanup;
+
+        virJSONValueFree(cmd);
+        virJSONValueFree(reply);
+        type = QEMU_MONITOR_CPU_MODEL_EXPANSION_FULL;
+        goto retry;
+    }
+
     if (!(cpu_name = virJSONValueObjectGetString(cpu_model, "name"))) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                        _("query-cpu-model-expansion reply data was missing 'name'"));
diff --git a/tests/domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml b/tests/domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml
index 1827b1d6f..573eb4bb6 100644
--- a/tests/domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml
+++ b/tests/domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml
@@ -46,9 +46,7 @@
       <feature policy='require' name='3dnowext'/>
       <feature policy='require' name='3dnow'/>
       <feature policy='require' name='cr8legacy'/>
-      <feature policy='disable' name='pclmuldq'/>
       <feature policy='disable' name='avx'/>
-      <feature policy='disable' name='lahf_lm'/>
       <feature policy='disable' name='misalignsse'/>
       <feature policy='disable' name='3dnowprefetch'/>
       <feature policy='disable' name='xop'/>
diff --git a/tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml b/tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml
index a7a2ecdea..b361475d7 100644
--- a/tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml
+++ b/tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml
@@ -26,11 +26,10 @@
       <feature policy='require' name='ss'/>
       <feature policy='require' name='vmx'/>
       <feature policy='require' name='hypervisor'/>
+      <feature policy='require' name='tsc_adjust'/>
       <feature policy='require' name='clflushopt'/>
       <feature policy='require' name='xsaves'/>
       <feature policy='require' name='pdpe1gb'/>
-      <feature policy='disable' name='pclmuldq'/>
-      <feature policy='disable' name='lahf_lm'/>
     </mode>
     <mode name='custom' supported='yes'>
       <model usable='yes'>qemu64</model>
diff --git a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.replies b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.replies
index 390f40f9f..6b1e9ea8a 100644
--- a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.replies
+++ b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.replies
@@ -14360,6 +14360,244 @@
 
 {
   "return": {
+    "model": {
+      "name": "base",
+      "props": {
+        "phys-bits": 0,
+        "core-id": -1,
+        "xlevel": 2147483656,
+        "cmov": true,
+        "ia64": false,
+        "aes": true,
+        "mmx": true,
+        "arat": true,
+        "rdpid": false,
+        "pause-filter": false,
+        "xsavec": true,
+        "osxsave": false,
+        "tsc-frequency": 0,
+        "xd": true,
+        "hv-vendor-id": "",
+        "kvm-asyncpf": true,
+        "kvm_asyncpf": true,
+        "perfctr_core": false,
+        "perfctr-core": false,
+        "mpx": true,
+        "avx512cd": false,
+        "decodeassists": false,
+        "pbe": false,
+        "sse4_1": true,
+        "sse4.1": true,
+        "sse4-1": true,
+        "family": 6,
+        "avx512f": false,
+        "xcrypt": false,
+        "hv-runtime": false,
+        "msr": true,
+        "mce": true,
+        "mca": true,
+        "thread-id": -1,
+        "min-level": 13,
+        "xgetbv1": true,
+        "cid": false,
+        "hv-relaxed": false,
+        "fxsr": true,
+        "ds": false,
+        "hv-crash": false,
+        "xsaveopt": true,
+        "xtpr": false,
+        "avx512-vpopcntdq": false,
+        "phe": false,
+        "avx512vl": false,
+        "extapic": false,
+        "3dnowprefetch": true,
+        "cr8legacy": false,
+        "cpuid-0xb": true,
+        "xcrypt-en": false,
+        "kvm_pv_eoi": true,
+        "apic-id": 4294967295,
+        "pn": false,
+        "dca": false,
+        "vendor": "GenuineIntel",
+        "pku": false,
+        "smx": false,
+        "cmp-legacy": false,
+        "cmp_legacy": false,
+        "avx512-4fmaps": false,
+        "vmcb-clean": false,
+        "vmcb_clean": false,
+        "3dnowext": false,
+        "hle": true,
+        "npt": false,
+        "memory": "/machine/unattached/system[0]",
+        "clwb": false,
+        "lbrv": false,
+        "adx": true,
+        "ss": true,
+        "pni": true,
+        "svm_lock": false,
+        "svm-lock": false,
+        "smep": true,
+        "pfthreshold": false,
+        "smap": true,
+        "x2apic": true,
+        "avx512vbmi": false,
+        "hv-stimer": false,
+        "i64": true,
+        "flushbyasid": false,
+        "f16c": true,
+        "ace2-en": false,
+        "pat": true,
+        "pae": true,
+        "sse": true,
+        "phe-en": false,
+        "kvm-nopiodelay": true,
+        "kvm_nopiodelay": true,
+        "tm": false,
+        "kvmclock-stable-bit": true,
+        "hypervisor": true,
+        "socket-id": -1,
+        "pcommit": false,
+        "syscall": true,
+        "level": 13,
+        "avx512dq": false,
+        "svm": false,
+        "full-cpuid-auto-level": true,
+        "hv-reset": false,
+        "invtsc": false,
+        "sse3": true,
+        "sse2": true,
+        "est": false,
+        "avx512ifma": false,
+        "tm2": false,
+        "kvm-pv-eoi": true,
+        "cx8": true,
+        "kvm-mmu": false,
+        "kvm_mmu": false,
+        "sse4_2": true,
+        "sse4.2": true,
+        "sse4-2": true,
+        "pge": true,
+        "fill-mtrr-mask": true,
+        "pdcm": false,
+        "nodeid_msr": false,
+        "model": 94,
+        "movbe": true,
+        "nrip-save": false,
+        "nrip_save": false,
+        "sse4a": false,
+        "ssse3": true,
+        "kvm_pv_unhalt": true,
+        "invpcid": true,
+        "pdpe1gb": true,
+        "tsc-deadline": true,
+        "fma": true,
+        "cx16": true,
+        "de": true,
+        "enforce": false,
+        "stepping": 3,
+        "xsave": true,
+        "clflush": true,
+        "skinit": false,
+        "tce": false,
+        "tsc": true,
+        "fpu": true,
+        "ds-cpl": false,
+        "ds_cpl": false,
+        "ibs": false,
+        "host-phys-bits": false,
+        "fma4": false,
+        "la57": false,
+        "osvw": false,
+        "check": true,
+        "pmm": false,
+        "apic": true,
+        "pmu": false,
+        "min-xlevel2": 0,
+        "tsc-adjust": true,
+        "tsc_adjust": true,
+        "kvm-steal-time": true,
+        "kvm_steal_time": true,
+        "kvmclock": true,
+        "l3-cache": true,
+        "lwp": false,
+        "xop": false,
+        "avx": true,
+        "ospke": false,
+        "ace2": false,
+        "acpi": false,
+        "avx512bw": false,
+        "hv-vapic": false,
+        "fsgsbase": true,
+        "ht": false,
+        "nx": true,
+        "pclmulqdq": true,
+        "mmxext": false,
+        "popcnt": true,
+        "xsaves": true,
+        "lm": true,
+        "umip": false,
+        "avx2": true,
+        "pse": true,
+        "sep": true,
+        "pclmuldq": true,
+        "nodeid-msr": false,
+        "kvm": true,
+        "misalignsse": false,
+        "min-xlevel": 2147483656,
+        "bmi2": true,
+        "bmi1": true,
+        "kvm-pv-unhalt": true,
+        "realized": false,
+        "tsc_scale": false,
+        "tsc-scale": false,
+        "topoext": false,
+        "hv-vpindex": false,
+        "xlevel2": 0,
+        "clflushopt": true,
+        "monitor": false,
+        "avx512er": false,
+        "pmm-en": false,
+        "pcid": true,
+        "3dnow": false,
+        "erms": true,
+        "lahf-lm": true,
+        "lahf_lm": true,
+        "xstore": false,
+        "hv-synic": false,
+        "fxsr-opt": false,
+        "fxsr_opt": false,
+        "rtm": true,
+        "lmce": true,
+        "hv-time": false,
+        "perfctr-nb": false,
+        "perfctr_nb": false,
+        "ffxsr": false,
+        "rdrand": true,
+        "rdseed": true,
+        "avx512-4vnniw": false,
+        "vme": true,
+        "vmx": true,
+        "dtes64": false,
+        "mtrr": true,
+        "rdtscp": true,
+        "pse36": true,
+        "tbm": false,
+        "wdt": false,
+        "pause_filter": false,
+        "model-id": "Intel(R) Xeon(R) CPU E3-1245 v5 @ 3.50GHz",
+        "sha-ni": false,
+        "abm": true,
+        "avx512pf": false,
+        "xstore-en": false
+      }
+    }
+  },
+  "id": "libvirt-49"
+}
+
+{
+  "return": {
   },
   "id": "libvirt-1"
 }
@@ -14887,3 +15125,241 @@
   },
   "id": "libvirt-3"
 }
+
+{
+  "return": {
+    "model": {
+      "name": "base",
+      "props": {
+        "phys-bits": 0,
+        "core-id": -1,
+        "xlevel": 2147483658,
+        "cmov": true,
+        "ia64": false,
+        "aes": true,
+        "mmx": true,
+        "arat": true,
+        "rdpid": false,
+        "pause-filter": false,
+        "xsavec": false,
+        "osxsave": false,
+        "tsc-frequency": 0,
+        "xd": true,
+        "hv-vendor-id": "",
+        "kvm-asyncpf": false,
+        "kvm_asyncpf": false,
+        "perfctr_core": false,
+        "perfctr-core": false,
+        "mpx": true,
+        "avx512cd": false,
+        "decodeassists": false,
+        "pbe": false,
+        "sse4_1": true,
+        "sse4.1": true,
+        "sse4-1": true,
+        "family": 6,
+        "avx512f": false,
+        "xcrypt": false,
+        "hv-runtime": false,
+        "msr": true,
+        "mce": true,
+        "mca": true,
+        "thread-id": -1,
+        "min-level": 13,
+        "xgetbv1": true,
+        "cid": false,
+        "hv-relaxed": false,
+        "fxsr": true,
+        "ds": false,
+        "hv-crash": false,
+        "xsaveopt": true,
+        "xtpr": false,
+        "avx512-vpopcntdq": false,
+        "phe": false,
+        "avx512vl": false,
+        "extapic": false,
+        "3dnowprefetch": false,
+        "cr8legacy": true,
+        "cpuid-0xb": true,
+        "xcrypt-en": false,
+        "kvm_pv_eoi": false,
+        "apic-id": 4294967295,
+        "pn": false,
+        "dca": false,
+        "vendor": "AuthenticAMD",
+        "pku": true,
+        "smx": false,
+        "cmp-legacy": false,
+        "cmp_legacy": false,
+        "avx512-4fmaps": false,
+        "vmcb-clean": false,
+        "vmcb_clean": false,
+        "3dnowext": true,
+        "hle": false,
+        "npt": false,
+        "memory": "/machine/unattached/system[0]",
+        "clwb": true,
+        "lbrv": false,
+        "adx": true,
+        "ss": true,
+        "pni": true,
+        "svm_lock": false,
+        "svm-lock": false,
+        "smep": true,
+        "pfthreshold": false,
+        "smap": true,
+        "x2apic": false,
+        "avx512vbmi": false,
+        "hv-stimer": false,
+        "i64": true,
+        "flushbyasid": false,
+        "f16c": false,
+        "ace2-en": false,
+        "pat": true,
+        "pae": true,
+        "sse": true,
+        "phe-en": false,
+        "kvm-nopiodelay": false,
+        "kvm_nopiodelay": false,
+        "tm": false,
+        "kvmclock-stable-bit": false,
+        "hypervisor": true,
+        "socket-id": -1,
+        "pcommit": true,
+        "syscall": true,
+        "level": 13,
+        "avx512dq": false,
+        "svm": true,
+        "full-cpuid-auto-level": true,
+        "hv-reset": false,
+        "invtsc": false,
+        "sse3": true,
+        "sse2": true,
+        "est": false,
+        "avx512ifma": false,
+        "tm2": false,
+        "kvm-pv-eoi": false,
+        "cx8": true,
+        "kvm-mmu": false,
+        "kvm_mmu": false,
+        "sse4_2": true,
+        "sse4.2": true,
+        "sse4-2": true,
+        "pge": true,
+        "fill-mtrr-mask": true,
+        "pdcm": false,
+        "nodeid_msr": false,
+        "model": 6,
+        "movbe": true,
+        "nrip-save": false,
+        "nrip_save": false,
+        "sse4a": true,
+        "ssse3": true,
+        "kvm_pv_unhalt": false,
+        "invpcid": false,
+        "pdpe1gb": true,
+        "tsc-deadline": false,
+        "fma": false,
+        "cx16": true,
+        "de": true,
+        "enforce": false,
+        "stepping": 3,
+        "xsave": true,
+        "clflush": true,
+        "skinit": false,
+        "tce": false,
+        "tsc": true,
+        "fpu": true,
+        "ds-cpl": false,
+        "ds_cpl": false,
+        "ibs": false,
+        "host-phys-bits": false,
+        "fma4": false,
+        "la57": true,
+        "osvw": false,
+        "check": true,
+        "pmm": false,
+        "apic": true,
+        "pmu": false,
+        "min-xlevel2": 0,
+        "tsc-adjust": false,
+        "tsc_adjust": false,
+        "kvm-steal-time": false,
+        "kvm_steal_time": false,
+        "kvmclock": false,
+        "l3-cache": true,
+        "lwp": false,
+        "xop": false,
+        "avx": false,
+        "ospke": true,
+        "ace2": false,
+        "acpi": true,
+        "avx512bw": false,
+        "hv-vapic": false,
+        "fsgsbase": true,
+        "ht": false,
+        "nx": true,
+        "pclmulqdq": true,
+        "mmxext": true,
+        "popcnt": true,
+        "xsaves": false,
+        "lm": true,
+        "umip": false,
+        "avx2": false,
+        "pse": true,
+        "sep": true,
+        "pclmuldq": true,
+        "nodeid-msr": false,
+        "kvm": true,
+        "misalignsse": false,
+        "min-xlevel": 2147483658,
+        "bmi2": true,
+        "bmi1": true,
+        "kvm-pv-unhalt": false,
+        "realized": false,
+        "tsc_scale": false,
+        "tsc-scale": false,
+        "topoext": false,
+        "hv-vpindex": false,
+        "xlevel2": 0,
+        "clflushopt": true,
+        "monitor": true,
+        "avx512er": false,
+        "pmm-en": false,
+        "pcid": false,
+        "3dnow": true,
+        "erms": true,
+        "lahf-lm": true,
+        "lahf_lm": true,
+        "xstore": false,
+        "hv-synic": false,
+        "fxsr-opt": false,
+        "fxsr_opt": false,
+        "rtm": false,
+        "lmce": false,
+        "hv-time": false,
+        "perfctr-nb": false,
+        "perfctr_nb": false,
+        "ffxsr": false,
+        "rdrand": false,
+        "rdseed": false,
+        "avx512-4vnniw": false,
+        "vme": false,
+        "vmx": false,
+        "dtes64": false,
+        "mtrr": true,
+        "rdtscp": true,
+        "pse36": true,
+        "tbm": false,
+        "wdt": false,
+        "pause_filter": false,
+        "model-id": "QEMU TCG CPU version 2.5+",
+        "sha-ni": false,
+        "abm": true,
+        "avx512pf": false,
+        "xstore-en": false
+      }
+    }
+  },
+  "id": "libvirt-4"
+}
diff --git a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml
index 520bf80f4..aae71b1fc 100644
--- a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml
@@ -206,80 +206,109 @@
   <package> (v2.8.0-877-g38e4b757b4)</package>
   <arch>x86_64</arch>
   <hostCPU type='kvm' model='base'>
+    <property name='phys-bits' ull='0'/>
+    <property name='core-id' ull='18446744073709551615'/>
+    <property name='xlevel' ull='2147483656'/>
     <property name='cmov' boolean='yes'/>
     <property name='ia64' boolean='no'/>
     <property name='aes' boolean='yes'/>
     <property name='mmx' boolean='yes'/>
-    <property name='rdpid' boolean='no'/>
     <property name='arat' boolean='yes'/>
+    <property name='rdpid' boolean='no'/>
     <property name='pause-filter' boolean='no'/>
     <property name='xsavec' boolean='yes'/>
     <property name='osxsave' boolean='no'/>
+    <property name='tsc-frequency' ull='0'/>
+    <property name='xd' boolean='yes'/>
+    <property name='hv-vendor-id' string=''/>
     <property name='kvm-asyncpf' boolean='yes'/>
+    <property name='kvm_asyncpf' boolean='yes'/>
+    <property name='perfctr_core' boolean='no'/>
     <property name='perfctr-core' boolean='no'/>
     <property name='mpx' boolean='yes'/>
-    <property name='pbe' boolean='no'/>
     <property name='avx512cd' boolean='no'/>
     <property name='decodeassists' boolean='no'/>
+    <property name='pbe' boolean='no'/>
+    <property name='sse4_1' boolean='yes'/>
     <property name='sse4.1' boolean='yes'/>
+    <property name='sse4-1' boolean='yes'/>
     <property name='family' ull='6'/>
     <property name='avx512f' boolean='no'/>
+    <property name='xcrypt' boolean='no'/>
+    <property name='hv-runtime' boolean='no'/>
     <property name='msr' boolean='yes'/>
     <property name='mce' boolean='yes'/>
     <property name='mca' boolean='yes'/>
-    <property name='xcrypt' boolean='no'/>
+    <property name='thread-id' ull='18446744073709551615'/>
     <property name='min-level' ull='13'/>
     <property name='xgetbv1' boolean='yes'/>
     <property name='cid' boolean='no'/>
-    <property name='ds' boolean='no'/>
+    <property name='hv-relaxed' boolean='no'/>
     <property name='fxsr' boolean='yes'/>
+    <property name='ds' boolean='no'/>
+    <property name='hv-crash' boolean='no'/>
     <property name='xsaveopt' boolean='yes'/>
     <property name='xtpr' boolean='no'/>
-    <property name='avx512vl' boolean='no'/>
     <property name='avx512-vpopcntdq' boolean='no'/>
     <property name='phe' boolean='no'/>
+    <property name='avx512vl' boolean='no'/>
     <property name='extapic' boolean='no'/>
     <property name='3dnowprefetch' boolean='yes'/>
     <property name='cr8legacy' boolean='no'/>
+    <property name='cpuid-0xb' boolean='yes'/>
     <property name='xcrypt-en' boolean='no'/>
+    <property name='kvm_pv_eoi' boolean='yes'/>
+    <property name='apic-id' ull='4294967295'/>
     <property name='pn' boolean='no'/>
     <property name='dca' boolean='no'/>
     <property name='vendor' string='GenuineIntel'/>
     <property name='pku' boolean='no'/>
     <property name='smx' boolean='no'/>
     <property name='cmp-legacy' boolean='no'/>
+    <property name='cmp_legacy' boolean='no'/>
     <property name='avx512-4fmaps' boolean='no'/>
     <property name='vmcb-clean' boolean='no'/>
-    <property name='hle' boolean='yes'/>
+    <property name='vmcb_clean' boolean='no'/>
     <property name='3dnowext' boolean='no'/>
+    <property name='hle' boolean='yes'/>
     <property name='npt' boolean='no'/>
+    <property name='memory' string='/machine/unattached/system[0]'/>
     <property name='clwb' boolean='no'/>
     <property name='lbrv' boolean='no'/>
     <property name='adx' boolean='yes'/>
     <property name='ss' boolean='yes'/>
     <property name='pni' boolean='yes'/>
+    <property name='svm_lock' boolean='no'/>
     <property name='svm-lock' boolean='no'/>
     <property name='smep' boolean='yes'/>
-    <property name='smap' boolean='yes'/>
     <property name='pfthreshold' boolean='no'/>
+    <property name='smap' boolean='yes'/>
     <property name='x2apic' boolean='yes'/>
     <property name='avx512vbmi' boolean='no'/>
+    <property name='hv-stimer' boolean='no'/>
+    <property name='i64' boolean='yes'/>
     <property name='flushbyasid' boolean='no'/>
     <property name='f16c' boolean='yes'/>
     <property name='ace2-en' boolean='no'/>
-    <property name='pae' boolean='yes'/>
     <property name='pat' boolean='yes'/>
+    <property name='pae' boolean='yes'/>
     <property name='sse' boolean='yes'/>
     <property name='phe-en' boolean='no'/>
     <property name='kvm-nopiodelay' boolean='yes'/>
+    <property name='kvm_nopiodelay' boolean='yes'/>
     <property name='tm' boolean='no'/>
     <property name='kvmclock-stable-bit' boolean='yes'/>
     <property name='hypervisor' boolean='yes'/>
+    <property name='socket-id' ull='18446744073709551615'/>
     <property name='pcommit' boolean='no'/>
     <property name='syscall' boolean='yes'/>
+    <property name='level' ull='13'/>
     <property name='avx512dq' boolean='no'/>
     <property name='svm' boolean='no'/>
+    <property name='full-cpuid-auto-level' boolean='yes'/>
+    <property name='hv-reset' boolean='no'/>
     <property name='invtsc' boolean='no'/>
+    <property name='sse3' boolean='yes'/>
     <property name='sse2' boolean='yes'/>
     <property name='est' boolean='no'/>
     <property name='avx512ifma' boolean='no'/>
@@ -287,44 +316,61 @@
     <property name='kvm-pv-eoi' boolean='yes'/>
     <property name='cx8' boolean='yes'/>
     <property name='kvm-mmu' boolean='no'/>
+    <property name='kvm_mmu' boolean='no'/>
+    <property name='sse4_2' boolean='yes'/>
     <property name='sse4.2' boolean='yes'/>
+    <property name='sse4-2' boolean='yes'/>
     <property name='pge' boolean='yes'/>
+    <property name='fill-mtrr-mask' boolean='yes'/>
     <property name='pdcm' boolean='no'/>
+    <property name='nodeid_msr' boolean='no'/>
     <property name='model' ull='94'/>
     <property name='movbe' boolean='yes'/>
     <property name='nrip-save' boolean='no'/>
-    <property name='ssse3' boolean='yes'/>
+    <property name='nrip_save' boolean='no'/>
     <property name='sse4a' boolean='no'/>
+    <property name='ssse3' boolean='yes'/>
+    <property name='kvm_pv_unhalt' boolean='yes'/>
     <property name='invpcid' boolean='yes'/>
     <property name='pdpe1gb' boolean='yes'/>
     <property name='tsc-deadline' boolean='yes'/>
     <property name='fma' boolean='yes'/>
     <property name='cx16' boolean='yes'/>
     <property name='de' boolean='yes'/>
+    <property name='enforce' boolean='no'/>
     <property name='stepping' ull='3'/>
     <property name='xsave' boolean='yes'/>
     <property name='clflush' boolean='yes'/>
     <property name='skinit' boolean='no'/>
-    <property name='tsc' boolean='yes'/>
     <property name='tce' boolean='no'/>
+    <property name='tsc' boolean='yes'/>
     <property name='fpu' boolean='yes'/>
     <property name='ds-cpl' boolean='no'/>
+    <property name='ds_cpl' boolean='no'/>
     <property name='ibs' boolean='no'/>
+    <property name='host-phys-bits' boolean='no'/>
     <property name='fma4' boolean='no'/>
     <property name='la57' boolean='no'/>
     <property name='osvw' boolean='no'/>
-    <property name='apic' boolean='yes'/>
+    <property name='check' boolean='yes'/>
     <property name='pmm' boolean='no'/>
+    <property name='apic' boolean='yes'/>
+    <property name='pmu' boolean='no'/>
+    <property name='min-xlevel2' ull='0'/>
     <property name='tsc-adjust' boolean='yes'/>
+    <property name='tsc_adjust' boolean='yes'/>
     <property name='kvm-steal-time' boolean='yes'/>
+    <property name='kvm_steal_time' boolean='yes'/>
     <property name='kvmclock' boolean='yes'/>
+    <property name='l3-cache' boolean='yes'/>
     <property name='lwp' boolean='no'/>
     <property name='xop' boolean='no'/>
     <property name='avx' boolean='yes'/>
     <property name='ospke' boolean='no'/>
+    <property name='ace2' boolean='no'/>
     <property name='acpi' boolean='no'/>
     <property name='avx512bw' boolean='no'/>
-    <property name='ace2' boolean='no'/>
+    <property name='hv-vapic' boolean='no'/>
     <property name='fsgsbase' boolean='yes'/>
     <property name='ht' boolean='no'/>
     <property name='nx' boolean='yes'/>
@@ -334,17 +380,23 @@
     <property name='xsaves' boolean='yes'/>
     <property name='lm' boolean='yes'/>
     <property name='umip' boolean='no'/>
-    <property name='pse' boolean='yes'/>
     <property name='avx2' boolean='yes'/>
+    <property name='pse' boolean='yes'/>
     <property name='sep' boolean='yes'/>
+    <property name='pclmuldq' boolean='yes'/>
     <property name='nodeid-msr' boolean='no'/>
+    <property name='kvm' boolean='yes'/>
     <property name='misalignsse' boolean='no'/>
     <property name='min-xlevel' ull='2147483656'/>
-    <property name='bmi1' boolean='yes'/>
     <property name='bmi2' boolean='yes'/>
+    <property name='bmi1' boolean='yes'/>
     <property name='kvm-pv-unhalt' boolean='yes'/>
+    <property name='realized' boolean='no'/>
+    <property name='tsc_scale' boolean='no'/>
     <property name='tsc-scale' boolean='no'/>
     <property name='topoext' boolean='no'/>
+    <property name='hv-vpindex' boolean='no'/>
+    <property name='xlevel2' ull='0'/>
     <property name='clflushopt' boolean='yes'/>
     <property name='monitor' boolean='no'/>
     <property name='avx512er' boolean='no'/>
@@ -353,11 +405,17 @@
     <property name='3dnow' boolean='no'/>
     <property name='erms' boolean='yes'/>
     <property name='lahf-lm' boolean='yes'/>
-    <property name='fxsr-opt' boolean='no'/>
+    <property name='lahf_lm' boolean='yes'/>
     <property name='xstore' boolean='no'/>
+    <property name='hv-synic' boolean='no'/>
+    <property name='fxsr-opt' boolean='no'/>
+    <property name='fxsr_opt' boolean='no'/>
     <property name='rtm' boolean='yes'/>
     <property name='lmce' boolean='yes'/>
+    <property name='hv-time' boolean='no'/>
     <property name='perfctr-nb' boolean='no'/>
+    <property name='perfctr_nb' boolean='no'/>
+    <property name='ffxsr' boolean='no'/>
     <property name='rdrand' boolean='yes'/>
     <property name='rdseed' boolean='yes'/>
     <property name='avx512-4vnniw' boolean='no'/>
@@ -369,6 +427,7 @@
     <property name='pse36' boolean='yes'/>
     <property name='tbm' boolean='no'/>
     <property name='wdt' boolean='no'/>
+    <property name='pause_filter' boolean='no'/>
     <property name='model-id' string='Intel(R) Xeon(R) CPU E3-1245 v5 @ 3.50GHz'/>
     <property name='sha-ni' boolean='no'/>
     <property name='abm' boolean='yes'/>
@@ -376,80 +435,109 @@
     <property name='xstore-en' boolean='no'/>
   </hostCPU>
   <hostCPU type='tcg' model='base'>
+    <property name='phys-bits' ull='0'/>
+    <property name='core-id' ull='18446744073709551615'/>
+    <property name='xlevel' ull='2147483658'/>
     <property name='cmov' boolean='yes'/>
     <property name='ia64' boolean='no'/>
     <property name='aes' boolean='yes'/>
     <property name='mmx' boolean='yes'/>
-    <property name='rdpid' boolean='no'/>
     <property name='arat' boolean='yes'/>
+    <property name='rdpid' boolean='no'/>
     <property name='pause-filter' boolean='no'/>
     <property name='xsavec' boolean='no'/>
     <property name='osxsave' boolean='no'/>
+    <property name='tsc-frequency' ull='0'/>
+    <property name='xd' boolean='yes'/>
+    <property name='hv-vendor-id' string=''/>
     <property name='kvm-asyncpf' boolean='no'/>
+    <property name='kvm_asyncpf' boolean='no'/>
+    <property name='perfctr_core' boolean='no'/>
     <property name='perfctr-core' boolean='no'/>
     <property name='mpx' boolean='yes'/>
-    <property name='pbe' boolean='no'/>
     <property name='avx512cd' boolean='no'/>
     <property name='decodeassists' boolean='no'/>
+    <property name='pbe' boolean='no'/>
+    <property name='sse4_1' boolean='yes'/>
     <property name='sse4.1' boolean='yes'/>
+    <property name='sse4-1' boolean='yes'/>
     <property name='family' ull='6'/>
     <property name='avx512f' boolean='no'/>
+    <property name='xcrypt' boolean='no'/>
+    <property name='hv-runtime' boolean='no'/>
     <property name='msr' boolean='yes'/>
     <property name='mce' boolean='yes'/>
     <property name='mca' boolean='yes'/>
-    <property name='xcrypt' boolean='no'/>
+    <property name='thread-id' ull='18446744073709551615'/>
     <property name='min-level' ull='13'/>
     <property name='xgetbv1' boolean='yes'/>
     <property name='cid' boolean='no'/>
-    <property name='ds' boolean='no'/>
+    <property name='hv-relaxed' boolean='no'/>
     <property name='fxsr' boolean='yes'/>
+    <property name='ds' boolean='no'/>
+    <property name='hv-crash' boolean='no'/>
     <property name='xsaveopt' boolean='yes'/>
     <property name='xtpr' boolean='no'/>
-    <property name='avx512vl' boolean='no'/>
     <property name='avx512-vpopcntdq' boolean='no'/>
     <property name='phe' boolean='no'/>
+    <property name='avx512vl' boolean='no'/>
     <property name='extapic' boolean='no'/>
     <property name='3dnowprefetch' boolean='no'/>
     <property name='cr8legacy' boolean='yes'/>
+    <property name='cpuid-0xb' boolean='yes'/>
     <property name='xcrypt-en' boolean='no'/>
+    <property name='kvm_pv_eoi' boolean='no'/>
+    <property name='apic-id' ull='4294967295'/>
     <property name='pn' boolean='no'/>
     <property name='dca' boolean='no'/>
     <property name='vendor' string='AuthenticAMD'/>
     <property name='pku' boolean='yes'/>
     <property name='smx' boolean='no'/>
     <property name='cmp-legacy' boolean='no'/>
+    <property name='cmp_legacy' boolean='no'/>
     <property name='avx512-4fmaps' boolean='no'/>
     <property name='vmcb-clean' boolean='no'/>
-    <property name='hle' boolean='no'/>
+    <property name='vmcb_clean' boolean='no'/>
     <property name='3dnowext' boolean='yes'/>
+    <property name='hle' boolean='no'/>
     <property name='npt' boolean='no'/>
+    <property name='memory' string='/machine/unattached/system[0]'/>
     <property name='clwb' boolean='yes'/>
     <property name='lbrv' boolean='no'/>
     <property name='adx' boolean='yes'/>
     <property name='ss' boolean='yes'/>
     <property name='pni' boolean='yes'/>
+    <property name='svm_lock' boolean='no'/>
     <property name='svm-lock' boolean='no'/>
     <property name='smep' boolean='yes'/>
-    <property name='smap' boolean='yes'/>
     <property name='pfthreshold' boolean='no'/>
+    <property name='smap' boolean='yes'/>
     <property name='x2apic' boolean='no'/>
     <property name='avx512vbmi' boolean='no'/>
+    <property name='hv-stimer' boolean='no'/>
+    <property name='i64' boolean='yes'/>
     <property name='flushbyasid' boolean='no'/>
     <property name='f16c' boolean='no'/>
     <property name='ace2-en' boolean='no'/>
-    <property name='pae' boolean='yes'/>
     <property name='pat' boolean='yes'/>
+    <property name='pae' boolean='yes'/>
     <property name='sse' boolean='yes'/>
     <property name='phe-en' boolean='no'/>
     <property name='kvm-nopiodelay' boolean='no'/>
+    <property name='kvm_nopiodelay' boolean='no'/>
     <property name='tm' boolean='no'/>
     <property name='kvmclock-stable-bit' boolean='no'/>
     <property name='hypervisor' boolean='yes'/>
+    <property name='socket-id' ull='18446744073709551615'/>
     <property name='pcommit' boolean='yes'/>
     <property name='syscall' boolean='yes'/>
+    <property name='level' ull='13'/>
     <property name='avx512dq' boolean='no'/>
     <property name='svm' boolean='yes'/>
+    <property name='full-cpuid-auto-level' boolean='yes'/>
+    <property name='hv-reset' boolean='no'/>
     <property name='invtsc' boolean='no'/>
+    <property name='sse3' boolean='yes'/>
     <property name='sse2' boolean='yes'/>
     <property name='est' boolean='no'/>
     <property name='avx512ifma' boolean='no'/>
@@ -457,44 +545,61 @@
     <property name='kvm-pv-eoi' boolean='no'/>
     <property name='cx8' boolean='yes'/>
     <property name='kvm-mmu' boolean='no'/>
+    <property name='kvm_mmu' boolean='no'/>
+    <property name='sse4_2' boolean='yes'/>
     <property name='sse4.2' boolean='yes'/>
+    <property name='sse4-2' boolean='yes'/>
     <property name='pge' boolean='yes'/>
+    <property name='fill-mtrr-mask' boolean='yes'/>
     <property name='pdcm' boolean='no'/>
+    <property name='nodeid_msr' boolean='no'/>
     <property name='model' ull='6'/>
     <property name='movbe' boolean='yes'/>
     <property name='nrip-save' boolean='no'/>
-    <property name='ssse3' boolean='yes'/>
+    <property name='nrip_save' boolean='no'/>
     <property name='sse4a' boolean='yes'/>
+    <property name='ssse3' boolean='yes'/>
+    <property name='kvm_pv_unhalt' boolean='no'/>
     <property name='invpcid' boolean='no'/>
     <property name='pdpe1gb' boolean='yes'/>
     <property name='tsc-deadline' boolean='no'/>
     <property name='fma' boolean='no'/>
     <property name='cx16' boolean='yes'/>
     <property name='de' boolean='yes'/>
+    <property name='enforce' boolean='no'/>
     <property name='stepping' ull='3'/>
     <property name='xsave' boolean='yes'/>
     <property name='clflush' boolean='yes'/>
     <property name='skinit' boolean='no'/>
-    <property name='tsc' boolean='yes'/>
     <property name='tce' boolean='no'/>
+    <property name='tsc' boolean='yes'/>
     <property name='fpu' boolean='yes'/>
     <property name='ds-cpl' boolean='no'/>
+    <property name='ds_cpl' boolean='no'/>
     <property name='ibs' boolean='no'/>
+    <property name='host-phys-bits' boolean='no'/>
     <property name='fma4' boolean='no'/>
     <property name='la57' boolean='yes'/>
     <property name='osvw' boolean='no'/>
-    <property name='apic' boolean='yes'/>
+    <property name='check' boolean='yes'/>
     <property name='pmm' boolean='no'/>
+    <property name='apic' boolean='yes'/>
+    <property name='pmu' boolean='no'/>
+    <property name='min-xlevel2' ull='0'/>
     <property name='tsc-adjust' boolean='no'/>
+    <property name='tsc_adjust' boolean='no'/>
     <property name='kvm-steal-time' boolean='no'/>
+    <property name='kvm_steal_time' boolean='no'/>
     <property name='kvmclock' boolean='no'/>
+    <property name='l3-cache' boolean='yes'/>
     <property name='lwp' boolean='no'/>
     <property name='xop' boolean='no'/>
     <property name='avx' boolean='no'/>
     <property name='ospke' boolean='yes'/>
+    <property name='ace2' boolean='no'/>
     <property name='acpi' boolean='yes'/>
     <property name='avx512bw' boolean='no'/>
-    <property name='ace2' boolean='no'/>
+    <property name='hv-vapic' boolean='no'/>
     <property name='fsgsbase' boolean='yes'/>
     <property name='ht' boolean='no'/>
     <property name='nx' boolean='yes'/>
@@ -504,17 +609,23 @@
     <property name='xsaves' boolean='no'/>
     <property name='lm' boolean='yes'/>
     <property name='umip' boolean='no'/>
-    <property name='pse' boolean='yes'/>
     <property name='avx2' boolean='no'/>
+    <property name='pse' boolean='yes'/>
     <property name='sep' boolean='yes'/>
+    <property name='pclmuldq' boolean='yes'/>
     <property name='nodeid-msr' boolean='no'/>
+    <property name='kvm' boolean='yes'/>
     <property name='misalignsse' boolean='no'/>
     <property name='min-xlevel' ull='2147483658'/>
-    <property name='bmi1' boolean='yes'/>
     <property name='bmi2' boolean='yes'/>
+    <property name='bmi1' boolean='yes'/>
     <property name='kvm-pv-unhalt' boolean='no'/>
+    <property name='realized' boolean='no'/>
+    <property name='tsc_scale' boolean='no'/>
     <property name='tsc-scale' boolean='no'/>
     <property name='topoext' boolean='no'/>
+    <property name='hv-vpindex' boolean='no'/>
+    <property name='xlevel2' ull='0'/>
     <property name='clflushopt' boolean='yes'/>
     <property name='monitor' boolean='yes'/>
     <property name='avx512er' boolean='no'/>
@@ -523,11 +634,17 @@
     <property name='3dnow' boolean='yes'/>
     <property name='erms' boolean='yes'/>
     <property name='lahf-lm' boolean='yes'/>
-    <property name='fxsr-opt' boolean='no'/>
+    <property name='lahf_lm' boolean='yes'/>
     <property name='xstore' boolean='no'/>
+    <property name='hv-synic' boolean='no'/>
+    <property name='fxsr-opt' boolean='no'/>
+    <property name='fxsr_opt' boolean='no'/>
     <property name='rtm' boolean='no'/>
     <property name='lmce' boolean='no'/>
+    <property name='hv-time' boolean='no'/>
     <property name='perfctr-nb' boolean='no'/>
+    <property name='perfctr_nb' boolean='no'/>
+    <property name='ffxsr' boolean='no'/>
     <property name='rdrand' boolean='no'/>
     <property name='rdseed' boolean='no'/>
     <property name='avx512-4vnniw' boolean='no'/>
@@ -539,6 +656,7 @@
     <property name='pse36' boolean='yes'/>
     <property name='tbm' boolean='no'/>
     <property name='wdt' boolean='no'/>
+    <property name='pause_filter' boolean='no'/>
     <property name='model-id' string='QEMU TCG CPU version 2.5+'/>
     <property name='sha-ni' boolean='no'/>
     <property name='abm' boolean='yes'/>
-- 
2.11.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v2 24/33] qemu: Use full CPU model expansion on x86
Posted by John Ferlan 8 years, 11 months ago

On 02/15/2017 11:44 AM, Jiri Denemark wrote:
> The static CPU model expansion is designed to return only canonical
> names of all CPU properties. TO maintain backward compatibility libvirt

s/TO/To

> is stuck with different spelling of some of the features, which is only
> returned by the full expansion. But in addition to returned all spelling

s/returned/returning

> variants for all properties the full expansion will contain properties
> which are not guaranteed to be migration compatible. We need to combine
> both expansions. First we need to call the static expansion to limit the
> result to migratable properties. Then we can use the result of the
> static expansion as an input to the full expansion to get both canonical
> names and their aliases.
> 
> Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
> ---
> 
> Notes:
>     Version 2:
>     - no change
> 
>  src/qemu/qemu_capabilities.c                       |  10 +-
>  src/qemu/qemu_monitor.h                            |   2 +
>  src/qemu/qemu_monitor_json.c                       |  28 +-
>  .../domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml |   2 -
>  tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml   |   3 +-
>  .../qemucapabilitiesdata/caps_2.9.0.x86_64.replies | 476 +++++++++++++++++++++
>  tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml   | 178 ++++++--
>  7 files changed, 657 insertions(+), 42 deletions(-)
> 
> diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
> index 20aaaf8f0..a77e300b7 100644
> --- a/src/qemu/qemu_capabilities.c
> +++ b/src/qemu/qemu_capabilities.c
> @@ -2844,6 +2844,7 @@ virQEMUCapsProbeQMPHostCPU(virQEMUCapsPtr qemuCaps,
>  {
>      qemuMonitorCPUModelInfoPtr *modelInfo;
>      const char *model;
> +    qemuMonitorCPUModelExpansionType type;
>  
>      if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION))
>          return 0;
> @@ -2856,9 +2857,12 @@ virQEMUCapsProbeQMPHostCPU(virQEMUCapsPtr qemuCaps,
>          model = "host";
>      }
>  
> -    return qemuMonitorGetCPUModelExpansion(mon,
> -                                           QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC,
> -                                           model, modelInfo);
> +    if (ARCH_IS_X86(qemuCaps->arch))
> +        type = QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC_FULL;
> +    else
> +        type = QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC;
> +
> +    return qemuMonitorGetCPUModelExpansion(mon, type, model, modelInfo);
>  }
>  
>  struct tpmTypeToCaps {
> diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
> index b61f1cf54..6407a309f 100644
> --- a/src/qemu/qemu_monitor.h
> +++ b/src/qemu/qemu_monitor.h
> @@ -950,6 +950,8 @@ struct _qemuMonitorCPUModelInfo {
>  
>  typedef enum {
>      QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC,
> +    QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC_FULL,
> +    QEMU_MONITOR_CPU_MODEL_EXPANSION_FULL,
>  } qemuMonitorCPUModelExpansionType;
>  
>  int qemuMonitorGetCPUModelExpansion(qemuMonitorPtr mon,
> diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
> index dd7907482..0454571c1 100644
> --- a/src/qemu/qemu_monitor_json.c
> +++ b/src/qemu/qemu_monitor_json.c
> @@ -5026,7 +5026,7 @@ qemuMonitorJSONGetCPUModelExpansion(qemuMonitorPtr mon,
>                                      qemuMonitorCPUModelInfoPtr *model_info)
>  {
>      int ret = -1;
> -    virJSONValuePtr model;
> +    virJSONValuePtr model = NULL;
>      virJSONValuePtr cmd = NULL;
>      virJSONValuePtr reply = NULL;
>      virJSONValuePtr data;
> @@ -5038,16 +5038,24 @@ qemuMonitorJSONGetCPUModelExpansion(qemuMonitorPtr mon,
>  
>      *model_info = NULL;
>  
> -    if (!(model = virJSONValueNewObject()))
> -        goto cleanup;
> + retry:
> +    if (!model) {
> +        if (!(model = virJSONValueNewObject()))
> +            goto cleanup;
>  
> -    if (virJSONValueObjectAppendString(model, "name", model_name) < 0)
> -        goto cleanup;
> +        if (virJSONValueObjectAppendString(model, "name", model_name) < 0)
> +            goto cleanup;
> +    }
>  
>      switch (type) {
>      case QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC:
> +    case QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC_FULL:
>          typeStr = "static";
>          break;
> +
> +    case QEMU_MONITOR_CPU_MODEL_EXPANSION_FULL:
> +        typeStr = "full";
> +        break;
>      }
>  
>      if (!(cmd = qemuMonitorJSONMakeCommand("query-cpu-model-expansion",
> @@ -5084,6 +5092,16 @@ qemuMonitorJSONGetCPUModelExpansion(qemuMonitorPtr mon,
>          goto cleanup;
>      }
>  
> +    if (type == QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC_FULL) {
> +        if (!(model = virJSONValueCopy(cpu_model)))
> +            goto cleanup;
> +
> +        virJSONValueFree(cmd);
> +        virJSONValueFree(reply);
> +        type = QEMU_MONITOR_CPU_MODEL_EXPANSION_FULL;
> +        goto retry;

When you get here, model must be set.. The retry label tests for not
set, which cannot be true - so why would the retry label be on the
switch statement?  If it did move, then the move of the AppendString
inside the "if" wouldn't be necessary.

> +    }
> +

This just seems odd - it's not really a retry, it's like piling on. To
me retry is like trying again because something failed. In this case you
get static, but then add on the full afterwards. I don't have a better
suggestion for a label name.

Obviously things work, another weak ACK (sorry it's just getting late
for me and this is a long series)...

John

>      if (!(cpu_name = virJSONValueObjectGetString(cpu_model, "name"))) {
>          virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>                         _("query-cpu-model-expansion reply data was missing 'name'"));
> diff --git a/tests/domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml b/tests/domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml
> index 1827b1d6f..573eb4bb6 100644
> --- a/tests/domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml
> +++ b/tests/domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml
> @@ -46,9 +46,7 @@
>        <feature policy='require' name='3dnowext'/>
>        <feature policy='require' name='3dnow'/>
>        <feature policy='require' name='cr8legacy'/>
> -      <feature policy='disable' name='pclmuldq'/>
>        <feature policy='disable' name='avx'/>
> -      <feature policy='disable' name='lahf_lm'/>
>        <feature policy='disable' name='misalignsse'/>
>        <feature policy='disable' name='3dnowprefetch'/>
>        <feature policy='disable' name='xop'/>
> diff --git a/tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml b/tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml
> index a7a2ecdea..b361475d7 100644
> --- a/tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml
> +++ b/tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml
> @@ -26,11 +26,10 @@
>        <feature policy='require' name='ss'/>
>        <feature policy='require' name='vmx'/>
>        <feature policy='require' name='hypervisor'/>
> +      <feature policy='require' name='tsc_adjust'/>
>        <feature policy='require' name='clflushopt'/>
>        <feature policy='require' name='xsaves'/>
>        <feature policy='require' name='pdpe1gb'/>
> -      <feature policy='disable' name='pclmuldq'/>
> -      <feature policy='disable' name='lahf_lm'/>
>      </mode>
>      <mode name='custom' supported='yes'>
>        <model usable='yes'>qemu64</model>
> diff --git a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.replies b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.replies
> index 390f40f9f..6b1e9ea8a 100644
> --- a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.replies
> +++ b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.replies
> @@ -14360,6 +14360,244 @@
>  
>  {
>    "return": {
> +    "model": {
> +      "name": "base",
> +      "props": {
> +        "phys-bits": 0,
> +        "core-id": -1,
> +        "xlevel": 2147483656,
> +        "cmov": true,
> +        "ia64": false,
> +        "aes": true,
> +        "mmx": true,
> +        "arat": true,
> +        "rdpid": false,
> +        "pause-filter": false,
> +        "xsavec": true,
> +        "osxsave": false,
> +        "tsc-frequency": 0,
> +        "xd": true,
> +        "hv-vendor-id": "",
> +        "kvm-asyncpf": true,
> +        "kvm_asyncpf": true,
> +        "perfctr_core": false,
> +        "perfctr-core": false,
> +        "mpx": true,
> +        "avx512cd": false,
> +        "decodeassists": false,
> +        "pbe": false,
> +        "sse4_1": true,
> +        "sse4.1": true,
> +        "sse4-1": true,
> +        "family": 6,
> +        "avx512f": false,
> +        "xcrypt": false,
> +        "hv-runtime": false,
> +        "msr": true,
> +        "mce": true,
> +        "mca": true,
> +        "thread-id": -1,
> +        "min-level": 13,
> +        "xgetbv1": true,
> +        "cid": false,
> +        "hv-relaxed": false,
> +        "fxsr": true,
> +        "ds": false,
> +        "hv-crash": false,
> +        "xsaveopt": true,
> +        "xtpr": false,
> +        "avx512-vpopcntdq": false,
> +        "phe": false,
> +        "avx512vl": false,
> +        "extapic": false,
> +        "3dnowprefetch": true,
> +        "cr8legacy": false,
> +        "cpuid-0xb": true,
> +        "xcrypt-en": false,
> +        "kvm_pv_eoi": true,
> +        "apic-id": 4294967295,
> +        "pn": false,
> +        "dca": false,
> +        "vendor": "GenuineIntel",
> +        "pku": false,
> +        "smx": false,
> +        "cmp-legacy": false,
> +        "cmp_legacy": false,
> +        "avx512-4fmaps": false,
> +        "vmcb-clean": false,
> +        "vmcb_clean": false,
> +        "3dnowext": false,
> +        "hle": true,
> +        "npt": false,
> +        "memory": "/machine/unattached/system[0]",
> +        "clwb": false,
> +        "lbrv": false,
> +        "adx": true,
> +        "ss": true,
> +        "pni": true,
> +        "svm_lock": false,
> +        "svm-lock": false,
> +        "smep": true,
> +        "pfthreshold": false,
> +        "smap": true,
> +        "x2apic": true,
> +        "avx512vbmi": false,
> +        "hv-stimer": false,
> +        "i64": true,
> +        "flushbyasid": false,
> +        "f16c": true,
> +        "ace2-en": false,
> +        "pat": true,
> +        "pae": true,
> +        "sse": true,
> +        "phe-en": false,
> +        "kvm-nopiodelay": true,
> +        "kvm_nopiodelay": true,
> +        "tm": false,
> +        "kvmclock-stable-bit": true,
> +        "hypervisor": true,
> +        "socket-id": -1,
> +        "pcommit": false,
> +        "syscall": true,
> +        "level": 13,
> +        "avx512dq": false,
> +        "svm": false,
> +        "full-cpuid-auto-level": true,
> +        "hv-reset": false,
> +        "invtsc": false,
> +        "sse3": true,
> +        "sse2": true,
> +        "est": false,
> +        "avx512ifma": false,
> +        "tm2": false,
> +        "kvm-pv-eoi": true,
> +        "cx8": true,
> +        "kvm-mmu": false,
> +        "kvm_mmu": false,
> +        "sse4_2": true,
> +        "sse4.2": true,
> +        "sse4-2": true,
> +        "pge": true,
> +        "fill-mtrr-mask": true,
> +        "pdcm": false,
> +        "nodeid_msr": false,
> +        "model": 94,
> +        "movbe": true,
> +        "nrip-save": false,
> +        "nrip_save": false,
> +        "sse4a": false,
> +        "ssse3": true,
> +        "kvm_pv_unhalt": true,
> +        "invpcid": true,
> +        "pdpe1gb": true,
> +        "tsc-deadline": true,
> +        "fma": true,
> +        "cx16": true,
> +        "de": true,
> +        "enforce": false,
> +        "stepping": 3,
> +        "xsave": true,
> +        "clflush": true,
> +        "skinit": false,
> +        "tce": false,
> +        "tsc": true,
> +        "fpu": true,
> +        "ds-cpl": false,
> +        "ds_cpl": false,
> +        "ibs": false,
> +        "host-phys-bits": false,
> +        "fma4": false,
> +        "la57": false,
> +        "osvw": false,
> +        "check": true,
> +        "pmm": false,
> +        "apic": true,
> +        "pmu": false,
> +        "min-xlevel2": 0,
> +        "tsc-adjust": true,
> +        "tsc_adjust": true,
> +        "kvm-steal-time": true,
> +        "kvm_steal_time": true,
> +        "kvmclock": true,
> +        "l3-cache": true,
> +        "lwp": false,
> +        "xop": false,
> +        "avx": true,
> +        "ospke": false,
> +        "ace2": false,
> +        "acpi": false,
> +        "avx512bw": false,
> +        "hv-vapic": false,
> +        "fsgsbase": true,
> +        "ht": false,
> +        "nx": true,
> +        "pclmulqdq": true,
> +        "mmxext": false,
> +        "popcnt": true,
> +        "xsaves": true,
> +        "lm": true,
> +        "umip": false,
> +        "avx2": true,
> +        "pse": true,
> +        "sep": true,
> +        "pclmuldq": true,
> +        "nodeid-msr": false,
> +        "kvm": true,
> +        "misalignsse": false,
> +        "min-xlevel": 2147483656,
> +        "bmi2": true,
> +        "bmi1": true,
> +        "kvm-pv-unhalt": true,
> +        "realized": false,
> +        "tsc_scale": false,
> +        "tsc-scale": false,
> +        "topoext": false,
> +        "hv-vpindex": false,
> +        "xlevel2": 0,
> +        "clflushopt": true,
> +        "monitor": false,
> +        "avx512er": false,
> +        "pmm-en": false,
> +        "pcid": true,
> +        "3dnow": false,
> +        "erms": true,
> +        "lahf-lm": true,
> +        "lahf_lm": true,
> +        "xstore": false,
> +        "hv-synic": false,
> +        "fxsr-opt": false,
> +        "fxsr_opt": false,
> +        "rtm": true,
> +        "lmce": true,
> +        "hv-time": false,
> +        "perfctr-nb": false,
> +        "perfctr_nb": false,
> +        "ffxsr": false,
> +        "rdrand": true,
> +        "rdseed": true,
> +        "avx512-4vnniw": false,
> +        "vme": true,
> +        "vmx": true,
> +        "dtes64": false,
> +        "mtrr": true,
> +        "rdtscp": true,
> +        "pse36": true,
> +        "tbm": false,
> +        "wdt": false,
> +        "pause_filter": false,
> +        "model-id": "Intel(R) Xeon(R) CPU E3-1245 v5 @ 3.50GHz",
> +        "sha-ni": false,
> +        "abm": true,
> +        "avx512pf": false,
> +        "xstore-en": false
> +      }
> +    }
> +  },
> +  "id": "libvirt-49"
> +}
> +
> +{
> +  "return": {
>    },
>    "id": "libvirt-1"
>  }
> @@ -14887,3 +15125,241 @@
>    },
>    "id": "libvirt-3"
>  }
> +
> +{
> +  "return": {
> +    "model": {
> +      "name": "base",
> +      "props": {
> +        "phys-bits": 0,
> +        "core-id": -1,
> +        "xlevel": 2147483658,
> +        "cmov": true,
> +        "ia64": false,
> +        "aes": true,
> +        "mmx": true,
> +        "arat": true,
> +        "rdpid": false,
> +        "pause-filter": false,
> +        "xsavec": false,
> +        "osxsave": false,
> +        "tsc-frequency": 0,
> +        "xd": true,
> +        "hv-vendor-id": "",
> +        "kvm-asyncpf": false,
> +        "kvm_asyncpf": false,
> +        "perfctr_core": false,
> +        "perfctr-core": false,
> +        "mpx": true,
> +        "avx512cd": false,
> +        "decodeassists": false,
> +        "pbe": false,
> +        "sse4_1": true,
> +        "sse4.1": true,
> +        "sse4-1": true,
> +        "family": 6,
> +        "avx512f": false,
> +        "xcrypt": false,
> +        "hv-runtime": false,
> +        "msr": true,
> +        "mce": true,
> +        "mca": true,
> +        "thread-id": -1,
> +        "min-level": 13,
> +        "xgetbv1": true,
> +        "cid": false,
> +        "hv-relaxed": false,
> +        "fxsr": true,
> +        "ds": false,
> +        "hv-crash": false,
> +        "xsaveopt": true,
> +        "xtpr": false,
> +        "avx512-vpopcntdq": false,
> +        "phe": false,
> +        "avx512vl": false,
> +        "extapic": false,
> +        "3dnowprefetch": false,
> +        "cr8legacy": true,
> +        "cpuid-0xb": true,
> +        "xcrypt-en": false,
> +        "kvm_pv_eoi": false,
> +        "apic-id": 4294967295,
> +        "pn": false,
> +        "dca": false,
> +        "vendor": "AuthenticAMD",
> +        "pku": true,
> +        "smx": false,
> +        "cmp-legacy": false,
> +        "cmp_legacy": false,
> +        "avx512-4fmaps": false,
> +        "vmcb-clean": false,
> +        "vmcb_clean": false,
> +        "3dnowext": true,
> +        "hle": false,
> +        "npt": false,
> +        "memory": "/machine/unattached/system[0]",
> +        "clwb": true,
> +        "lbrv": false,
> +        "adx": true,
> +        "ss": true,
> +        "pni": true,
> +        "svm_lock": false,
> +        "svm-lock": false,
> +        "smep": true,
> +        "pfthreshold": false,
> +        "smap": true,
> +        "x2apic": false,
> +        "avx512vbmi": false,
> +        "hv-stimer": false,
> +        "i64": true,
> +        "flushbyasid": false,
> +        "f16c": false,
> +        "ace2-en": false,
> +        "pat": true,
> +        "pae": true,
> +        "sse": true,
> +        "phe-en": false,
> +        "kvm-nopiodelay": false,
> +        "kvm_nopiodelay": false,
> +        "tm": false,
> +        "kvmclock-stable-bit": false,
> +        "hypervisor": true,
> +        "socket-id": -1,
> +        "pcommit": true,
> +        "syscall": true,
> +        "level": 13,
> +        "avx512dq": false,
> +        "svm": true,
> +        "full-cpuid-auto-level": true,
> +        "hv-reset": false,
> +        "invtsc": false,
> +        "sse3": true,
> +        "sse2": true,
> +        "est": false,
> +        "avx512ifma": false,
> +        "tm2": false,
> +        "kvm-pv-eoi": false,
> +        "cx8": true,
> +        "kvm-mmu": false,
> +        "kvm_mmu": false,
> +        "sse4_2": true,
> +        "sse4.2": true,
> +        "sse4-2": true,
> +        "pge": true,
> +        "fill-mtrr-mask": true,
> +        "pdcm": false,
> +        "nodeid_msr": false,
> +        "model": 6,
> +        "movbe": true,
> +        "nrip-save": false,
> +        "nrip_save": false,
> +        "sse4a": true,
> +        "ssse3": true,
> +        "kvm_pv_unhalt": false,
> +        "invpcid": false,
> +        "pdpe1gb": true,
> +        "tsc-deadline": false,
> +        "fma": false,
> +        "cx16": true,
> +        "de": true,
> +        "enforce": false,
> +        "stepping": 3,
> +        "xsave": true,
> +        "clflush": true,
> +        "skinit": false,
> +        "tce": false,
> +        "tsc": true,
> +        "fpu": true,
> +        "ds-cpl": false,
> +        "ds_cpl": false,
> +        "ibs": false,
> +        "host-phys-bits": false,
> +        "fma4": false,
> +        "la57": true,
> +        "osvw": false,
> +        "check": true,
> +        "pmm": false,
> +        "apic": true,
> +        "pmu": false,
> +        "min-xlevel2": 0,
> +        "tsc-adjust": false,
> +        "tsc_adjust": false,
> +        "kvm-steal-time": false,
> +        "kvm_steal_time": false,
> +        "kvmclock": false,
> +        "l3-cache": true,
> +        "lwp": false,
> +        "xop": false,
> +        "avx": false,
> +        "ospke": true,
> +        "ace2": false,
> +        "acpi": true,
> +        "avx512bw": false,
> +        "hv-vapic": false,
> +        "fsgsbase": true,
> +        "ht": false,
> +        "nx": true,
> +        "pclmulqdq": true,
> +        "mmxext": true,
> +        "popcnt": true,
> +        "xsaves": false,
> +        "lm": true,
> +        "umip": false,
> +        "avx2": false,
> +        "pse": true,
> +        "sep": true,
> +        "pclmuldq": true,
> +        "nodeid-msr": false,
> +        "kvm": true,
> +        "misalignsse": false,
> +        "min-xlevel": 2147483658,
> +        "bmi2": true,
> +        "bmi1": true,
> +        "kvm-pv-unhalt": false,
> +        "realized": false,
> +        "tsc_scale": false,
> +        "tsc-scale": false,
> +        "topoext": false,
> +        "hv-vpindex": false,
> +        "xlevel2": 0,
> +        "clflushopt": true,
> +        "monitor": true,
> +        "avx512er": false,
> +        "pmm-en": false,
> +        "pcid": false,
> +        "3dnow": true,
> +        "erms": true,
> +        "lahf-lm": true,
> +        "lahf_lm": true,
> +        "xstore": false,
> +        "hv-synic": false,
> +        "fxsr-opt": false,
> +        "fxsr_opt": false,
> +        "rtm": false,
> +        "lmce": false,
> +        "hv-time": false,
> +        "perfctr-nb": false,
> +        "perfctr_nb": false,
> +        "ffxsr": false,
> +        "rdrand": false,
> +        "rdseed": false,
> +        "avx512-4vnniw": false,
> +        "vme": false,
> +        "vmx": false,
> +        "dtes64": false,
> +        "mtrr": true,
> +        "rdtscp": true,
> +        "pse36": true,
> +        "tbm": false,
> +        "wdt": false,
> +        "pause_filter": false,
> +        "model-id": "QEMU TCG CPU version 2.5+",
> +        "sha-ni": false,
> +        "abm": true,
> +        "avx512pf": false,
> +        "xstore-en": false
> +      }
> +    }
> +  },
> +  "id": "libvirt-4"
> +}
> diff --git a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml
> index 520bf80f4..aae71b1fc 100644
> --- a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml
> +++ b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml
> @@ -206,80 +206,109 @@
>    <package> (v2.8.0-877-g38e4b757b4)</package>
>    <arch>x86_64</arch>
>    <hostCPU type='kvm' model='base'>
> +    <property name='phys-bits' ull='0'/>
> +    <property name='core-id' ull='18446744073709551615'/>
> +    <property name='xlevel' ull='2147483656'/>
>      <property name='cmov' boolean='yes'/>
>      <property name='ia64' boolean='no'/>
>      <property name='aes' boolean='yes'/>
>      <property name='mmx' boolean='yes'/>
> -    <property name='rdpid' boolean='no'/>
>      <property name='arat' boolean='yes'/>
> +    <property name='rdpid' boolean='no'/>
>      <property name='pause-filter' boolean='no'/>
>      <property name='xsavec' boolean='yes'/>
>      <property name='osxsave' boolean='no'/>
> +    <property name='tsc-frequency' ull='0'/>
> +    <property name='xd' boolean='yes'/>
> +    <property name='hv-vendor-id' string=''/>
>      <property name='kvm-asyncpf' boolean='yes'/>
> +    <property name='kvm_asyncpf' boolean='yes'/>
> +    <property name='perfctr_core' boolean='no'/>
>      <property name='perfctr-core' boolean='no'/>
>      <property name='mpx' boolean='yes'/>
> -    <property name='pbe' boolean='no'/>
>      <property name='avx512cd' boolean='no'/>
>      <property name='decodeassists' boolean='no'/>
> +    <property name='pbe' boolean='no'/>
> +    <property name='sse4_1' boolean='yes'/>
>      <property name='sse4.1' boolean='yes'/>
> +    <property name='sse4-1' boolean='yes'/>
>      <property name='family' ull='6'/>
>      <property name='avx512f' boolean='no'/>
> +    <property name='xcrypt' boolean='no'/>
> +    <property name='hv-runtime' boolean='no'/>
>      <property name='msr' boolean='yes'/>
>      <property name='mce' boolean='yes'/>
>      <property name='mca' boolean='yes'/>
> -    <property name='xcrypt' boolean='no'/>
> +    <property name='thread-id' ull='18446744073709551615'/>
>      <property name='min-level' ull='13'/>
>      <property name='xgetbv1' boolean='yes'/>
>      <property name='cid' boolean='no'/>
> -    <property name='ds' boolean='no'/>
> +    <property name='hv-relaxed' boolean='no'/>
>      <property name='fxsr' boolean='yes'/>
> +    <property name='ds' boolean='no'/>
> +    <property name='hv-crash' boolean='no'/>
>      <property name='xsaveopt' boolean='yes'/>
>      <property name='xtpr' boolean='no'/>
> -    <property name='avx512vl' boolean='no'/>
>      <property name='avx512-vpopcntdq' boolean='no'/>
>      <property name='phe' boolean='no'/>
> +    <property name='avx512vl' boolean='no'/>
>      <property name='extapic' boolean='no'/>
>      <property name='3dnowprefetch' boolean='yes'/>
>      <property name='cr8legacy' boolean='no'/>
> +    <property name='cpuid-0xb' boolean='yes'/>
>      <property name='xcrypt-en' boolean='no'/>
> +    <property name='kvm_pv_eoi' boolean='yes'/>
> +    <property name='apic-id' ull='4294967295'/>
>      <property name='pn' boolean='no'/>
>      <property name='dca' boolean='no'/>
>      <property name='vendor' string='GenuineIntel'/>
>      <property name='pku' boolean='no'/>
>      <property name='smx' boolean='no'/>
>      <property name='cmp-legacy' boolean='no'/>
> +    <property name='cmp_legacy' boolean='no'/>
>      <property name='avx512-4fmaps' boolean='no'/>
>      <property name='vmcb-clean' boolean='no'/>
> -    <property name='hle' boolean='yes'/>
> +    <property name='vmcb_clean' boolean='no'/>
>      <property name='3dnowext' boolean='no'/>
> +    <property name='hle' boolean='yes'/>
>      <property name='npt' boolean='no'/>
> +    <property name='memory' string='/machine/unattached/system[0]'/>
>      <property name='clwb' boolean='no'/>
>      <property name='lbrv' boolean='no'/>
>      <property name='adx' boolean='yes'/>
>      <property name='ss' boolean='yes'/>
>      <property name='pni' boolean='yes'/>
> +    <property name='svm_lock' boolean='no'/>
>      <property name='svm-lock' boolean='no'/>
>      <property name='smep' boolean='yes'/>
> -    <property name='smap' boolean='yes'/>
>      <property name='pfthreshold' boolean='no'/>
> +    <property name='smap' boolean='yes'/>
>      <property name='x2apic' boolean='yes'/>
>      <property name='avx512vbmi' boolean='no'/>
> +    <property name='hv-stimer' boolean='no'/>
> +    <property name='i64' boolean='yes'/>
>      <property name='flushbyasid' boolean='no'/>
>      <property name='f16c' boolean='yes'/>
>      <property name='ace2-en' boolean='no'/>
> -    <property name='pae' boolean='yes'/>
>      <property name='pat' boolean='yes'/>
> +    <property name='pae' boolean='yes'/>
>      <property name='sse' boolean='yes'/>
>      <property name='phe-en' boolean='no'/>
>      <property name='kvm-nopiodelay' boolean='yes'/>
> +    <property name='kvm_nopiodelay' boolean='yes'/>
>      <property name='tm' boolean='no'/>
>      <property name='kvmclock-stable-bit' boolean='yes'/>
>      <property name='hypervisor' boolean='yes'/>
> +    <property name='socket-id' ull='18446744073709551615'/>
>      <property name='pcommit' boolean='no'/>
>      <property name='syscall' boolean='yes'/>
> +    <property name='level' ull='13'/>
>      <property name='avx512dq' boolean='no'/>
>      <property name='svm' boolean='no'/>
> +    <property name='full-cpuid-auto-level' boolean='yes'/>
> +    <property name='hv-reset' boolean='no'/>
>      <property name='invtsc' boolean='no'/>
> +    <property name='sse3' boolean='yes'/>
>      <property name='sse2' boolean='yes'/>
>      <property name='est' boolean='no'/>
>      <property name='avx512ifma' boolean='no'/>
> @@ -287,44 +316,61 @@
>      <property name='kvm-pv-eoi' boolean='yes'/>
>      <property name='cx8' boolean='yes'/>
>      <property name='kvm-mmu' boolean='no'/>
> +    <property name='kvm_mmu' boolean='no'/>
> +    <property name='sse4_2' boolean='yes'/>
>      <property name='sse4.2' boolean='yes'/>
> +    <property name='sse4-2' boolean='yes'/>
>      <property name='pge' boolean='yes'/>
> +    <property name='fill-mtrr-mask' boolean='yes'/>
>      <property name='pdcm' boolean='no'/>
> +    <property name='nodeid_msr' boolean='no'/>
>      <property name='model' ull='94'/>
>      <property name='movbe' boolean='yes'/>
>      <property name='nrip-save' boolean='no'/>
> -    <property name='ssse3' boolean='yes'/>
> +    <property name='nrip_save' boolean='no'/>
>      <property name='sse4a' boolean='no'/>
> +    <property name='ssse3' boolean='yes'/>
> +    <property name='kvm_pv_unhalt' boolean='yes'/>
>      <property name='invpcid' boolean='yes'/>
>      <property name='pdpe1gb' boolean='yes'/>
>      <property name='tsc-deadline' boolean='yes'/>
>      <property name='fma' boolean='yes'/>
>      <property name='cx16' boolean='yes'/>
>      <property name='de' boolean='yes'/>
> +    <property name='enforce' boolean='no'/>
>      <property name='stepping' ull='3'/>
>      <property name='xsave' boolean='yes'/>
>      <property name='clflush' boolean='yes'/>
>      <property name='skinit' boolean='no'/>
> -    <property name='tsc' boolean='yes'/>
>      <property name='tce' boolean='no'/>
> +    <property name='tsc' boolean='yes'/>
>      <property name='fpu' boolean='yes'/>
>      <property name='ds-cpl' boolean='no'/>
> +    <property name='ds_cpl' boolean='no'/>
>      <property name='ibs' boolean='no'/>
> +    <property name='host-phys-bits' boolean='no'/>
>      <property name='fma4' boolean='no'/>
>      <property name='la57' boolean='no'/>
>      <property name='osvw' boolean='no'/>
> -    <property name='apic' boolean='yes'/>
> +    <property name='check' boolean='yes'/>
>      <property name='pmm' boolean='no'/>
> +    <property name='apic' boolean='yes'/>
> +    <property name='pmu' boolean='no'/>
> +    <property name='min-xlevel2' ull='0'/>
>      <property name='tsc-adjust' boolean='yes'/>
> +    <property name='tsc_adjust' boolean='yes'/>
>      <property name='kvm-steal-time' boolean='yes'/>
> +    <property name='kvm_steal_time' boolean='yes'/>
>      <property name='kvmclock' boolean='yes'/>
> +    <property name='l3-cache' boolean='yes'/>
>      <property name='lwp' boolean='no'/>
>      <property name='xop' boolean='no'/>
>      <property name='avx' boolean='yes'/>
>      <property name='ospke' boolean='no'/>
> +    <property name='ace2' boolean='no'/>
>      <property name='acpi' boolean='no'/>
>      <property name='avx512bw' boolean='no'/>
> -    <property name='ace2' boolean='no'/>
> +    <property name='hv-vapic' boolean='no'/>
>      <property name='fsgsbase' boolean='yes'/>
>      <property name='ht' boolean='no'/>
>      <property name='nx' boolean='yes'/>
> @@ -334,17 +380,23 @@
>      <property name='xsaves' boolean='yes'/>
>      <property name='lm' boolean='yes'/>
>      <property name='umip' boolean='no'/>
> -    <property name='pse' boolean='yes'/>
>      <property name='avx2' boolean='yes'/>
> +    <property name='pse' boolean='yes'/>
>      <property name='sep' boolean='yes'/>
> +    <property name='pclmuldq' boolean='yes'/>
>      <property name='nodeid-msr' boolean='no'/>
> +    <property name='kvm' boolean='yes'/>
>      <property name='misalignsse' boolean='no'/>
>      <property name='min-xlevel' ull='2147483656'/>
> -    <property name='bmi1' boolean='yes'/>
>      <property name='bmi2' boolean='yes'/>
> +    <property name='bmi1' boolean='yes'/>
>      <property name='kvm-pv-unhalt' boolean='yes'/>
> +    <property name='realized' boolean='no'/>
> +    <property name='tsc_scale' boolean='no'/>
>      <property name='tsc-scale' boolean='no'/>
>      <property name='topoext' boolean='no'/>
> +    <property name='hv-vpindex' boolean='no'/>
> +    <property name='xlevel2' ull='0'/>
>      <property name='clflushopt' boolean='yes'/>
>      <property name='monitor' boolean='no'/>
>      <property name='avx512er' boolean='no'/>
> @@ -353,11 +405,17 @@
>      <property name='3dnow' boolean='no'/>
>      <property name='erms' boolean='yes'/>
>      <property name='lahf-lm' boolean='yes'/>
> -    <property name='fxsr-opt' boolean='no'/>
> +    <property name='lahf_lm' boolean='yes'/>
>      <property name='xstore' boolean='no'/>
> +    <property name='hv-synic' boolean='no'/>
> +    <property name='fxsr-opt' boolean='no'/>
> +    <property name='fxsr_opt' boolean='no'/>
>      <property name='rtm' boolean='yes'/>
>      <property name='lmce' boolean='yes'/>
> +    <property name='hv-time' boolean='no'/>
>      <property name='perfctr-nb' boolean='no'/>
> +    <property name='perfctr_nb' boolean='no'/>
> +    <property name='ffxsr' boolean='no'/>
>      <property name='rdrand' boolean='yes'/>
>      <property name='rdseed' boolean='yes'/>
>      <property name='avx512-4vnniw' boolean='no'/>
> @@ -369,6 +427,7 @@
>      <property name='pse36' boolean='yes'/>
>      <property name='tbm' boolean='no'/>
>      <property name='wdt' boolean='no'/>
> +    <property name='pause_filter' boolean='no'/>
>      <property name='model-id' string='Intel(R) Xeon(R) CPU E3-1245 v5 @ 3.50GHz'/>
>      <property name='sha-ni' boolean='no'/>
>      <property name='abm' boolean='yes'/>
> @@ -376,80 +435,109 @@
>      <property name='xstore-en' boolean='no'/>
>    </hostCPU>
>    <hostCPU type='tcg' model='base'>
> +    <property name='phys-bits' ull='0'/>
> +    <property name='core-id' ull='18446744073709551615'/>
> +    <property name='xlevel' ull='2147483658'/>
>      <property name='cmov' boolean='yes'/>
>      <property name='ia64' boolean='no'/>
>      <property name='aes' boolean='yes'/>
>      <property name='mmx' boolean='yes'/>
> -    <property name='rdpid' boolean='no'/>
>      <property name='arat' boolean='yes'/>
> +    <property name='rdpid' boolean='no'/>
>      <property name='pause-filter' boolean='no'/>
>      <property name='xsavec' boolean='no'/>
>      <property name='osxsave' boolean='no'/>
> +    <property name='tsc-frequency' ull='0'/>
> +    <property name='xd' boolean='yes'/>
> +    <property name='hv-vendor-id' string=''/>
>      <property name='kvm-asyncpf' boolean='no'/>
> +    <property name='kvm_asyncpf' boolean='no'/>
> +    <property name='perfctr_core' boolean='no'/>
>      <property name='perfctr-core' boolean='no'/>
>      <property name='mpx' boolean='yes'/>
> -    <property name='pbe' boolean='no'/>
>      <property name='avx512cd' boolean='no'/>
>      <property name='decodeassists' boolean='no'/>
> +    <property name='pbe' boolean='no'/>
> +    <property name='sse4_1' boolean='yes'/>
>      <property name='sse4.1' boolean='yes'/>
> +    <property name='sse4-1' boolean='yes'/>
>      <property name='family' ull='6'/>
>      <property name='avx512f' boolean='no'/>
> +    <property name='xcrypt' boolean='no'/>
> +    <property name='hv-runtime' boolean='no'/>
>      <property name='msr' boolean='yes'/>
>      <property name='mce' boolean='yes'/>
>      <property name='mca' boolean='yes'/>
> -    <property name='xcrypt' boolean='no'/>
> +    <property name='thread-id' ull='18446744073709551615'/>
>      <property name='min-level' ull='13'/>
>      <property name='xgetbv1' boolean='yes'/>
>      <property name='cid' boolean='no'/>
> -    <property name='ds' boolean='no'/>
> +    <property name='hv-relaxed' boolean='no'/>
>      <property name='fxsr' boolean='yes'/>
> +    <property name='ds' boolean='no'/>
> +    <property name='hv-crash' boolean='no'/>
>      <property name='xsaveopt' boolean='yes'/>
>      <property name='xtpr' boolean='no'/>
> -    <property name='avx512vl' boolean='no'/>
>      <property name='avx512-vpopcntdq' boolean='no'/>
>      <property name='phe' boolean='no'/>
> +    <property name='avx512vl' boolean='no'/>
>      <property name='extapic' boolean='no'/>
>      <property name='3dnowprefetch' boolean='no'/>
>      <property name='cr8legacy' boolean='yes'/>
> +    <property name='cpuid-0xb' boolean='yes'/>
>      <property name='xcrypt-en' boolean='no'/>
> +    <property name='kvm_pv_eoi' boolean='no'/>
> +    <property name='apic-id' ull='4294967295'/>
>      <property name='pn' boolean='no'/>
>      <property name='dca' boolean='no'/>
>      <property name='vendor' string='AuthenticAMD'/>
>      <property name='pku' boolean='yes'/>
>      <property name='smx' boolean='no'/>
>      <property name='cmp-legacy' boolean='no'/>
> +    <property name='cmp_legacy' boolean='no'/>
>      <property name='avx512-4fmaps' boolean='no'/>
>      <property name='vmcb-clean' boolean='no'/>
> -    <property name='hle' boolean='no'/>
> +    <property name='vmcb_clean' boolean='no'/>
>      <property name='3dnowext' boolean='yes'/>
> +    <property name='hle' boolean='no'/>
>      <property name='npt' boolean='no'/>
> +    <property name='memory' string='/machine/unattached/system[0]'/>
>      <property name='clwb' boolean='yes'/>
>      <property name='lbrv' boolean='no'/>
>      <property name='adx' boolean='yes'/>
>      <property name='ss' boolean='yes'/>
>      <property name='pni' boolean='yes'/>
> +    <property name='svm_lock' boolean='no'/>
>      <property name='svm-lock' boolean='no'/>
>      <property name='smep' boolean='yes'/>
> -    <property name='smap' boolean='yes'/>
>      <property name='pfthreshold' boolean='no'/>
> +    <property name='smap' boolean='yes'/>
>      <property name='x2apic' boolean='no'/>
>      <property name='avx512vbmi' boolean='no'/>
> +    <property name='hv-stimer' boolean='no'/>
> +    <property name='i64' boolean='yes'/>
>      <property name='flushbyasid' boolean='no'/>
>      <property name='f16c' boolean='no'/>
>      <property name='ace2-en' boolean='no'/>
> -    <property name='pae' boolean='yes'/>
>      <property name='pat' boolean='yes'/>
> +    <property name='pae' boolean='yes'/>
>      <property name='sse' boolean='yes'/>
>      <property name='phe-en' boolean='no'/>
>      <property name='kvm-nopiodelay' boolean='no'/>
> +    <property name='kvm_nopiodelay' boolean='no'/>
>      <property name='tm' boolean='no'/>
>      <property name='kvmclock-stable-bit' boolean='no'/>
>      <property name='hypervisor' boolean='yes'/>
> +    <property name='socket-id' ull='18446744073709551615'/>
>      <property name='pcommit' boolean='yes'/>
>      <property name='syscall' boolean='yes'/>
> +    <property name='level' ull='13'/>
>      <property name='avx512dq' boolean='no'/>
>      <property name='svm' boolean='yes'/>
> +    <property name='full-cpuid-auto-level' boolean='yes'/>
> +    <property name='hv-reset' boolean='no'/>
>      <property name='invtsc' boolean='no'/>
> +    <property name='sse3' boolean='yes'/>
>      <property name='sse2' boolean='yes'/>
>      <property name='est' boolean='no'/>
>      <property name='avx512ifma' boolean='no'/>
> @@ -457,44 +545,61 @@
>      <property name='kvm-pv-eoi' boolean='no'/>
>      <property name='cx8' boolean='yes'/>
>      <property name='kvm-mmu' boolean='no'/>
> +    <property name='kvm_mmu' boolean='no'/>
> +    <property name='sse4_2' boolean='yes'/>
>      <property name='sse4.2' boolean='yes'/>
> +    <property name='sse4-2' boolean='yes'/>
>      <property name='pge' boolean='yes'/>
> +    <property name='fill-mtrr-mask' boolean='yes'/>
>      <property name='pdcm' boolean='no'/>
> +    <property name='nodeid_msr' boolean='no'/>
>      <property name='model' ull='6'/>
>      <property name='movbe' boolean='yes'/>
>      <property name='nrip-save' boolean='no'/>
> -    <property name='ssse3' boolean='yes'/>
> +    <property name='nrip_save' boolean='no'/>
>      <property name='sse4a' boolean='yes'/>
> +    <property name='ssse3' boolean='yes'/>
> +    <property name='kvm_pv_unhalt' boolean='no'/>
>      <property name='invpcid' boolean='no'/>
>      <property name='pdpe1gb' boolean='yes'/>
>      <property name='tsc-deadline' boolean='no'/>
>      <property name='fma' boolean='no'/>
>      <property name='cx16' boolean='yes'/>
>      <property name='de' boolean='yes'/>
> +    <property name='enforce' boolean='no'/>
>      <property name='stepping' ull='3'/>
>      <property name='xsave' boolean='yes'/>
>      <property name='clflush' boolean='yes'/>
>      <property name='skinit' boolean='no'/>
> -    <property name='tsc' boolean='yes'/>
>      <property name='tce' boolean='no'/>
> +    <property name='tsc' boolean='yes'/>
>      <property name='fpu' boolean='yes'/>
>      <property name='ds-cpl' boolean='no'/>
> +    <property name='ds_cpl' boolean='no'/>
>      <property name='ibs' boolean='no'/>
> +    <property name='host-phys-bits' boolean='no'/>
>      <property name='fma4' boolean='no'/>
>      <property name='la57' boolean='yes'/>
>      <property name='osvw' boolean='no'/>
> -    <property name='apic' boolean='yes'/>
> +    <property name='check' boolean='yes'/>
>      <property name='pmm' boolean='no'/>
> +    <property name='apic' boolean='yes'/>
> +    <property name='pmu' boolean='no'/>
> +    <property name='min-xlevel2' ull='0'/>
>      <property name='tsc-adjust' boolean='no'/>
> +    <property name='tsc_adjust' boolean='no'/>
>      <property name='kvm-steal-time' boolean='no'/>
> +    <property name='kvm_steal_time' boolean='no'/>
>      <property name='kvmclock' boolean='no'/>
> +    <property name='l3-cache' boolean='yes'/>
>      <property name='lwp' boolean='no'/>
>      <property name='xop' boolean='no'/>
>      <property name='avx' boolean='no'/>
>      <property name='ospke' boolean='yes'/>
> +    <property name='ace2' boolean='no'/>
>      <property name='acpi' boolean='yes'/>
>      <property name='avx512bw' boolean='no'/>
> -    <property name='ace2' boolean='no'/>
> +    <property name='hv-vapic' boolean='no'/>
>      <property name='fsgsbase' boolean='yes'/>
>      <property name='ht' boolean='no'/>
>      <property name='nx' boolean='yes'/>
> @@ -504,17 +609,23 @@
>      <property name='xsaves' boolean='no'/>
>      <property name='lm' boolean='yes'/>
>      <property name='umip' boolean='no'/>
> -    <property name='pse' boolean='yes'/>
>      <property name='avx2' boolean='no'/>
> +    <property name='pse' boolean='yes'/>
>      <property name='sep' boolean='yes'/>
> +    <property name='pclmuldq' boolean='yes'/>
>      <property name='nodeid-msr' boolean='no'/>
> +    <property name='kvm' boolean='yes'/>
>      <property name='misalignsse' boolean='no'/>
>      <property name='min-xlevel' ull='2147483658'/>
> -    <property name='bmi1' boolean='yes'/>
>      <property name='bmi2' boolean='yes'/>
> +    <property name='bmi1' boolean='yes'/>
>      <property name='kvm-pv-unhalt' boolean='no'/>
> +    <property name='realized' boolean='no'/>
> +    <property name='tsc_scale' boolean='no'/>
>      <property name='tsc-scale' boolean='no'/>
>      <property name='topoext' boolean='no'/>
> +    <property name='hv-vpindex' boolean='no'/>
> +    <property name='xlevel2' ull='0'/>
>      <property name='clflushopt' boolean='yes'/>
>      <property name='monitor' boolean='yes'/>
>      <property name='avx512er' boolean='no'/>
> @@ -523,11 +634,17 @@
>      <property name='3dnow' boolean='yes'/>
>      <property name='erms' boolean='yes'/>
>      <property name='lahf-lm' boolean='yes'/>
> -    <property name='fxsr-opt' boolean='no'/>
> +    <property name='lahf_lm' boolean='yes'/>
>      <property name='xstore' boolean='no'/>
> +    <property name='hv-synic' boolean='no'/>
> +    <property name='fxsr-opt' boolean='no'/>
> +    <property name='fxsr_opt' boolean='no'/>
>      <property name='rtm' boolean='no'/>
>      <property name='lmce' boolean='no'/>
> +    <property name='hv-time' boolean='no'/>
>      <property name='perfctr-nb' boolean='no'/>
> +    <property name='perfctr_nb' boolean='no'/>
> +    <property name='ffxsr' boolean='no'/>
>      <property name='rdrand' boolean='no'/>
>      <property name='rdseed' boolean='no'/>
>      <property name='avx512-4vnniw' boolean='no'/>
> @@ -539,6 +656,7 @@
>      <property name='pse36' boolean='yes'/>
>      <property name='tbm' boolean='no'/>
>      <property name='wdt' boolean='no'/>
> +    <property name='pause_filter' boolean='no'/>
>      <property name='model-id' string='QEMU TCG CPU version 2.5+'/>
>      <property name='sha-ni' boolean='no'/>
>      <property name='abm' boolean='yes'/>
> 

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v2 24/33] qemu: Use full CPU model expansion on x86
Posted by Jiri Denemark 8 years, 11 months ago
On Tue, Feb 21, 2017 at 23:11:54 -0500, John Ferlan wrote:
> 
> 
> On 02/15/2017 11:44 AM, Jiri Denemark wrote:
> > The static CPU model expansion is designed to return only canonical
> > names of all CPU properties. TO maintain backward compatibility libvirt
> 
> s/TO/To
> 
> > is stuck with different spelling of some of the features, which is only
> > returned by the full expansion. But in addition to returned all spelling
> 
> s/returned/returning
> 
> > variants for all properties the full expansion will contain properties
> > which are not guaranteed to be migration compatible. We need to combine
> > both expansions. First we need to call the static expansion to limit the
> > result to migratable properties. Then we can use the result of the
> > static expansion as an input to the full expansion to get both canonical
> > names and their aliases.
...
> > diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
> > index dd7907482..0454571c1 100644
> > --- a/src/qemu/qemu_monitor_json.c
> > +++ b/src/qemu/qemu_monitor_json.c
> > @@ -5026,7 +5026,7 @@ qemuMonitorJSONGetCPUModelExpansion(qemuMonitorPtr mon,
> >                                      qemuMonitorCPUModelInfoPtr *model_info)
> >  {
> >      int ret = -1;
> > -    virJSONValuePtr model;
> > +    virJSONValuePtr model = NULL;
> >      virJSONValuePtr cmd = NULL;
> >      virJSONValuePtr reply = NULL;
> >      virJSONValuePtr data;
> > @@ -5038,16 +5038,24 @@ qemuMonitorJSONGetCPUModelExpansion(qemuMonitorPtr mon,
> >  
> >      *model_info = NULL;
> >  
> > -    if (!(model = virJSONValueNewObject()))
> > -        goto cleanup;
> > + retry:
> > +    if (!model) {
> > +        if (!(model = virJSONValueNewObject()))
> > +            goto cleanup;
> >  
> > -    if (virJSONValueObjectAppendString(model, "name", model_name) < 0)
> > -        goto cleanup;
> > +        if (virJSONValueObjectAppendString(model, "name", model_name) < 0)
> > +            goto cleanup;
> > +    }
> >  
> >      switch (type) {
> >      case QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC:
> > +    case QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC_FULL:
> >          typeStr = "static";
> >          break;
> > +
> > +    case QEMU_MONITOR_CPU_MODEL_EXPANSION_FULL:
> > +        typeStr = "full";
> > +        break;
> >      }
> >  
> >      if (!(cmd = qemuMonitorJSONMakeCommand("query-cpu-model-expansion",
> > @@ -5084,6 +5092,16 @@ qemuMonitorJSONGetCPUModelExpansion(qemuMonitorPtr mon,
> >          goto cleanup;
> >      }
> >  
> > +    if (type == QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC_FULL) {
> > +        if (!(model = virJSONValueCopy(cpu_model)))
> > +            goto cleanup;
> > +
> > +        virJSONValueFree(cmd);
> > +        virJSONValueFree(reply);
> > +        type = QEMU_MONITOR_CPU_MODEL_EXPANSION_FULL;
> > +        goto retry;
> 
> When you get here, model must be set.. The retry label tests for not
> set, which cannot be true - so why would the retry label be on the
> switch statement?  If it did move, then the move of the AppendString
> inside the "if" wouldn't be necessary.

Sure, no idea what I was thinking about :-)

> > +    }
> > +
> 
> This just seems odd - it's not really a retry, it's like piling on. To
> me retry is like trying again because something failed. In this case you
> get static, but then add on the full afterwards. I don't have a better
> suggestion for a label name.

I used "retry" since it's a common name for backward jumps. Anyway I
think a small comment explaining why we are jumping back will help...

Jirka

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