[libvirt] [PATCH 0/3 for 3.2.0] Fix host-model CPU with non-migratable features

This series fixes a regression in libvirt which would break domains with a CPU defined as, for example: <cpu mode='host-model'> <feature name='invtsc' policy='require'/> </cpu> Such domains would work just fine with libvirt <= 3.1.0 or QEMU < 2.9.0, but they would be broken with current libvirt and QEMU >= 2.9.0. This is because we started asking QEMU for CPU features supported by the host CPU, by which we think all non-migratable features are not supported because QEMU filters them out by default. This series changes our code to properly detect even non-migratable features, but still leaves the piece which relies on our cpu_map.xml to filter them when someone asks for just <cpu mode='host-model'/>. Patches which will use the data provided by QEMU instead of our static database in cpu_map.xml will be sent soon, since they are not required to fix the regression. Jiri Denemark (3): qemuMonitorCPUModelInfo: Add support for non-migratable features qemu: Check migratable host CPU features qemu: Check non-migratable host CPU features src/qemu/qemu_capabilities.c | 96 ++- src/qemu/qemu_monitor.c | 9 +- src/qemu/qemu_monitor.h | 3 + src/qemu/qemu_monitor_json.c | 11 + src/qemu/qemu_monitor_json.h | 3 +- tests/cputest.c | 2 +- tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml | 1 + .../qemucapabilitiesdata/caps_2.8.0.s390x.replies | 8 + tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml | 2 +- .../qemucapabilitiesdata/caps_2.9.0.x86_64.replies | 840 +++++++++++++++++++++ tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml | 368 ++++----- 11 files changed, 1148 insertions(+), 195 deletions(-) -- 2.12.2

QEMU is able to tell us whether a CPU feature would block migration or not. This patch adds support for storing such features in qemuMonitorCPUModelInfo. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- src/qemu/qemu_capabilities.c | 39 +++++++++++++++++++++--- src/qemu/qemu_monitor.c | 2 ++ src/qemu/qemu_monitor.h | 2 ++ tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml | 2 +- tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml | 4 +-- 5 files changed, 41 insertions(+), 8 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index f51141b99..446c15f92 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -3272,6 +3272,7 @@ virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, int ret = -1; size_t i; int n; + int val; if (virtType == VIR_DOMAIN_VIRT_KVM) hostCPUNode = virXPathNode("./hostCPU[@type='kvm']", ctxt); @@ -3293,6 +3294,15 @@ virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, goto cleanup; } + if (!(str = virXMLPropString(hostCPUNode, "migratability")) || + (val = virTristateBoolTypeFromString(str)) <= 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("invalid migratability value for host CPU model")); + goto cleanup; + } + hostCPU->migratability = val == VIR_TRISTATE_BOOL_YES; + VIR_FREE(str); + ctxt->node = hostCPUNode; if ((n = virXPathNodeSet("./property", ctxt, &nodes)) > 0) { @@ -3303,7 +3313,6 @@ virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, for (i = 0; i < n; i++) { qemuMonitorCPUPropertyPtr prop = hostCPU->props + i; - int type; ctxt->node = nodes[i]; @@ -3315,7 +3324,7 @@ virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, } if (!(str = virXMLPropString(ctxt->node, "type")) || - (type = qemuMonitorCPUPropertyTypeFromString(str)) < 0) { + (val = qemuMonitorCPUPropertyTypeFromString(str)) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("missing or invalid CPU model property type " "in QEMU capabilities cache")); @@ -3323,7 +3332,7 @@ virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, } VIR_FREE(str); - prop->type = type; + prop->type = val; switch (prop->type) { case QEMU_MONITOR_CPU_PROPERTY_BOOLEAN: if (virXPathBoolean("./@value='true'", ctxt)) @@ -3355,6 +3364,19 @@ virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, case QEMU_MONITOR_CPU_PROPERTY_LAST: break; } + + if ((str = virXMLPropString(ctxt->node, "migratable"))) { + if ((val = virTristateBoolTypeFromString(str)) <= 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("unknown migratable value for '%s' host " + "CPU model property"), + prop->name); + goto cleanup; + } + + prop->migratable = val; + VIR_FREE(str); + } } } @@ -3707,8 +3729,10 @@ virQEMUCapsFormatHostCPUModelInfo(virQEMUCapsPtr qemuCaps, if (!model) return; - virBufferAsprintf(buf, "<hostCPU type='%s' model='%s'>\n", - typeStr, model->name); + virBufferAsprintf(buf, + "<hostCPU type='%s' model='%s' migratability='%s'>\n", + typeStr, model->name, + model->migratability ? "yes" : "no"); virBufferAdjustIndent(buf, 2); for (i = 0; i < model->nprops; i++) { @@ -3735,6 +3759,11 @@ virQEMUCapsFormatHostCPUModelInfo(virQEMUCapsPtr qemuCaps, case QEMU_MONITOR_CPU_PROPERTY_LAST: break; } + + if (prop->migratable > 0) + virBufferAsprintf(buf, " migratable='%s'", + virTristateBoolTypeToString(prop->migratable)); + virBufferAddLit(buf, "/>\n"); } diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 78d9cb752..e9ba5fdea 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -3747,12 +3747,14 @@ qemuMonitorCPUModelInfoCopy(const qemuMonitorCPUModelInfo *orig) if (VIR_STRDUP(copy->name, orig->name) < 0) goto error; + copy->migratability = orig->migratability; copy->nprops = orig->nprops; for (i = 0; i < orig->nprops; i++) { if (VIR_STRDUP(copy->props[i].name, orig->props[i].name) < 0) goto error; + copy->props[i].migratable = orig->props[i].migratable; copy->props[i].type = orig->props[i].type; switch (orig->props[i].type) { case QEMU_MONITOR_CPU_PROPERTY_BOOLEAN: diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 87a1496cf..332652178 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -992,6 +992,7 @@ struct _qemuMonitorCPUProperty { char *string; long long number; } value; + virTristateBool migratable; }; typedef struct _qemuMonitorCPUModelInfo qemuMonitorCPUModelInfo; @@ -1001,6 +1002,7 @@ struct _qemuMonitorCPUModelInfo { char *name; size_t nprops; qemuMonitorCPUPropertyPtr props; + bool migratability; }; typedef enum { diff --git a/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml index d49f0fbd1..42c92c567 100644 --- a/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml +++ b/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml @@ -136,7 +136,7 @@ <kvmVersion>0</kvmVersion> <package></package> <arch>s390x</arch> - <hostCPU type='kvm' model='zEC12.2-base'> + <hostCPU type='kvm' model='zEC12.2-base' migratability='no'> <property name='aefsi' type='boolean' value='true'/> <property name='msa5' type='boolean' value='true'/> <property name='msa4' type='boolean' value='true'/> diff --git a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml index bb5463469..0b14e53e2 100644 --- a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml @@ -211,7 +211,7 @@ <kvmVersion>0</kvmVersion> <package> (v2.9.0-rc0-142-g940a8ce)</package> <arch>x86_64</arch> - <hostCPU type='kvm' model='base'> + <hostCPU type='kvm' model='base' migratability='no'> <property name='phys-bits' type='number' value='0'/> <property name='core-id' type='number' value='-1'/> <property name='xlevel' type='number' value='2147483656'/> @@ -443,7 +443,7 @@ <property name='avx512pf' type='boolean' value='false'/> <property name='xstore-en' type='boolean' value='false'/> </hostCPU> - <hostCPU type='tcg' model='base'> + <hostCPU type='tcg' model='base' migratability='no'> <property name='phys-bits' type='number' value='0'/> <property name='core-id' type='number' value='-1'/> <property name='xlevel' type='number' value='2147483658'/> -- 2.12.2

If calling query-cpu-model-expansion on the 'host'/'max' CPU model with 'migratable' property set to false succeeds, we know QEMU is able to tell us which features would disable migration. Thus we can mark all enabled features as migratable. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- src/qemu/qemu_capabilities.c | 53 +- src/qemu/qemu_monitor.c | 7 +- src/qemu/qemu_monitor.h | 1 + src/qemu/qemu_monitor_json.c | 11 + src/qemu/qemu_monitor_json.h | 3 +- tests/cputest.c | 2 +- .../qemucapabilitiesdata/caps_2.8.0.s390x.replies | 8 + .../qemucapabilitiesdata/caps_2.9.0.x86_64.replies | 840 +++++++++++++++++++++ tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml | 366 ++++----- 9 files changed, 1103 insertions(+), 188 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 446c15f92..9726bce74 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -2807,8 +2807,11 @@ virQEMUCapsProbeQMPHostCPU(virQEMUCapsPtr qemuCaps, bool tcg) { qemuMonitorCPUModelInfoPtr *modelInfo; + qemuMonitorCPUModelInfoPtr nonMigratable = NULL; + virHashTablePtr hash = NULL; const char *model; qemuMonitorCPUModelExpansionType type; + int ret = -1; if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION)) return 0; @@ -2831,7 +2834,55 @@ virQEMUCapsProbeQMPHostCPU(virQEMUCapsPtr qemuCaps, else type = QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC; - return qemuMonitorGetCPUModelExpansion(mon, type, model, modelInfo); + if (qemuMonitorGetCPUModelExpansion(mon, type, model, true, modelInfo) < 0) + return -1; + + /* Try to check migratability of each feature. */ + if (*modelInfo && + qemuMonitorGetCPUModelExpansion(mon, type, model, false, + &nonMigratable) < 0) + goto error; + + if (nonMigratable) { + qemuMonitorCPUPropertyPtr prop; + qemuMonitorCPUPropertyPtr nmProp; + size_t i; + + if (!(hash = virHashCreate(0, NULL))) + goto error; + + for (i = 0; i < (*modelInfo)->nprops; i++) { + prop = (*modelInfo)->props + i; + if (virHashAddEntry(hash, prop->name, prop) < 0) + goto error; + } + + for (i = 0; i < nonMigratable->nprops; i++) { + nmProp = nonMigratable->props + i; + if (!(prop = virHashLookup(hash, nmProp->name)) || + prop->type != QEMU_MONITOR_CPU_PROPERTY_BOOLEAN || + prop->type != nmProp->type) + continue; + + if (prop->value.boolean) + prop->migratable = VIR_TRISTATE_BOOL_YES; + } + + (*modelInfo)->migratability = true; + } + + ret = 0; + + cleanup: + virHashFree(hash); + qemuMonitorCPUModelInfoFree(nonMigratable); + + return ret; + + error: + qemuMonitorCPUModelInfoFree(*modelInfo); + *modelInfo = NULL; + goto cleanup; } struct tpmTypeToCaps { diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index e9ba5fdea..a4fa6eca6 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -3702,13 +3702,16 @@ int qemuMonitorGetCPUModelExpansion(qemuMonitorPtr mon, qemuMonitorCPUModelExpansionType type, const char *model_name, + bool migratable, qemuMonitorCPUModelInfoPtr *model_info) { - VIR_DEBUG("type=%d model_name=%s", type, model_name); + VIR_DEBUG("type=%d model_name=%s migratable=%d", + type, model_name, migratable); QEMU_CHECK_MONITOR_JSON(mon); - return qemuMonitorJSONGetCPUModelExpansion(mon, type, model_name, model_info); + return qemuMonitorJSONGetCPUModelExpansion(mon, type, model_name, + migratable, model_info); } diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 332652178..91ab9057e 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -1014,6 +1014,7 @@ typedef enum { int qemuMonitorGetCPUModelExpansion(qemuMonitorPtr mon, qemuMonitorCPUModelExpansionType type, const char *model_name, + bool migratable, qemuMonitorCPUModelInfoPtr *model_info); void qemuMonitorCPUModelInfoFree(qemuMonitorCPUModelInfoPtr model_info); diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index b86d4d8e3..aeb777d37 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -5133,10 +5133,12 @@ int qemuMonitorJSONGetCPUModelExpansion(qemuMonitorPtr mon, qemuMonitorCPUModelExpansionType type, const char *model_name, + bool migratable, qemuMonitorCPUModelInfoPtr *model_info) { int ret = -1; virJSONValuePtr model = NULL; + virJSONValuePtr props = NULL; virJSONValuePtr cmd = NULL; virJSONValuePtr reply = NULL; virJSONValuePtr data; @@ -5154,6 +5156,14 @@ qemuMonitorJSONGetCPUModelExpansion(qemuMonitorPtr mon, if (virJSONValueObjectAppendString(model, "name", model_name) < 0) goto cleanup; + if (!migratable) { + if (!(props = virJSONValueNewObject()) || + virJSONValueObjectAppendBoolean(props, "migratable", false) < 0 || + virJSONValueObjectAppend(model, "props", props) < 0) + goto cleanup; + props = NULL; + } + retry: switch (type) { case QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC: @@ -5248,6 +5258,7 @@ qemuMonitorJSONGetCPUModelExpansion(qemuMonitorPtr mon, virJSONValueFree(cmd); virJSONValueFree(reply); virJSONValueFree(model); + virJSONValueFree(props); return ret; } diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h index 9495efd03..d090d5709 100644 --- a/src/qemu/qemu_monitor_json.h +++ b/src/qemu/qemu_monitor_json.h @@ -356,8 +356,9 @@ int qemuMonitorJSONGetCPUDefinitions(qemuMonitorPtr mon, int qemuMonitorJSONGetCPUModelExpansion(qemuMonitorPtr mon, qemuMonitorCPUModelExpansionType type, const char *model_name, + bool migratable, qemuMonitorCPUModelInfoPtr *model_info) - ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4); + ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(5); int qemuMonitorJSONGetCommands(qemuMonitorPtr mon, char ***commands) diff --git a/tests/cputest.c b/tests/cputest.c index 98f66237b..3d3e43f16 100644 --- a/tests/cputest.c +++ b/tests/cputest.c @@ -691,7 +691,7 @@ cpuTestJSONCPUID(const void *arg) if (qemuMonitorGetCPUModelExpansion(qemuMonitorTestGetMonitor(testMon), QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC, - "host", &model) < 0) + "host", true, &model) < 0) goto cleanup; if (!(qemuCaps = virQEMUCapsNew())) diff --git a/tests/qemucapabilitiesdata/caps_2.8.0.s390x.replies b/tests/qemucapabilitiesdata/caps_2.8.0.s390x.replies index c3cbeee0a..ae214aa7b 100644 --- a/tests/qemucapabilitiesdata/caps_2.8.0.s390x.replies +++ b/tests/qemucapabilitiesdata/caps_2.8.0.s390x.replies @@ -13048,6 +13048,14 @@ } { + "id": "libvirt-49", + "error": { + "class": "GenericError", + "desc": "Property '.migratable' not found" + } +} + +{ "return": { }, "id": "libvirt-1" diff --git a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.replies b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.replies index b6fd75090..bae24750c 100644 --- a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.replies @@ -15313,6 +15313,426 @@ { "return": { + "model": { + "name": "base", + "props": { + "cmov": true, + "ia64": false, + "aes": true, + "mmx": true, + "rdpid": false, + "arat": true, + "pause-filter": false, + "xsavec": true, + "osxsave": false, + "kvm-asyncpf": true, + "perfctr-core": false, + "mpx": true, + "pbe": false, + "avx512cd": false, + "decodeassists": false, + "sse4.1": true, + "family": 6, + "avx512f": false, + "msr": true, + "mce": true, + "mca": true, + "xcrypt": false, + "min-level": 13, + "xgetbv1": true, + "cid": false, + "ds": false, + "fxsr": true, + "xsaveopt": true, + "xtpr": false, + "avx512vl": false, + "avx512-vpopcntdq": false, + "phe": false, + "extapic": false, + "3dnowprefetch": true, + "cr8legacy": false, + "xcrypt-en": false, + "pn": false, + "dca": false, + "vendor": "GenuineIntel", + "pku": false, + "smx": false, + "cmp-legacy": false, + "avx512-4fmaps": false, + "vmcb-clean": false, + "hle": true, + "3dnowext": false, + "npt": false, + "clwb": false, + "lbrv": false, + "adx": true, + "ss": true, + "pni": true, + "svm-lock": false, + "smep": true, + "smap": true, + "pfthreshold": false, + "x2apic": true, + "avx512vbmi": false, + "flushbyasid": false, + "f16c": true, + "ace2-en": false, + "pae": true, + "pat": true, + "sse": true, + "phe-en": false, + "kvm-nopiodelay": true, + "tm": false, + "kvmclock-stable-bit": true, + "hypervisor": true, + "pcommit": false, + "syscall": true, + "avx512dq": false, + "svm": false, + "invtsc": true, + "sse2": true, + "est": false, + "avx512ifma": false, + "tm2": false, + "kvm-pv-eoi": true, + "cx8": true, + "kvm-mmu": false, + "sse4.2": true, + "pge": true, + "pdcm": false, + "model": 94, + "movbe": true, + "nrip-save": false, + "ssse3": true, + "sse4a": false, + "invpcid": true, + "pdpe1gb": true, + "tsc-deadline": true, + "fma": true, + "cx16": true, + "de": true, + "stepping": 3, + "xsave": true, + "clflush": true, + "skinit": false, + "tsc": true, + "tce": false, + "fpu": true, + "ds-cpl": false, + "ibs": false, + "fma4": false, + "la57": false, + "osvw": false, + "apic": true, + "pmm": false, + "tsc-adjust": true, + "kvm-steal-time": true, + "kvmclock": true, + "lwp": false, + "xop": false, + "avx": true, + "ospke": false, + "acpi": false, + "avx512bw": false, + "ace2": false, + "fsgsbase": true, + "ht": false, + "nx": true, + "pclmulqdq": true, + "mmxext": false, + "popcnt": true, + "xsaves": true, + "lm": true, + "umip": false, + "pse": true, + "avx2": true, + "sep": true, + "nodeid-msr": false, + "misalignsse": false, + "min-xlevel": 2147483656, + "bmi1": true, + "bmi2": true, + "kvm-pv-unhalt": true, + "tsc-scale": false, + "topoext": false, + "clflushopt": true, + "monitor": false, + "avx512er": false, + "pmm-en": false, + "pcid": true, + "3dnow": false, + "erms": true, + "lahf-lm": true, + "fxsr-opt": false, + "xstore": false, + "rtm": true, + "lmce": true, + "perfctr-nb": false, + "rdrand": true, + "rdseed": true, + "avx512-4vnniw": false, + "vme": true, + "vmx": true, + "dtes64": false, + "mtrr": true, + "rdtscp": true, + "pse36": true, + "tbm": false, + "wdt": 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-50" +} + +{ + "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, + "vmware-cpuid-freq": true, + "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": true, + "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, + "hv-spinlocks": -1, + "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, + "kvm-no-smi-migration": false, + "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-51" +} + +{ + "return": { }, "id": "libvirt-1" } @@ -16081,3 +16501,423 @@ }, "id": "libvirt-4" } + +{ + "return": { + "model": { + "name": "base", + "props": { + "cmov": true, + "ia64": false, + "aes": true, + "mmx": true, + "rdpid": false, + "arat": true, + "pause-filter": false, + "xsavec": false, + "osxsave": false, + "kvm-asyncpf": false, + "perfctr-core": false, + "mpx": true, + "pbe": false, + "avx512cd": false, + "decodeassists": false, + "sse4.1": true, + "family": 6, + "avx512f": false, + "msr": true, + "mce": true, + "mca": true, + "xcrypt": false, + "min-level": 13, + "xgetbv1": true, + "cid": false, + "ds": false, + "fxsr": true, + "xsaveopt": true, + "xtpr": false, + "avx512vl": false, + "avx512-vpopcntdq": false, + "phe": false, + "extapic": false, + "3dnowprefetch": false, + "cr8legacy": true, + "xcrypt-en": false, + "pn": false, + "dca": false, + "vendor": "AuthenticAMD", + "pku": true, + "smx": false, + "cmp-legacy": false, + "avx512-4fmaps": false, + "vmcb-clean": false, + "hle": false, + "3dnowext": true, + "npt": false, + "clwb": true, + "lbrv": false, + "adx": true, + "ss": true, + "pni": true, + "svm-lock": false, + "smep": true, + "smap": true, + "pfthreshold": false, + "x2apic": false, + "avx512vbmi": false, + "flushbyasid": false, + "f16c": false, + "ace2-en": false, + "pae": true, + "pat": true, + "sse": true, + "phe-en": false, + "kvm-nopiodelay": false, + "tm": false, + "kvmclock-stable-bit": false, + "hypervisor": true, + "pcommit": true, + "syscall": true, + "avx512dq": false, + "svm": true, + "invtsc": false, + "sse2": true, + "est": false, + "avx512ifma": false, + "tm2": false, + "kvm-pv-eoi": false, + "cx8": true, + "kvm-mmu": false, + "sse4.2": true, + "pge": true, + "pdcm": false, + "model": 6, + "movbe": true, + "nrip-save": false, + "ssse3": true, + "sse4a": true, + "invpcid": false, + "pdpe1gb": true, + "tsc-deadline": false, + "fma": false, + "cx16": true, + "de": true, + "stepping": 3, + "xsave": true, + "clflush": true, + "skinit": false, + "tsc": true, + "tce": false, + "fpu": true, + "ds-cpl": false, + "ibs": false, + "fma4": false, + "la57": true, + "osvw": false, + "apic": true, + "pmm": false, + "tsc-adjust": false, + "kvm-steal-time": false, + "kvmclock": false, + "lwp": false, + "xop": false, + "avx": false, + "ospke": true, + "acpi": true, + "avx512bw": false, + "ace2": false, + "fsgsbase": true, + "ht": false, + "nx": true, + "pclmulqdq": true, + "mmxext": true, + "popcnt": true, + "xsaves": false, + "lm": true, + "umip": false, + "pse": true, + "avx2": false, + "sep": true, + "nodeid-msr": false, + "misalignsse": false, + "min-xlevel": 2147483658, + "bmi1": true, + "bmi2": true, + "kvm-pv-unhalt": false, + "tsc-scale": false, + "topoext": false, + "clflushopt": true, + "monitor": true, + "avx512er": false, + "pmm-en": false, + "pcid": false, + "3dnow": true, + "erms": true, + "lahf-lm": true, + "fxsr-opt": false, + "xstore": false, + "rtm": false, + "lmce": false, + "perfctr-nb": false, + "rdrand": false, + "rdseed": false, + "avx512-4vnniw": false, + "vme": false, + "vmx": false, + "dtes64": false, + "mtrr": true, + "rdtscp": true, + "pse36": true, + "tbm": false, + "wdt": false, + "model-id": "QEMU TCG CPU version 2.5+", + "sha-ni": false, + "abm": true, + "avx512pf": false, + "xstore-en": false + } + } + }, + "id": "libvirt-5" +} + +{ + "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, + "vmware-cpuid-freq": true, + "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, + "hv-spinlocks": -1, + "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, + "kvm-no-smi-migration": false, + "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-6" +} diff --git a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml index 0b14e53e2..6efa8a668 100644 --- a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml @@ -211,60 +211,60 @@ <kvmVersion>0</kvmVersion> <package> (v2.9.0-rc0-142-g940a8ce)</package> <arch>x86_64</arch> - <hostCPU type='kvm' model='base' migratability='no'> + <hostCPU type='kvm' model='base' migratability='yes'> <property name='phys-bits' type='number' value='0'/> <property name='core-id' type='number' value='-1'/> <property name='xlevel' type='number' value='2147483656'/> - <property name='cmov' type='boolean' value='true'/> + <property name='cmov' type='boolean' value='true' migratable='yes'/> <property name='ia64' type='boolean' value='false'/> - <property name='aes' type='boolean' value='true'/> - <property name='mmx' type='boolean' value='true'/> - <property name='arat' type='boolean' value='true'/> + <property name='aes' type='boolean' value='true' migratable='yes'/> + <property name='mmx' type='boolean' value='true' migratable='yes'/> + <property name='arat' type='boolean' value='true' migratable='yes'/> <property name='rdpid' type='boolean' value='false'/> <property name='pause-filter' type='boolean' value='false'/> - <property name='xsavec' type='boolean' value='true'/> + <property name='xsavec' type='boolean' value='true' migratable='yes'/> <property name='osxsave' type='boolean' value='false'/> <property name='tsc-frequency' type='number' value='0'/> - <property name='xd' type='boolean' value='true'/> + <property name='xd' type='boolean' value='true' migratable='yes'/> <property name='hv-vendor-id' type='string' value=''/> - <property name='kvm-asyncpf' type='boolean' value='true'/> - <property name='kvm_asyncpf' type='boolean' value='true'/> + <property name='kvm-asyncpf' type='boolean' value='true' migratable='yes'/> + <property name='kvm_asyncpf' type='boolean' value='true' migratable='yes'/> <property name='perfctr_core' type='boolean' value='false'/> <property name='perfctr-core' type='boolean' value='false'/> - <property name='mpx' type='boolean' value='true'/> + <property name='mpx' type='boolean' value='true' migratable='yes'/> <property name='avx512cd' type='boolean' value='false'/> <property name='decodeassists' type='boolean' value='false'/> <property name='pbe' type='boolean' value='false'/> - <property name='sse4_1' type='boolean' value='true'/> - <property name='sse4.1' type='boolean' value='true'/> - <property name='sse4-1' type='boolean' value='true'/> + <property name='sse4_1' type='boolean' value='true' migratable='yes'/> + <property name='sse4.1' type='boolean' value='true' migratable='yes'/> + <property name='sse4-1' type='boolean' value='true' migratable='yes'/> <property name='family' type='number' value='6'/> - <property name='vmware-cpuid-freq' type='boolean' value='true'/> + <property name='vmware-cpuid-freq' type='boolean' value='true' migratable='yes'/> <property name='avx512f' type='boolean' value='false'/> <property name='xcrypt' type='boolean' value='false'/> <property name='hv-runtime' type='boolean' value='false'/> - <property name='msr' type='boolean' value='true'/> - <property name='mce' type='boolean' value='true'/> - <property name='mca' type='boolean' value='true'/> + <property name='msr' type='boolean' value='true' migratable='yes'/> + <property name='mce' type='boolean' value='true' migratable='yes'/> + <property name='mca' type='boolean' value='true' migratable='yes'/> <property name='thread-id' type='number' value='-1'/> <property name='min-level' type='number' value='13'/> - <property name='xgetbv1' type='boolean' value='true'/> + <property name='xgetbv1' type='boolean' value='true' migratable='yes'/> <property name='cid' type='boolean' value='false'/> <property name='hv-relaxed' type='boolean' value='false'/> - <property name='fxsr' type='boolean' value='true'/> + <property name='fxsr' type='boolean' value='true' migratable='yes'/> <property name='ds' type='boolean' value='false'/> <property name='hv-crash' type='boolean' value='false'/> - <property name='xsaveopt' type='boolean' value='true'/> + <property name='xsaveopt' type='boolean' value='true' migratable='yes'/> <property name='xtpr' type='boolean' value='false'/> <property name='avx512-vpopcntdq' type='boolean' value='false'/> <property name='phe' type='boolean' value='false'/> <property name='avx512vl' type='boolean' value='false'/> <property name='extapic' type='boolean' value='false'/> - <property name='3dnowprefetch' type='boolean' value='true'/> + <property name='3dnowprefetch' type='boolean' value='true' migratable='yes'/> <property name='cr8legacy' type='boolean' value='false'/> - <property name='cpuid-0xb' type='boolean' value='true'/> + <property name='cpuid-0xb' type='boolean' value='true' migratable='yes'/> <property name='xcrypt-en' type='boolean' value='false'/> - <property name='kvm_pv_eoi' type='boolean' value='true'/> + <property name='kvm_pv_eoi' type='boolean' value='true' migratable='yes'/> <property name='apic-id' type='number' value='4294967295'/> <property name='pn' type='boolean' value='false'/> <property name='dca' type='boolean' value='false'/> @@ -277,81 +277,81 @@ <property name='vmcb-clean' type='boolean' value='false'/> <property name='vmcb_clean' type='boolean' value='false'/> <property name='3dnowext' type='boolean' value='false'/> - <property name='hle' type='boolean' value='true'/> + <property name='hle' type='boolean' value='true' migratable='yes'/> <property name='npt' type='boolean' value='false'/> <property name='memory' type='string' value='/machine/unattached/system[0]'/> <property name='clwb' type='boolean' value='false'/> <property name='lbrv' type='boolean' value='false'/> - <property name='adx' type='boolean' value='true'/> - <property name='ss' type='boolean' value='true'/> - <property name='pni' type='boolean' value='true'/> + <property name='adx' type='boolean' value='true' migratable='yes'/> + <property name='ss' type='boolean' value='true' migratable='yes'/> + <property name='pni' type='boolean' value='true' migratable='yes'/> <property name='svm_lock' type='boolean' value='false'/> <property name='svm-lock' type='boolean' value='false'/> - <property name='smep' type='boolean' value='true'/> + <property name='smep' type='boolean' value='true' migratable='yes'/> <property name='pfthreshold' type='boolean' value='false'/> - <property name='smap' type='boolean' value='true'/> - <property name='x2apic' type='boolean' value='true'/> + <property name='smap' type='boolean' value='true' migratable='yes'/> + <property name='x2apic' type='boolean' value='true' migratable='yes'/> <property name='avx512vbmi' type='boolean' value='false'/> <property name='hv-stimer' type='boolean' value='false'/> - <property name='i64' type='boolean' value='true'/> + <property name='i64' type='boolean' value='true' migratable='yes'/> <property name='flushbyasid' type='boolean' value='false'/> - <property name='f16c' type='boolean' value='true'/> + <property name='f16c' type='boolean' value='true' migratable='yes'/> <property name='ace2-en' type='boolean' value='false'/> - <property name='pat' type='boolean' value='true'/> - <property name='pae' type='boolean' value='true'/> - <property name='sse' type='boolean' value='true'/> + <property name='pat' type='boolean' value='true' migratable='yes'/> + <property name='pae' type='boolean' value='true' migratable='yes'/> + <property name='sse' type='boolean' value='true' migratable='yes'/> <property name='phe-en' type='boolean' value='false'/> - <property name='kvm-nopiodelay' type='boolean' value='true'/> - <property name='kvm_nopiodelay' type='boolean' value='true'/> + <property name='kvm-nopiodelay' type='boolean' value='true' migratable='yes'/> + <property name='kvm_nopiodelay' type='boolean' value='true' migratable='yes'/> <property name='tm' type='boolean' value='false'/> - <property name='kvmclock-stable-bit' type='boolean' value='true'/> - <property name='hypervisor' type='boolean' value='true'/> + <property name='kvmclock-stable-bit' type='boolean' value='true' migratable='yes'/> + <property name='hypervisor' type='boolean' value='true' migratable='yes'/> <property name='socket-id' type='number' value='-1'/> <property name='pcommit' type='boolean' value='false'/> - <property name='syscall' type='boolean' value='true'/> + <property name='syscall' type='boolean' value='true' migratable='yes'/> <property name='level' type='number' value='13'/> <property name='avx512dq' type='boolean' value='false'/> <property name='svm' type='boolean' value='false'/> - <property name='full-cpuid-auto-level' type='boolean' value='true'/> + <property name='full-cpuid-auto-level' type='boolean' value='true' migratable='yes'/> <property name='hv-reset' type='boolean' value='false'/> <property name='invtsc' type='boolean' value='false'/> - <property name='sse3' type='boolean' value='true'/> - <property name='sse2' type='boolean' value='true'/> + <property name='sse3' type='boolean' value='true' migratable='yes'/> + <property name='sse2' type='boolean' value='true' migratable='yes'/> <property name='est' type='boolean' value='false'/> <property name='avx512ifma' type='boolean' value='false'/> <property name='tm2' type='boolean' value='false'/> - <property name='kvm-pv-eoi' type='boolean' value='true'/> - <property name='cx8' type='boolean' value='true'/> + <property name='kvm-pv-eoi' type='boolean' value='true' migratable='yes'/> + <property name='cx8' type='boolean' value='true' migratable='yes'/> <property name='kvm-mmu' type='boolean' value='false'/> <property name='kvm_mmu' type='boolean' value='false'/> - <property name='sse4_2' type='boolean' value='true'/> - <property name='sse4.2' type='boolean' value='true'/> - <property name='sse4-2' type='boolean' value='true'/> - <property name='pge' type='boolean' value='true'/> - <property name='fill-mtrr-mask' type='boolean' value='true'/> + <property name='sse4_2' type='boolean' value='true' migratable='yes'/> + <property name='sse4.2' type='boolean' value='true' migratable='yes'/> + <property name='sse4-2' type='boolean' value='true' migratable='yes'/> + <property name='pge' type='boolean' value='true' migratable='yes'/> + <property name='fill-mtrr-mask' type='boolean' value='true' migratable='yes'/> <property name='pdcm' type='boolean' value='false'/> <property name='nodeid_msr' type='boolean' value='false'/> <property name='model' type='number' value='94'/> - <property name='movbe' type='boolean' value='true'/> + <property name='movbe' type='boolean' value='true' migratable='yes'/> <property name='nrip-save' type='boolean' value='false'/> <property name='nrip_save' type='boolean' value='false'/> <property name='sse4a' type='boolean' value='false'/> - <property name='ssse3' type='boolean' value='true'/> - <property name='kvm_pv_unhalt' type='boolean' value='true'/> - <property name='invpcid' type='boolean' value='true'/> - <property name='pdpe1gb' type='boolean' value='true'/> - <property name='tsc-deadline' type='boolean' value='true'/> - <property name='fma' type='boolean' value='true'/> - <property name='cx16' type='boolean' value='true'/> - <property name='de' type='boolean' value='true'/> + <property name='ssse3' type='boolean' value='true' migratable='yes'/> + <property name='kvm_pv_unhalt' type='boolean' value='true' migratable='yes'/> + <property name='invpcid' type='boolean' value='true' migratable='yes'/> + <property name='pdpe1gb' type='boolean' value='true' migratable='yes'/> + <property name='tsc-deadline' type='boolean' value='true' migratable='yes'/> + <property name='fma' type='boolean' value='true' migratable='yes'/> + <property name='cx16' type='boolean' value='true' migratable='yes'/> + <property name='de' type='boolean' value='true' migratable='yes'/> <property name='enforce' type='boolean' value='false'/> <property name='stepping' type='number' value='3'/> - <property name='xsave' type='boolean' value='true'/> - <property name='clflush' type='boolean' value='true'/> + <property name='xsave' type='boolean' value='true' migratable='yes'/> + <property name='clflush' type='boolean' value='true' migratable='yes'/> <property name='skinit' type='boolean' value='false'/> <property name='tce' type='boolean' value='false'/> - <property name='tsc' type='boolean' value='true'/> - <property name='fpu' type='boolean' value='true'/> + <property name='tsc' type='boolean' value='true' migratable='yes'/> + <property name='fpu' type='boolean' value='true' migratable='yes'/> <property name='ds-cpl' type='boolean' value='false'/> <property name='ds_cpl' type='boolean' value='false'/> <property name='ibs' type='boolean' value='false'/> @@ -359,242 +359,242 @@ <property name='fma4' type='boolean' value='false'/> <property name='la57' type='boolean' value='false'/> <property name='osvw' type='boolean' value='false'/> - <property name='check' type='boolean' value='true'/> + <property name='check' type='boolean' value='true' migratable='yes'/> <property name='hv-spinlocks' type='number' value='-1'/> <property name='pmm' type='boolean' value='false'/> - <property name='apic' type='boolean' value='true'/> + <property name='apic' type='boolean' value='true' migratable='yes'/> <property name='pmu' type='boolean' value='false'/> <property name='min-xlevel2' type='number' value='0'/> - <property name='tsc-adjust' type='boolean' value='true'/> - <property name='tsc_adjust' type='boolean' value='true'/> - <property name='kvm-steal-time' type='boolean' value='true'/> - <property name='kvm_steal_time' type='boolean' value='true'/> - <property name='kvmclock' type='boolean' value='true'/> - <property name='l3-cache' type='boolean' value='true'/> + <property name='tsc-adjust' type='boolean' value='true' migratable='yes'/> + <property name='tsc_adjust' type='boolean' value='true' migratable='yes'/> + <property name='kvm-steal-time' type='boolean' value='true' migratable='yes'/> + <property name='kvm_steal_time' type='boolean' value='true' migratable='yes'/> + <property name='kvmclock' type='boolean' value='true' migratable='yes'/> + <property name='l3-cache' type='boolean' value='true' migratable='yes'/> <property name='lwp' type='boolean' value='false'/> <property name='xop' type='boolean' value='false'/> - <property name='avx' type='boolean' value='true'/> + <property name='avx' type='boolean' value='true' migratable='yes'/> <property name='ospke' type='boolean' value='false'/> <property name='ace2' type='boolean' value='false'/> <property name='acpi' type='boolean' value='false'/> <property name='avx512bw' type='boolean' value='false'/> <property name='hv-vapic' type='boolean' value='false'/> - <property name='fsgsbase' type='boolean' value='true'/> + <property name='fsgsbase' type='boolean' value='true' migratable='yes'/> <property name='ht' type='boolean' value='false'/> - <property name='nx' type='boolean' value='true'/> - <property name='pclmulqdq' type='boolean' value='true'/> + <property name='nx' type='boolean' value='true' migratable='yes'/> + <property name='pclmulqdq' type='boolean' value='true' migratable='yes'/> <property name='mmxext' type='boolean' value='false'/> - <property name='popcnt' type='boolean' value='true'/> - <property name='xsaves' type='boolean' value='true'/> - <property name='lm' type='boolean' value='true'/> + <property name='popcnt' type='boolean' value='true' migratable='yes'/> + <property name='xsaves' type='boolean' value='true' migratable='yes'/> + <property name='lm' type='boolean' value='true' migratable='yes'/> <property name='umip' type='boolean' value='false'/> - <property name='avx2' type='boolean' value='true'/> - <property name='pse' type='boolean' value='true'/> - <property name='sep' type='boolean' value='true'/> - <property name='pclmuldq' type='boolean' value='true'/> + <property name='avx2' type='boolean' value='true' migratable='yes'/> + <property name='pse' type='boolean' value='true' migratable='yes'/> + <property name='sep' type='boolean' value='true' migratable='yes'/> + <property name='pclmuldq' type='boolean' value='true' migratable='yes'/> <property name='nodeid-msr' type='boolean' value='false'/> - <property name='kvm' type='boolean' value='true'/> + <property name='kvm' type='boolean' value='true' migratable='yes'/> <property name='misalignsse' type='boolean' value='false'/> <property name='min-xlevel' type='number' value='2147483656'/> - <property name='bmi2' type='boolean' value='true'/> - <property name='bmi1' type='boolean' value='true'/> - <property name='kvm-pv-unhalt' type='boolean' value='true'/> + <property name='bmi2' type='boolean' value='true' migratable='yes'/> + <property name='bmi1' type='boolean' value='true' migratable='yes'/> + <property name='kvm-pv-unhalt' type='boolean' value='true' migratable='yes'/> <property name='realized' type='boolean' value='false'/> <property name='tsc_scale' type='boolean' value='false'/> <property name='tsc-scale' type='boolean' value='false'/> <property name='topoext' type='boolean' value='false'/> <property name='hv-vpindex' type='boolean' value='false'/> <property name='xlevel2' type='number' value='0'/> - <property name='clflushopt' type='boolean' value='true'/> + <property name='clflushopt' type='boolean' value='true' migratable='yes'/> <property name='kvm-no-smi-migration' type='boolean' value='false'/> <property name='monitor' type='boolean' value='false'/> <property name='avx512er' type='boolean' value='false'/> <property name='pmm-en' type='boolean' value='false'/> - <property name='pcid' type='boolean' value='true'/> + <property name='pcid' type='boolean' value='true' migratable='yes'/> <property name='3dnow' type='boolean' value='false'/> - <property name='erms' type='boolean' value='true'/> - <property name='lahf-lm' type='boolean' value='true'/> - <property name='lahf_lm' type='boolean' value='true'/> + <property name='erms' type='boolean' value='true' migratable='yes'/> + <property name='lahf-lm' type='boolean' value='true' migratable='yes'/> + <property name='lahf_lm' type='boolean' value='true' migratable='yes'/> <property name='xstore' type='boolean' value='false'/> <property name='hv-synic' type='boolean' value='false'/> <property name='fxsr-opt' type='boolean' value='false'/> <property name='fxsr_opt' type='boolean' value='false'/> - <property name='rtm' type='boolean' value='true'/> - <property name='lmce' type='boolean' value='true'/> + <property name='rtm' type='boolean' value='true' migratable='yes'/> + <property name='lmce' type='boolean' value='true' migratable='yes'/> <property name='hv-time' type='boolean' value='false'/> <property name='perfctr-nb' type='boolean' value='false'/> <property name='perfctr_nb' type='boolean' value='false'/> <property name='ffxsr' type='boolean' value='false'/> - <property name='rdrand' type='boolean' value='true'/> - <property name='rdseed' type='boolean' value='true'/> + <property name='rdrand' type='boolean' value='true' migratable='yes'/> + <property name='rdseed' type='boolean' value='true' migratable='yes'/> <property name='avx512-4vnniw' type='boolean' value='false'/> - <property name='vme' type='boolean' value='true'/> - <property name='vmx' type='boolean' value='true'/> + <property name='vme' type='boolean' value='true' migratable='yes'/> + <property name='vmx' type='boolean' value='true' migratable='yes'/> <property name='dtes64' type='boolean' value='false'/> - <property name='mtrr' type='boolean' value='true'/> - <property name='rdtscp' type='boolean' value='true'/> - <property name='pse36' type='boolean' value='true'/> + <property name='mtrr' type='boolean' value='true' migratable='yes'/> + <property name='rdtscp' type='boolean' value='true' migratable='yes'/> + <property name='pse36' type='boolean' value='true' migratable='yes'/> <property name='tbm' type='boolean' value='false'/> <property name='wdt' type='boolean' value='false'/> <property name='pause_filter' type='boolean' value='false'/> <property name='model-id' type='string' value='Intel(R) Xeon(R) CPU E3-1245 v5 @ 3.50GHz'/> <property name='sha-ni' type='boolean' value='false'/> - <property name='abm' type='boolean' value='true'/> + <property name='abm' type='boolean' value='true' migratable='yes'/> <property name='avx512pf' type='boolean' value='false'/> <property name='xstore-en' type='boolean' value='false'/> </hostCPU> - <hostCPU type='tcg' model='base' migratability='no'> + <hostCPU type='tcg' model='base' migratability='yes'> <property name='phys-bits' type='number' value='0'/> <property name='core-id' type='number' value='-1'/> <property name='xlevel' type='number' value='2147483658'/> - <property name='cmov' type='boolean' value='true'/> + <property name='cmov' type='boolean' value='true' migratable='yes'/> <property name='ia64' type='boolean' value='false'/> - <property name='aes' type='boolean' value='true'/> - <property name='mmx' type='boolean' value='true'/> - <property name='arat' type='boolean' value='true'/> + <property name='aes' type='boolean' value='true' migratable='yes'/> + <property name='mmx' type='boolean' value='true' migratable='yes'/> + <property name='arat' type='boolean' value='true' migratable='yes'/> <property name='rdpid' type='boolean' value='false'/> <property name='pause-filter' type='boolean' value='false'/> <property name='xsavec' type='boolean' value='false'/> <property name='osxsave' type='boolean' value='false'/> <property name='tsc-frequency' type='number' value='0'/> - <property name='xd' type='boolean' value='true'/> + <property name='xd' type='boolean' value='true' migratable='yes'/> <property name='hv-vendor-id' type='string' value=''/> <property name='kvm-asyncpf' type='boolean' value='false'/> <property name='kvm_asyncpf' type='boolean' value='false'/> <property name='perfctr_core' type='boolean' value='false'/> <property name='perfctr-core' type='boolean' value='false'/> - <property name='mpx' type='boolean' value='true'/> + <property name='mpx' type='boolean' value='true' migratable='yes'/> <property name='avx512cd' type='boolean' value='false'/> <property name='decodeassists' type='boolean' value='false'/> <property name='pbe' type='boolean' value='false'/> - <property name='sse4_1' type='boolean' value='true'/> - <property name='sse4.1' type='boolean' value='true'/> - <property name='sse4-1' type='boolean' value='true'/> + <property name='sse4_1' type='boolean' value='true' migratable='yes'/> + <property name='sse4.1' type='boolean' value='true' migratable='yes'/> + <property name='sse4-1' type='boolean' value='true' migratable='yes'/> <property name='family' type='number' value='6'/> - <property name='vmware-cpuid-freq' type='boolean' value='true'/> + <property name='vmware-cpuid-freq' type='boolean' value='true' migratable='yes'/> <property name='avx512f' type='boolean' value='false'/> <property name='xcrypt' type='boolean' value='false'/> <property name='hv-runtime' type='boolean' value='false'/> - <property name='msr' type='boolean' value='true'/> - <property name='mce' type='boolean' value='true'/> - <property name='mca' type='boolean' value='true'/> + <property name='msr' type='boolean' value='true' migratable='yes'/> + <property name='mce' type='boolean' value='true' migratable='yes'/> + <property name='mca' type='boolean' value='true' migratable='yes'/> <property name='thread-id' type='number' value='-1'/> <property name='min-level' type='number' value='13'/> - <property name='xgetbv1' type='boolean' value='true'/> + <property name='xgetbv1' type='boolean' value='true' migratable='yes'/> <property name='cid' type='boolean' value='false'/> <property name='hv-relaxed' type='boolean' value='false'/> - <property name='fxsr' type='boolean' value='true'/> + <property name='fxsr' type='boolean' value='true' migratable='yes'/> <property name='ds' type='boolean' value='false'/> <property name='hv-crash' type='boolean' value='false'/> - <property name='xsaveopt' type='boolean' value='true'/> + <property name='xsaveopt' type='boolean' value='true' migratable='yes'/> <property name='xtpr' type='boolean' value='false'/> <property name='avx512-vpopcntdq' type='boolean' value='false'/> <property name='phe' type='boolean' value='false'/> <property name='avx512vl' type='boolean' value='false'/> <property name='extapic' type='boolean' value='false'/> <property name='3dnowprefetch' type='boolean' value='false'/> - <property name='cr8legacy' type='boolean' value='true'/> - <property name='cpuid-0xb' type='boolean' value='true'/> + <property name='cr8legacy' type='boolean' value='true' migratable='yes'/> + <property name='cpuid-0xb' type='boolean' value='true' migratable='yes'/> <property name='xcrypt-en' type='boolean' value='false'/> <property name='kvm_pv_eoi' type='boolean' value='false'/> <property name='apic-id' type='number' value='4294967295'/> <property name='pn' type='boolean' value='false'/> <property name='dca' type='boolean' value='false'/> <property name='vendor' type='string' value='AuthenticAMD'/> - <property name='pku' type='boolean' value='true'/> + <property name='pku' type='boolean' value='true' migratable='yes'/> <property name='smx' type='boolean' value='false'/> <property name='cmp-legacy' type='boolean' value='false'/> <property name='cmp_legacy' type='boolean' value='false'/> <property name='avx512-4fmaps' type='boolean' value='false'/> <property name='vmcb-clean' type='boolean' value='false'/> <property name='vmcb_clean' type='boolean' value='false'/> - <property name='3dnowext' type='boolean' value='true'/> + <property name='3dnowext' type='boolean' value='true' migratable='yes'/> <property name='hle' type='boolean' value='false'/> <property name='npt' type='boolean' value='false'/> <property name='memory' type='string' value='/machine/unattached/system[0]'/> - <property name='clwb' type='boolean' value='true'/> + <property name='clwb' type='boolean' value='true' migratable='yes'/> <property name='lbrv' type='boolean' value='false'/> - <property name='adx' type='boolean' value='true'/> - <property name='ss' type='boolean' value='true'/> - <property name='pni' type='boolean' value='true'/> + <property name='adx' type='boolean' value='true' migratable='yes'/> + <property name='ss' type='boolean' value='true' migratable='yes'/> + <property name='pni' type='boolean' value='true' migratable='yes'/> <property name='svm_lock' type='boolean' value='false'/> <property name='svm-lock' type='boolean' value='false'/> - <property name='smep' type='boolean' value='true'/> + <property name='smep' type='boolean' value='true' migratable='yes'/> <property name='pfthreshold' type='boolean' value='false'/> - <property name='smap' type='boolean' value='true'/> + <property name='smap' type='boolean' value='true' migratable='yes'/> <property name='x2apic' type='boolean' value='false'/> <property name='avx512vbmi' type='boolean' value='false'/> <property name='hv-stimer' type='boolean' value='false'/> - <property name='i64' type='boolean' value='true'/> + <property name='i64' type='boolean' value='true' migratable='yes'/> <property name='flushbyasid' type='boolean' value='false'/> <property name='f16c' type='boolean' value='false'/> <property name='ace2-en' type='boolean' value='false'/> - <property name='pat' type='boolean' value='true'/> - <property name='pae' type='boolean' value='true'/> - <property name='sse' type='boolean' value='true'/> + <property name='pat' type='boolean' value='true' migratable='yes'/> + <property name='pae' type='boolean' value='true' migratable='yes'/> + <property name='sse' type='boolean' value='true' migratable='yes'/> <property name='phe-en' type='boolean' value='false'/> <property name='kvm-nopiodelay' type='boolean' value='false'/> <property name='kvm_nopiodelay' type='boolean' value='false'/> <property name='tm' type='boolean' value='false'/> <property name='kvmclock-stable-bit' type='boolean' value='false'/> - <property name='hypervisor' type='boolean' value='true'/> + <property name='hypervisor' type='boolean' value='true' migratable='yes'/> <property name='socket-id' type='number' value='-1'/> - <property name='pcommit' type='boolean' value='true'/> - <property name='syscall' type='boolean' value='true'/> + <property name='pcommit' type='boolean' value='true' migratable='yes'/> + <property name='syscall' type='boolean' value='true' migratable='yes'/> <property name='level' type='number' value='13'/> <property name='avx512dq' type='boolean' value='false'/> - <property name='svm' type='boolean' value='true'/> - <property name='full-cpuid-auto-level' type='boolean' value='true'/> + <property name='svm' type='boolean' value='true' migratable='yes'/> + <property name='full-cpuid-auto-level' type='boolean' value='true' migratable='yes'/> <property name='hv-reset' type='boolean' value='false'/> <property name='invtsc' type='boolean' value='false'/> - <property name='sse3' type='boolean' value='true'/> - <property name='sse2' type='boolean' value='true'/> + <property name='sse3' type='boolean' value='true' migratable='yes'/> + <property name='sse2' type='boolean' value='true' migratable='yes'/> <property name='est' type='boolean' value='false'/> <property name='avx512ifma' type='boolean' value='false'/> <property name='tm2' type='boolean' value='false'/> <property name='kvm-pv-eoi' type='boolean' value='false'/> - <property name='cx8' type='boolean' value='true'/> + <property name='cx8' type='boolean' value='true' migratable='yes'/> <property name='kvm-mmu' type='boolean' value='false'/> <property name='kvm_mmu' type='boolean' value='false'/> - <property name='sse4_2' type='boolean' value='true'/> - <property name='sse4.2' type='boolean' value='true'/> - <property name='sse4-2' type='boolean' value='true'/> - <property name='pge' type='boolean' value='true'/> - <property name='fill-mtrr-mask' type='boolean' value='true'/> + <property name='sse4_2' type='boolean' value='true' migratable='yes'/> + <property name='sse4.2' type='boolean' value='true' migratable='yes'/> + <property name='sse4-2' type='boolean' value='true' migratable='yes'/> + <property name='pge' type='boolean' value='true' migratable='yes'/> + <property name='fill-mtrr-mask' type='boolean' value='true' migratable='yes'/> <property name='pdcm' type='boolean' value='false'/> <property name='nodeid_msr' type='boolean' value='false'/> <property name='model' type='number' value='6'/> - <property name='movbe' type='boolean' value='true'/> + <property name='movbe' type='boolean' value='true' migratable='yes'/> <property name='nrip-save' type='boolean' value='false'/> <property name='nrip_save' type='boolean' value='false'/> - <property name='sse4a' type='boolean' value='true'/> - <property name='ssse3' type='boolean' value='true'/> + <property name='sse4a' type='boolean' value='true' migratable='yes'/> + <property name='ssse3' type='boolean' value='true' migratable='yes'/> <property name='kvm_pv_unhalt' type='boolean' value='false'/> <property name='invpcid' type='boolean' value='false'/> - <property name='pdpe1gb' type='boolean' value='true'/> + <property name='pdpe1gb' type='boolean' value='true' migratable='yes'/> <property name='tsc-deadline' type='boolean' value='false'/> <property name='fma' type='boolean' value='false'/> - <property name='cx16' type='boolean' value='true'/> - <property name='de' type='boolean' value='true'/> + <property name='cx16' type='boolean' value='true' migratable='yes'/> + <property name='de' type='boolean' value='true' migratable='yes'/> <property name='enforce' type='boolean' value='false'/> <property name='stepping' type='number' value='3'/> - <property name='xsave' type='boolean' value='true'/> - <property name='clflush' type='boolean' value='true'/> + <property name='xsave' type='boolean' value='true' migratable='yes'/> + <property name='clflush' type='boolean' value='true' migratable='yes'/> <property name='skinit' type='boolean' value='false'/> <property name='tce' type='boolean' value='false'/> - <property name='tsc' type='boolean' value='true'/> - <property name='fpu' type='boolean' value='true'/> + <property name='tsc' type='boolean' value='true' migratable='yes'/> + <property name='fpu' type='boolean' value='true' migratable='yes'/> <property name='ds-cpl' type='boolean' value='false'/> <property name='ds_cpl' type='boolean' value='false'/> <property name='ibs' type='boolean' value='false'/> <property name='host-phys-bits' type='boolean' value='false'/> <property name='fma4' type='boolean' value='false'/> - <property name='la57' type='boolean' value='true'/> + <property name='la57' type='boolean' value='true' migratable='yes'/> <property name='osvw' type='boolean' value='false'/> - <property name='check' type='boolean' value='true'/> + <property name='check' type='boolean' value='true' migratable='yes'/> <property name='hv-spinlocks' type='number' value='-1'/> <property name='pmm' type='boolean' value='false'/> - <property name='apic' type='boolean' value='true'/> + <property name='apic' type='boolean' value='true' migratable='yes'/> <property name='pmu' type='boolean' value='false'/> <property name='min-xlevel2' type='number' value='0'/> <property name='tsc-adjust' type='boolean' value='false'/> @@ -602,34 +602,34 @@ <property name='kvm-steal-time' type='boolean' value='false'/> <property name='kvm_steal_time' type='boolean' value='false'/> <property name='kvmclock' type='boolean' value='false'/> - <property name='l3-cache' type='boolean' value='true'/> + <property name='l3-cache' type='boolean' value='true' migratable='yes'/> <property name='lwp' type='boolean' value='false'/> <property name='xop' type='boolean' value='false'/> <property name='avx' type='boolean' value='false'/> - <property name='ospke' type='boolean' value='true'/> + <property name='ospke' type='boolean' value='true' migratable='yes'/> <property name='ace2' type='boolean' value='false'/> - <property name='acpi' type='boolean' value='true'/> + <property name='acpi' type='boolean' value='true' migratable='yes'/> <property name='avx512bw' type='boolean' value='false'/> <property name='hv-vapic' type='boolean' value='false'/> - <property name='fsgsbase' type='boolean' value='true'/> + <property name='fsgsbase' type='boolean' value='true' migratable='yes'/> <property name='ht' type='boolean' value='false'/> - <property name='nx' type='boolean' value='true'/> - <property name='pclmulqdq' type='boolean' value='true'/> - <property name='mmxext' type='boolean' value='true'/> - <property name='popcnt' type='boolean' value='true'/> + <property name='nx' type='boolean' value='true' migratable='yes'/> + <property name='pclmulqdq' type='boolean' value='true' migratable='yes'/> + <property name='mmxext' type='boolean' value='true' migratable='yes'/> + <property name='popcnt' type='boolean' value='true' migratable='yes'/> <property name='xsaves' type='boolean' value='false'/> - <property name='lm' type='boolean' value='true'/> + <property name='lm' type='boolean' value='true' migratable='yes'/> <property name='umip' type='boolean' value='false'/> <property name='avx2' type='boolean' value='false'/> - <property name='pse' type='boolean' value='true'/> - <property name='sep' type='boolean' value='true'/> - <property name='pclmuldq' type='boolean' value='true'/> + <property name='pse' type='boolean' value='true' migratable='yes'/> + <property name='sep' type='boolean' value='true' migratable='yes'/> + <property name='pclmuldq' type='boolean' value='true' migratable='yes'/> <property name='nodeid-msr' type='boolean' value='false'/> - <property name='kvm' type='boolean' value='true'/> + <property name='kvm' type='boolean' value='true' migratable='yes'/> <property name='misalignsse' type='boolean' value='false'/> <property name='min-xlevel' type='number' value='2147483658'/> - <property name='bmi2' type='boolean' value='true'/> - <property name='bmi1' type='boolean' value='true'/> + <property name='bmi2' type='boolean' value='true' migratable='yes'/> + <property name='bmi1' type='boolean' value='true' migratable='yes'/> <property name='kvm-pv-unhalt' type='boolean' value='false'/> <property name='realized' type='boolean' value='false'/> <property name='tsc_scale' type='boolean' value='false'/> @@ -637,16 +637,16 @@ <property name='topoext' type='boolean' value='false'/> <property name='hv-vpindex' type='boolean' value='false'/> <property name='xlevel2' type='number' value='0'/> - <property name='clflushopt' type='boolean' value='true'/> + <property name='clflushopt' type='boolean' value='true' migratable='yes'/> <property name='kvm-no-smi-migration' type='boolean' value='false'/> - <property name='monitor' type='boolean' value='true'/> + <property name='monitor' type='boolean' value='true' migratable='yes'/> <property name='avx512er' type='boolean' value='false'/> <property name='pmm-en' type='boolean' value='false'/> <property name='pcid' type='boolean' value='false'/> - <property name='3dnow' type='boolean' value='true'/> - <property name='erms' type='boolean' value='true'/> - <property name='lahf-lm' type='boolean' value='true'/> - <property name='lahf_lm' type='boolean' value='true'/> + <property name='3dnow' type='boolean' value='true' migratable='yes'/> + <property name='erms' type='boolean' value='true' migratable='yes'/> + <property name='lahf-lm' type='boolean' value='true' migratable='yes'/> + <property name='lahf_lm' type='boolean' value='true' migratable='yes'/> <property name='xstore' type='boolean' value='false'/> <property name='hv-synic' type='boolean' value='false'/> <property name='fxsr-opt' type='boolean' value='false'/> @@ -663,15 +663,15 @@ <property name='vme' type='boolean' value='false'/> <property name='vmx' type='boolean' value='false'/> <property name='dtes64' type='boolean' value='false'/> - <property name='mtrr' type='boolean' value='true'/> - <property name='rdtscp' type='boolean' value='true'/> - <property name='pse36' type='boolean' value='true'/> + <property name='mtrr' type='boolean' value='true' migratable='yes'/> + <property name='rdtscp' type='boolean' value='true' migratable='yes'/> + <property name='pse36' type='boolean' value='true' migratable='yes'/> <property name='tbm' type='boolean' value='false'/> <property name='wdt' type='boolean' value='false'/> <property name='pause_filter' type='boolean' value='false'/> <property name='model-id' type='string' value='QEMU TCG CPU version 2.5+'/> <property name='sha-ni' type='boolean' value='false'/> - <property name='abm' type='boolean' value='true'/> + <property name='abm' type='boolean' value='true' migratable='yes'/> <property name='avx512pf' type='boolean' value='false'/> <property name='xstore-en' type='boolean' value='false'/> </hostCPU> -- 2.12.2

CPU features which change their value from disabled to enabled between two calls to query-cpu-model-expansion (the first with no extra properties set and the second with 'migratable' property set to false) can be marked as enabled and non-migratable in qemuMonitorCPUModelInfo. Since the code consuming qemuMonitorCPUModelInfo currently ignores the migratable flag, this change is effectively changing the CPU model advertised in domain capabilities to contain all features (even those which block migration). And this matches what we do for QEMU older than 2.9.0, when we detect all CPUID bits ourselves without asking QEMU. As a result of this change <cpu mode='host-model'> <feature name='invtsc' policy='require'/> </cpu> will work with all QEMU versions. Such CPU definition would be forbidden with QEMU >= 2.9.0 without this patch. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- src/qemu/qemu_capabilities.c | 6 +++++- tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 9726bce74..b1245ad5d 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -2864,8 +2864,12 @@ virQEMUCapsProbeQMPHostCPU(virQEMUCapsPtr qemuCaps, prop->type != nmProp->type) continue; - if (prop->value.boolean) + if (prop->value.boolean) { prop->migratable = VIR_TRISTATE_BOOL_YES; + } else if (nmProp->value.boolean) { + prop->value.boolean = true; + prop->migratable = VIR_TRISTATE_BOOL_NO; + } } (*modelInfo)->migratability = true; diff --git a/tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml b/tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml index a4ab74dca..e8fe01d85 100644 --- a/tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml +++ b/tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml @@ -30,6 +30,7 @@ <feature policy='require' name='clflushopt'/> <feature policy='require' name='xsaves'/> <feature policy='require' name='pdpe1gb'/> + <feature policy='require' name='invtsc'/> </mode> <mode name='custom' supported='yes'> <model usable='yes'>qemu64</model> diff --git a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml index 6efa8a668..6386c4ed0 100644 --- a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml @@ -314,7 +314,7 @@ <property name='svm' type='boolean' value='false'/> <property name='full-cpuid-auto-level' type='boolean' value='true' migratable='yes'/> <property name='hv-reset' type='boolean' value='false'/> - <property name='invtsc' type='boolean' value='false'/> + <property name='invtsc' type='boolean' value='true' migratable='no'/> <property name='sse3' type='boolean' value='true' migratable='yes'/> <property name='sse2' type='boolean' value='true' migratable='yes'/> <property name='est' type='boolean' value='false'/> -- 2.12.2

On Wed, Mar 29, 2017 at 04:53:16PM +0200, Jiri Denemark wrote:
This series fixes a regression in libvirt which would break domains with a CPU defined as, for example:
<cpu mode='host-model'> <feature name='invtsc' policy='require'/> </cpu>
Such domains would work just fine with libvirt <= 3.1.0 or QEMU < 2.9.0, but they would be broken with current libvirt and QEMU >= 2.9.0.
This is because we started asking QEMU for CPU features supported by the host CPU, by which we think all non-migratable features are not supported because QEMU filters them out by default.
This series changes our code to properly detect even non-migratable features, but still leaves the piece which relies on our cpu_map.xml to filter them when someone asks for just <cpu mode='host-model'/>. Patches which will use the data provided by QEMU instead of our static database in cpu_map.xml will be sent soon, since they are not required to fix the regression.
Jiri Denemark (3): qemuMonitorCPUModelInfo: Add support for non-migratable features qemu: Check migratable host CPU features qemu: Check non-migratable host CPU features
ACK series. I'll keep the bunny ears of shame handy, just in case. Jan
participants (2)
-
Jiri Denemark
-
Ján Tomko