[libvirt] [PATCH v2 00/33] qemu: Detect host CPU model by asking QEMU on x86_64

Until now host-model CPU mode tried to enable all CPU features supported by the host CPU even if QEMU/KVM did not support them. This caused a number of issues and made host-model quite unreliable. Asking QEMU for the CPU it can provide and the current host makes host-model much more robust. This series fixes the following bugs: https://bugzilla.redhat.com/show_bug.cgi?id=1018251 https://bugzilla.redhat.com/show_bug.cgi?id=1371617 https://bugzilla.redhat.com/show_bug.cgi?id=1372581 https://bugzilla.redhat.com/show_bug.cgi?id=1404627 https://bugzilla.redhat.com/show_bug.cgi?id=870071 In addition to that, the following bug should be mostly limited to cases when an unsupported feature is explicitly requested: https://bugzilla.redhat.com/show_bug.cgi?id=1335534 The series relies on features which are not in QEMU yet, but should be hopefully close enough to be pushed in 2.9.0. In the meantime, Eduardo's work/x86-query-cpu-expansion-full branch can be used to play with them. Version 2: - properly set vendor property in converted test data files - fix cpu-parse.sh to use "x86_64" prefix for the generated files Jiri Denemark (33): docs: Drop obsolete statement about CPU modes and migration docs: Fix since statement in host-model documentation qemucapstest: Add test data for QEMU 2.9.0 domaincapstest: Add test data for QEMU 2.9.0 qemu: Refactor virQEMUCapsInitHostCPUModel qemu: Skip virQEMUCapsCPUFilterFeatures on non-x86 CPUs qemu: Fix CPU model fallback in domain capabilities docs: Update description of the host-model CPU mode qemu: Introduce virQEMUCapsFormatHostCPUModelInfo qemu: Rename hostCPU/feature element in capabilities cache qemu: Store more types in qemuMonitorCPUModelInfo qemu: Probe "max" CPU model in TCG cpu: Introduce virCPUDataNew cpu_x86: Drop virCPUx86MakeData and use virCPUDataNew cpu_x86: Make virCPUx86DataClear static cpu: Rework cpuDataFree cpu_x86: Make virCPUx86DataAddCPUID work with virCPUDataPtr cpu_x86: Introduce virCPUx86DataSetSignature cpu_x86: Introduce virCPUx86DataSetVendor cpu_x86: Introduce virCPUx86DataAddFeature cpu: Use virCPUData.arch in cpuDecode qemu: Get host CPU model from QEMU on x86_64 qemu: Use enum for CPU model expansion type qemu: Use full CPU model expansion on x86 qemu: Make virQEMUCapsInitCPUModel testable cputest: Rename x86 data files cputest: Use virArch enum rather then strings cputest: Switch host CPU data scripts to model expansion cputest: Convert all json data files to query-cpu-model-expansion cputest: Test virQEMUCapsInitCPUModel cputest: Drop obsolete CPU test data files cputest: Drop .new suffix from CPU test data files news: Detect host CPU model by asking QEMU on x86_64 docs/formatdomain.html.in | 38 +- docs/news.xml | 11 + src/bhyve/bhyve_capabilities.c | 2 +- src/cpu/cpu.c | 42 +- src/cpu/cpu.h | 7 +- src/cpu/cpu_arm.c | 7 - src/cpu/cpu_ppc64.c | 6 +- src/cpu/cpu_s390.c | 7 - src/cpu/cpu_x86.c | 280 +- src/cpu/cpu_x86.h | 13 +- src/libvirt_private.syms | 8 +- src/libxl/libxl_capabilities.c | 18 +- src/qemu/qemu_capabilities.c | 452 +- src/qemu/qemu_capabilities.h | 3 +- src/qemu/qemu_capspriv.h | 13 +- src/qemu/qemu_command.c | 2 +- src/qemu/qemu_monitor.c | 26 +- src/qemu/qemu_monitor.h | 31 +- src/qemu/qemu_monitor_json.c | 109 +- src/qemu/qemu_monitor_json.h | 4 +- src/qemu/qemu_parse_command.c | 2 +- src/qemu/qemu_process.c | 7 +- src/vmware/vmware_conf.c | 2 +- src/vz/vz_driver.c | 2 +- tests/cputest.c | 324 +- tests/cputestdata/cpu-convert.py | 249 + tests/cputestdata/cpu-gather.sh | 39 +- tests/cputestdata/cpu-parse.sh | 5 +- tests/cputestdata/x86-cpuid-A10-5800K.json | 77 - tests/cputestdata/x86-cpuid-Core-i5-2500.json | 88 - tests/cputestdata/x86-cpuid-Core-i5-2540M.json | 82 - tests/cputestdata/x86-cpuid-Core-i5-4670T.json | 77 - tests/cputestdata/x86-cpuid-Core-i5-6600.json | 82 - tests/cputestdata/x86-cpuid-Core-i7-2600.json | 77 - tests/cputestdata/x86-cpuid-Core-i7-3740QM.json | 77 - tests/cputestdata/x86-cpuid-Core-i7-3770.json | 77 - tests/cputestdata/x86-cpuid-Core-i7-4600U.json | 82 - tests/cputestdata/x86-cpuid-Core-i7-5600U-json.xml | 12 - tests/cputestdata/x86-cpuid-Core-i7-5600U.json | 88 - tests/cputestdata/x86-cpuid-Core2-E6850.json | 77 - tests/cputestdata/x86-cpuid-Opteron-2350.json | 71 - tests/cputestdata/x86-cpuid-Opteron-6234.json | 88 - tests/cputestdata/x86-cpuid-Phenom-B95.json | 77 - tests/cputestdata/x86-cpuid-Xeon-E3-1245.json | 88 - tests/cputestdata/x86-cpuid-Xeon-E5-2630.json | 77 - tests/cputestdata/x86-cpuid-Xeon-E5-2650.json | 71 - tests/cputestdata/x86-cpuid-Xeon-E7-4820.json | 77 - tests/cputestdata/x86-cpuid-Xeon-W3520.json | 77 - ...ack.xml => x86_64-Haswell-noTSX-nofallback.xml} | 0 ...-Haswell-noTSX.xml => x86_64-Haswell-noTSX.xml} | 0 .../{x86-Haswell.xml => x86_64-Haswell.xml} | 0 ...e-1-result.xml => x86_64-baseline-1-result.xml} | 0 .../{x86-baseline-1.xml => x86_64-baseline-1.xml} | 0 ...e-2-result.xml => x86_64-baseline-2-result.xml} | 0 .../{x86-baseline-2.xml => x86_64-baseline-2.xml} | 0 ...expanded.xml => x86_64-baseline-3-expanded.xml} | 0 ...e-3-result.xml => x86_64-baseline-3-result.xml} | 0 .../{x86-baseline-3.xml => x86_64-baseline-3.xml} | 0 ...expanded.xml => x86_64-baseline-4-expanded.xml} | 0 ...e-4-result.xml => x86_64-baseline-4-result.xml} | 0 .../{x86-baseline-4.xml => x86_64-baseline-4.xml} | 0 ...expanded.xml => x86_64-baseline-5-expanded.xml} | 0 ...e-5-result.xml => x86_64-baseline-5-result.xml} | 0 .../{x86-baseline-5.xml => x86_64-baseline-5.xml} | 0 ...atable.xml => x86_64-baseline-6-migratable.xml} | 0 ...e-6-result.xml => x86_64-baseline-6-result.xml} | 0 .../{x86-baseline-6.xml => x86_64-baseline-6.xml} | 0 ...e-7-result.xml => x86_64-baseline-7-result.xml} | 0 .../{x86-baseline-7.xml => x86_64-baseline-7.xml} | 0 ...e-8-result.xml => x86_64-baseline-8-result.xml} | 0 .../{x86-baseline-8.xml => x86_64-baseline-8.xml} | 0 ...ml => x86_64-baseline-incompatible-vendors.xml} | 0 ...lt.xml => x86_64-baseline-no-vendor-result.xml} | 0 ...no-vendor.xml => x86_64-baseline-no-vendor.xml} | 0 ...xml => x86_64-baseline-some-vendors-result.xml} | 0 ...endors.xml => x86_64-baseline-some-vendors.xml} | 0 ...-bogus-feature.xml => x86_64-bogus-feature.xml} | 0 ...{x86-bogus-model.xml => x86_64-bogus-model.xml} | 0 ...86-bogus-vendor.xml => x86_64-bogus-vendor.xml} | 0 ...-guest.xml => x86_64-cpuid-A10-5800K-guest.xml} | 0 ...0K-host.xml => x86_64-cpuid-A10-5800K-host.xml} | 0 ...0K-json.xml => x86_64-cpuid-A10-5800K-json.xml} | 1 + tests/cputestdata/x86_64-cpuid-A10-5800K.json | 203 + ...id-A10-5800K.xml => x86_64-cpuid-A10-5800K.xml} | 0 ...-guest.xml => x86_64-cpuid-Atom-D510-guest.xml} | 0 ...10-host.xml => x86_64-cpuid-Atom-D510-host.xml} | 0 ...id-Atom-D510.xml => x86_64-cpuid-Atom-D510.xml} | 0 ...-guest.xml => x86_64-cpuid-Atom-N450-guest.xml} | 0 ...50-host.xml => x86_64-cpuid-Atom-N450-host.xml} | 0 ...id-Atom-N450.xml => x86_64-cpuid-Atom-N450.xml} | 0 ...est.xml => x86_64-cpuid-Core-i5-2500-guest.xml} | 0 ...host.xml => x86_64-cpuid-Core-i5-2500-host.xml} | 0 ...json.xml => x86_64-cpuid-Core-i5-2500-json.xml} | 1 + tests/cputestdata/x86_64-cpuid-Core-i5-2500.json | 203 + ...e-i5-2500.xml => x86_64-cpuid-Core-i5-2500.xml} | 0 ...st.xml => x86_64-cpuid-Core-i5-2540M-guest.xml} | 0 ...ost.xml => x86_64-cpuid-Core-i5-2540M-host.xml} | 0 ...son.xml => x86_64-cpuid-Core-i5-2540M-json.xml} | 1 + tests/cputestdata/x86_64-cpuid-Core-i5-2540M.json | 203 + ...i5-2540M.xml => x86_64-cpuid-Core-i5-2540M.xml} | 0 ...st.xml => x86_64-cpuid-Core-i5-4670T-guest.xml} | 0 ...ost.xml => x86_64-cpuid-Core-i5-4670T-host.xml} | 0 ...son.xml => x86_64-cpuid-Core-i5-4670T-json.xml} | 1 + tests/cputestdata/x86_64-cpuid-Core-i5-4670T.json | 203 + ...i5-4670T.xml => x86_64-cpuid-Core-i5-4670T.xml} | 0 ...est.xml => x86_64-cpuid-Core-i5-6600-guest.xml} | 0 ...host.xml => x86_64-cpuid-Core-i5-6600-host.xml} | 0 ...json.xml => x86_64-cpuid-Core-i5-6600-json.xml} | 1 + tests/cputestdata/x86_64-cpuid-Core-i5-6600.json | 203 + ...e-i5-6600.xml => x86_64-cpuid-Core-i5-6600.xml} | 0 ...est.xml => x86_64-cpuid-Core-i7-2600-guest.xml} | 0 ...host.xml => x86_64-cpuid-Core-i7-2600-host.xml} | 0 ...json.xml => x86_64-cpuid-Core-i7-2600-json.xml} | 1 + tests/cputestdata/x86_64-cpuid-Core-i7-2600.json | 203 + ...e-i7-2600.xml => x86_64-cpuid-Core-i7-2600.xml} | 0 ...st.xml => x86_64-cpuid-Core-i7-3520M-guest.xml} | 0 ...ost.xml => x86_64-cpuid-Core-i7-3520M-host.xml} | 0 ...i7-3520M.xml => x86_64-cpuid-Core-i7-3520M.xml} | 0 ...t.xml => x86_64-cpuid-Core-i7-3740QM-guest.xml} | 0 ...st.xml => x86_64-cpuid-Core-i7-3740QM-host.xml} | 0 ...on.xml => x86_64-cpuid-Core-i7-3740QM-json.xml} | 1 + tests/cputestdata/x86_64-cpuid-Core-i7-3740QM.json | 203 + ...-3740QM.xml => x86_64-cpuid-Core-i7-3740QM.xml} | 0 ...est.xml => x86_64-cpuid-Core-i7-3770-guest.xml} | 0 ...host.xml => x86_64-cpuid-Core-i7-3770-host.xml} | 0 ...json.xml => x86_64-cpuid-Core-i7-3770-json.xml} | 1 + tests/cputestdata/x86_64-cpuid-Core-i7-3770.json | 203 + ...e-i7-3770.xml => x86_64-cpuid-Core-i7-3770.xml} | 0 ...st.xml => x86_64-cpuid-Core-i7-4600U-guest.xml} | 0 ...ost.xml => x86_64-cpuid-Core-i7-4600U-host.xml} | 0 ...son.xml => x86_64-cpuid-Core-i7-4600U-json.xml} | 1 + tests/cputestdata/x86_64-cpuid-Core-i7-4600U.json | 203 + ...i7-4600U.xml => x86_64-cpuid-Core-i7-4600U.xml} | 0 ...st.xml => x86_64-cpuid-Core-i7-5600U-guest.xml} | 0 ...ost.xml => x86_64-cpuid-Core-i7-5600U-host.xml} | 0 .../x86_64-cpuid-Core-i7-5600U-json.xml | 16 + tests/cputestdata/x86_64-cpuid-Core-i7-5600U.json | 203 + ...i7-5600U.xml => x86_64-cpuid-Core-i7-5600U.xml} | 0 ...uest.xml => x86_64-cpuid-Core2-E6850-guest.xml} | 0 ...-host.xml => x86_64-cpuid-Core2-E6850-host.xml} | 0 ...-json.xml => x86_64-cpuid-Core2-E6850-json.xml} | 5 +- tests/cputestdata/x86_64-cpuid-Core2-E6850.json | 203 + ...ore2-E6850.xml => x86_64-cpuid-Core2-E6850.xml} | 0 ...uest.xml => x86_64-cpuid-Core2-Q9500-guest.xml} | 0 ...-host.xml => x86_64-cpuid-Core2-Q9500-host.xml} | 0 ...ore2-Q9500.xml => x86_64-cpuid-Core2-Q9500.xml} | 0 ...50-guest.xml => x86_64-cpuid-FX-8150-guest.xml} | 0 ...8150-host.xml => x86_64-cpuid-FX-8150-host.xml} | 0 ...-cpuid-FX-8150.xml => x86_64-cpuid-FX-8150.xml} | 0 ...est.xml => x86_64-cpuid-Opteron-1352-guest.xml} | 0 ...host.xml => x86_64-cpuid-Opteron-1352-host.xml} | 0 ...eron-1352.xml => x86_64-cpuid-Opteron-1352.xml} | 0 ...est.xml => x86_64-cpuid-Opteron-2350-guest.xml} | 0 ...host.xml => x86_64-cpuid-Opteron-2350-host.xml} | 0 ...json.xml => x86_64-cpuid-Opteron-2350-json.xml} | 1 + tests/cputestdata/x86_64-cpuid-Opteron-2350.json | 203 + ...eron-2350.xml => x86_64-cpuid-Opteron-2350.xml} | 0 ...est.xml => x86_64-cpuid-Opteron-6234-guest.xml} | 0 ...host.xml => x86_64-cpuid-Opteron-6234-host.xml} | 0 ...json.xml => x86_64-cpuid-Opteron-6234-json.xml} | 1 + tests/cputestdata/x86_64-cpuid-Opteron-6234.json | 203 + ...eron-6234.xml => x86_64-cpuid-Opteron-6234.xml} | 0 ...est.xml => x86_64-cpuid-Opteron-6282-guest.xml} | 0 ...host.xml => x86_64-cpuid-Opteron-6282-host.xml} | 0 ...eron-6282.xml => x86_64-cpuid-Opteron-6282.xml} | 0 ...st.xml => x86_64-cpuid-Pentium-P6100-guest.xml} | 0 ...ost.xml => x86_64-cpuid-Pentium-P6100-host.xml} | 0 ...um-P6100.xml => x86_64-cpuid-Pentium-P6100.xml} | 0 ...guest.xml => x86_64-cpuid-Phenom-B95-guest.xml} | 0 ...5-host.xml => x86_64-cpuid-Phenom-B95-host.xml} | 0 ...5-json.xml => x86_64-cpuid-Phenom-B95-json.xml} | 1 + tests/cputestdata/x86_64-cpuid-Phenom-B95.json | 203 + ...-Phenom-B95.xml => x86_64-cpuid-Phenom-B95.xml} | 0 ...-guest.xml => x86_64-cpuid-Xeon-5110-guest.xml} | 0 ...10-host.xml => x86_64-cpuid-Xeon-5110-host.xml} | 0 ...id-Xeon-5110.xml => x86_64-cpuid-Xeon-5110.xml} | 0 ...est.xml => x86_64-cpuid-Xeon-E3-1245-guest.xml} | 0 ...host.xml => x86_64-cpuid-Xeon-E3-1245-host.xml} | 0 ...json.xml => x86_64-cpuid-Xeon-E3-1245-json.xml} | 1 + tests/cputestdata/x86_64-cpuid-Xeon-E3-1245.json | 203 + ...n-E3-1245.xml => x86_64-cpuid-Xeon-E3-1245.xml} | 0 ...est.xml => x86_64-cpuid-Xeon-E5-2630-guest.xml} | 0 ...host.xml => x86_64-cpuid-Xeon-E5-2630-host.xml} | 0 ...json.xml => x86_64-cpuid-Xeon-E5-2630-json.xml} | 1 + tests/cputestdata/x86_64-cpuid-Xeon-E5-2630.json | 203 + ...n-E5-2630.xml => x86_64-cpuid-Xeon-E5-2630.xml} | 0 ...est.xml => x86_64-cpuid-Xeon-E5-2650-guest.xml} | 0 ...host.xml => x86_64-cpuid-Xeon-E5-2650-host.xml} | 0 ...json.xml => x86_64-cpuid-Xeon-E5-2650-json.xml} | 1 + tests/cputestdata/x86_64-cpuid-Xeon-E5-2650.json | 203 + ...n-E5-2650.xml => x86_64-cpuid-Xeon-E5-2650.xml} | 0 ...est.xml => x86_64-cpuid-Xeon-E7-4820-guest.xml} | 0 ...host.xml => x86_64-cpuid-Xeon-E7-4820-host.xml} | 0 ...json.xml => x86_64-cpuid-Xeon-E7-4820-json.xml} | 1 + tests/cputestdata/x86_64-cpuid-Xeon-E7-4820.json | 203 + ...n-E7-4820.xml => x86_64-cpuid-Xeon-E7-4820.xml} | 0 ...guest.xml => x86_64-cpuid-Xeon-W3520-guest.xml} | 0 ...0-host.xml => x86_64-cpuid-Xeon-W3520-host.xml} | 0 ...0-json.xml => x86_64-cpuid-Xeon-W3520-json.xml} | 1 + tests/cputestdata/x86_64-cpuid-Xeon-W3520.json | 203 + ...-Xeon-W3520.xml => x86_64-cpuid-Xeon-W3520.xml} | 0 ...guest.xml => x86_64-cpuid-Xeon-X5460-guest.xml} | 0 ...0-host.xml => x86_64-cpuid-Xeon-X5460-host.xml} | 0 ...-Xeon-X5460.xml => x86_64-cpuid-Xeon-X5460.xml} | 0 ...le-extra.xml => x86_64-exact-disable-extra.xml} | 0 ...-exact-disable.xml => x86_64-exact-disable.xml} | 0 ...xact-disable2.xml => x86_64-exact-disable2.xml} | 0 ...bid-extra.xml => x86_64-exact-forbid-extra.xml} | 0 ...86-exact-forbid.xml => x86_64-exact-forbid.xml} | 0 ...-Haswell.xml => x86_64-exact-force-Haswell.xml} | 0 ...{x86-exact-force.xml => x86_64-exact-force.xml} | 0 ...re-extra.xml => x86_64-exact-require-extra.xml} | 0 ...-exact-require.xml => x86_64-exact-require.xml} | 0 .../{x86-exact.xml => x86_64-exact.xml} | 0 ...-nofallback.xml => x86_64-guest-nofallback.xml} | 0 .../{x86-guest.xml => x86_64-guest.xml} | 0 ...t.xml => x86_64-host+guest,model486-result.xml} | 0 ...ult.xml => x86_64-host+guest,models-result.xml} | 0 ...est-result.xml => x86_64-host+guest-result.xml} | 0 .../{x86-host+guest.xml => x86_64-host+guest.xml} | 0 ... x86_64-host+host+host-model,models-result.xml} | 0 ...k.xml => x86_64-host+host-model-nofallback.xml} | 0 ...t+host-model.xml => x86_64-host+host-model.xml} | 0 ...l => x86_64-host+host-passthrough-features.xml} | 0 ...hrough.xml => x86_64-host+host-passthrough.xml} | 0 .../{x86-host+min.xml => x86_64-host+min.xml} | 0 ...ult.xml => x86_64-host+penryn-force-result.xml} | 0 ...-host+pentium3.xml => x86_64-host+pentium3.xml} | 0 ...l => x86_64-host+strict-force-extra-result.xml} | 0 ...-host-Haswell-noTSX+Haswell,haswell-result.xml} | 0 ...Haswell-noTSX+Haswell-noTSX,haswell-result.xml} | 0 ...64-host-Haswell-noTSX+Haswell-noTSX-result.xml} | 0 ...ell-noTSX.xml => x86_64-host-Haswell-noTSX.xml} | 0 ...SandyBridge.xml => x86_64-host-SandyBridge.xml} | 0 ...-host-amd-fake.xml => x86_64-host-amd-fake.xml} | 0 .../{x86-host-amd.xml => x86_64-host-amd.xml} | 0 ....xml => x86_64-host-better+pentium3-result.xml} | 0 ...{x86-host-better.xml => x86_64-host-better.xml} | 0 ...incomp-arch.xml => x86_64-host-incomp-arch.xml} | 0 ...model.xml => x86_64-host-invtsc+host-model.xml} | 0 ...{x86-host-invtsc.xml => x86_64-host-invtsc.xml} | 0 ...llback.xml => x86_64-host-model-nofallback.xml} | 0 .../{x86-host-model.xml => x86_64-host-model.xml} | 0 ...ost-no-vendor.xml => x86_64-host-no-vendor.xml} | 0 ...es.xml => x86_64-host-passthrough-features.xml} | 0 ...passthrough.xml => x86_64-host-passthrough.xml} | 0 ...sult.xml => x86_64-host-worse+guest-result.xml} | 0 .../{x86-host-worse.xml => x86_64-host-worse.xml} | 0 .../cputestdata/{x86-host.xml => x86_64-host.xml} | 0 tests/cputestdata/{x86-min.xml => x86_64-min.xml} | 0 ...86-penryn-force.xml => x86_64-penryn-force.xml} | 0 ...86-pentium3-amd.xml => x86_64-pentium3-amd.xml} | 0 .../{x86-pentium3.xml => x86_64-pentium3.xml} | 0 ...trict-disable.xml => x86_64-strict-disable.xml} | 0 ...rce-extra.xml => x86_64-strict-force-extra.xml} | 0 ...{x86-strict-full.xml => x86_64-strict-full.xml} | 0 .../{x86-strict.xml => x86_64-strict.xml} | 0 tests/domaincapsschemadata/qemu_2.8.0.s390x.xml | 2 +- .../domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml | 145 + tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml | 124 + tests/domaincapstest.c | 8 + .../qemucapabilitiesdata/caps_2.8.0.s390x.replies | 8 + tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml | 32 +- .../qemucapabilitiesdata/caps_2.9.0.x86_64.replies | 15365 +++++++++++++++++++ tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml | 763 + tests/qemucapabilitiestest.c | 1 + tests/qemumonitorjsontest.c | 4 +- tests/qemuxml2argvtest.c | 3 +- 268 files changed, 21519 insertions(+), 2062 deletions(-) create mode 100755 tests/cputestdata/cpu-convert.py delete mode 100644 tests/cputestdata/x86-cpuid-A10-5800K.json delete mode 100644 tests/cputestdata/x86-cpuid-Core-i5-2500.json delete mode 100644 tests/cputestdata/x86-cpuid-Core-i5-2540M.json delete mode 100644 tests/cputestdata/x86-cpuid-Core-i5-4670T.json delete mode 100644 tests/cputestdata/x86-cpuid-Core-i5-6600.json delete mode 100644 tests/cputestdata/x86-cpuid-Core-i7-2600.json delete mode 100644 tests/cputestdata/x86-cpuid-Core-i7-3740QM.json delete mode 100644 tests/cputestdata/x86-cpuid-Core-i7-3770.json delete mode 100644 tests/cputestdata/x86-cpuid-Core-i7-4600U.json delete mode 100644 tests/cputestdata/x86-cpuid-Core-i7-5600U-json.xml delete mode 100644 tests/cputestdata/x86-cpuid-Core-i7-5600U.json delete mode 100644 tests/cputestdata/x86-cpuid-Core2-E6850.json delete mode 100644 tests/cputestdata/x86-cpuid-Opteron-2350.json delete mode 100644 tests/cputestdata/x86-cpuid-Opteron-6234.json delete mode 100644 tests/cputestdata/x86-cpuid-Phenom-B95.json delete mode 100644 tests/cputestdata/x86-cpuid-Xeon-E3-1245.json delete mode 100644 tests/cputestdata/x86-cpuid-Xeon-E5-2630.json delete mode 100644 tests/cputestdata/x86-cpuid-Xeon-E5-2650.json delete mode 100644 tests/cputestdata/x86-cpuid-Xeon-E7-4820.json delete mode 100644 tests/cputestdata/x86-cpuid-Xeon-W3520.json rename tests/cputestdata/{x86-Haswell-noTSX-nofallback.xml => x86_64-Haswell-noTSX-nofallback.xml} (100%) rename tests/cputestdata/{x86-Haswell-noTSX.xml => x86_64-Haswell-noTSX.xml} (100%) rename tests/cputestdata/{x86-Haswell.xml => x86_64-Haswell.xml} (100%) rename tests/cputestdata/{x86-baseline-1-result.xml => x86_64-baseline-1-result.xml} (100%) rename tests/cputestdata/{x86-baseline-1.xml => x86_64-baseline-1.xml} (100%) rename tests/cputestdata/{x86-baseline-2-result.xml => x86_64-baseline-2-result.xml} (100%) rename tests/cputestdata/{x86-baseline-2.xml => x86_64-baseline-2.xml} (100%) rename tests/cputestdata/{x86-baseline-3-expanded.xml => x86_64-baseline-3-expanded.xml} (100%) rename tests/cputestdata/{x86-baseline-3-result.xml => x86_64-baseline-3-result.xml} (100%) rename tests/cputestdata/{x86-baseline-3.xml => x86_64-baseline-3.xml} (100%) rename tests/cputestdata/{x86-baseline-4-expanded.xml => x86_64-baseline-4-expanded.xml} (100%) rename tests/cputestdata/{x86-baseline-4-result.xml => x86_64-baseline-4-result.xml} (100%) rename tests/cputestdata/{x86-baseline-4.xml => x86_64-baseline-4.xml} (100%) rename tests/cputestdata/{x86-baseline-5-expanded.xml => x86_64-baseline-5-expanded.xml} (100%) rename tests/cputestdata/{x86-baseline-5-result.xml => x86_64-baseline-5-result.xml} (100%) rename tests/cputestdata/{x86-baseline-5.xml => x86_64-baseline-5.xml} (100%) rename tests/cputestdata/{x86-baseline-6-migratable.xml => x86_64-baseline-6-migratable.xml} (100%) rename tests/cputestdata/{x86-baseline-6-result.xml => x86_64-baseline-6-result.xml} (100%) rename tests/cputestdata/{x86-baseline-6.xml => x86_64-baseline-6.xml} (100%) rename tests/cputestdata/{x86-baseline-7-result.xml => x86_64-baseline-7-result.xml} (100%) rename tests/cputestdata/{x86-baseline-7.xml => x86_64-baseline-7.xml} (100%) rename tests/cputestdata/{x86-baseline-8-result.xml => x86_64-baseline-8-result.xml} (100%) rename tests/cputestdata/{x86-baseline-8.xml => x86_64-baseline-8.xml} (100%) rename tests/cputestdata/{x86-baseline-incompatible-vendors.xml => x86_64-baseline-incompatible-vendors.xml} (100%) rename tests/cputestdata/{x86-baseline-no-vendor-result.xml => x86_64-baseline-no-vendor-result.xml} (100%) rename tests/cputestdata/{x86-baseline-no-vendor.xml => x86_64-baseline-no-vendor.xml} (100%) rename tests/cputestdata/{x86-baseline-some-vendors-result.xml => x86_64-baseline-some-vendors-result.xml} (100%) rename tests/cputestdata/{x86-baseline-some-vendors.xml => x86_64-baseline-some-vendors.xml} (100%) rename tests/cputestdata/{x86-bogus-feature.xml => x86_64-bogus-feature.xml} (100%) rename tests/cputestdata/{x86-bogus-model.xml => x86_64-bogus-model.xml} (100%) rename tests/cputestdata/{x86-bogus-vendor.xml => x86_64-bogus-vendor.xml} (100%) rename tests/cputestdata/{x86-cpuid-A10-5800K-guest.xml => x86_64-cpuid-A10-5800K-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-A10-5800K-host.xml => x86_64-cpuid-A10-5800K-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-A10-5800K-json.xml => x86_64-cpuid-A10-5800K-json.xml} (96%) create mode 100644 tests/cputestdata/x86_64-cpuid-A10-5800K.json rename tests/cputestdata/{x86-cpuid-A10-5800K.xml => x86_64-cpuid-A10-5800K.xml} (100%) rename tests/cputestdata/{x86-cpuid-Atom-D510-guest.xml => x86_64-cpuid-Atom-D510-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Atom-D510-host.xml => x86_64-cpuid-Atom-D510-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Atom-D510.xml => x86_64-cpuid-Atom-D510.xml} (100%) rename tests/cputestdata/{x86-cpuid-Atom-N450-guest.xml => x86_64-cpuid-Atom-N450-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Atom-N450-host.xml => x86_64-cpuid-Atom-N450-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Atom-N450.xml => x86_64-cpuid-Atom-N450.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i5-2500-guest.xml => x86_64-cpuid-Core-i5-2500-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i5-2500-host.xml => x86_64-cpuid-Core-i5-2500-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i5-2540M-json.xml => x86_64-cpuid-Core-i5-2500-json.xml} (94%) create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i5-2500.json rename tests/cputestdata/{x86-cpuid-Core-i5-2500.xml => x86_64-cpuid-Core-i5-2500.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i5-2540M-guest.xml => x86_64-cpuid-Core-i5-2540M-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i5-2540M-host.xml => x86_64-cpuid-Core-i5-2540M-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i5-2500-json.xml => x86_64-cpuid-Core-i5-2540M-json.xml} (94%) create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i5-2540M.json rename tests/cputestdata/{x86-cpuid-Core-i5-2540M.xml => x86_64-cpuid-Core-i5-2540M.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i5-4670T-guest.xml => x86_64-cpuid-Core-i5-4670T-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i5-4670T-host.xml => x86_64-cpuid-Core-i5-4670T-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i5-4670T-json.xml => x86_64-cpuid-Core-i5-4670T-json.xml} (95%) create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i5-4670T.json rename tests/cputestdata/{x86-cpuid-Core-i5-4670T.xml => x86_64-cpuid-Core-i5-4670T.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i5-6600-guest.xml => x86_64-cpuid-Core-i5-6600-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i5-6600-host.xml => x86_64-cpuid-Core-i5-6600-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i5-6600-json.xml => x86_64-cpuid-Core-i5-6600-json.xml} (93%) create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i5-6600.json rename tests/cputestdata/{x86-cpuid-Core-i5-6600.xml => x86_64-cpuid-Core-i5-6600.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-2600-guest.xml => x86_64-cpuid-Core-i7-2600-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-2600-host.xml => x86_64-cpuid-Core-i7-2600-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-2600-json.xml => x86_64-cpuid-Core-i7-2600-json.xml} (93%) create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-2600.json rename tests/cputestdata/{x86-cpuid-Core-i7-2600.xml => x86_64-cpuid-Core-i7-2600.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-3520M-guest.xml => x86_64-cpuid-Core-i7-3520M-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-3520M-host.xml => x86_64-cpuid-Core-i7-3520M-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-3520M.xml => x86_64-cpuid-Core-i7-3520M.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-3740QM-guest.xml => x86_64-cpuid-Core-i7-3740QM-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-3740QM-host.xml => x86_64-cpuid-Core-i7-3740QM-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-3740QM-json.xml => x86_64-cpuid-Core-i7-3740QM-json.xml} (93%) create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-3740QM.json rename tests/cputestdata/{x86-cpuid-Core-i7-3740QM.xml => x86_64-cpuid-Core-i7-3740QM.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-3770-guest.xml => x86_64-cpuid-Core-i7-3770-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-3770-host.xml => x86_64-cpuid-Core-i7-3770-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-3770-json.xml => x86_64-cpuid-Core-i7-3770-json.xml} (92%) create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-3770.json rename tests/cputestdata/{x86-cpuid-Core-i7-3770.xml => x86_64-cpuid-Core-i7-3770.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-4600U-guest.xml => x86_64-cpuid-Core-i7-4600U-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-4600U-host.xml => x86_64-cpuid-Core-i7-4600U-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-4600U-json.xml => x86_64-cpuid-Core-i7-4600U-json.xml} (95%) create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-4600U.json rename tests/cputestdata/{x86-cpuid-Core-i7-4600U.xml => x86_64-cpuid-Core-i7-4600U.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-5600U-guest.xml => x86_64-cpuid-Core-i7-5600U-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-5600U-host.xml => x86_64-cpuid-Core-i7-5600U-host.xml} (100%) create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-5600U-json.xml create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-5600U.json rename tests/cputestdata/{x86-cpuid-Core-i7-5600U.xml => x86_64-cpuid-Core-i7-5600U.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core2-E6850-guest.xml => x86_64-cpuid-Core2-E6850-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core2-E6850-host.xml => x86_64-cpuid-Core2-E6850-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core2-E6850-json.xml => x86_64-cpuid-Core2-E6850-json.xml} (75%) create mode 100644 tests/cputestdata/x86_64-cpuid-Core2-E6850.json rename tests/cputestdata/{x86-cpuid-Core2-E6850.xml => x86_64-cpuid-Core2-E6850.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core2-Q9500-guest.xml => x86_64-cpuid-Core2-Q9500-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core2-Q9500-host.xml => x86_64-cpuid-Core2-Q9500-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core2-Q9500.xml => x86_64-cpuid-Core2-Q9500.xml} (100%) rename tests/cputestdata/{x86-cpuid-FX-8150-guest.xml => x86_64-cpuid-FX-8150-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-FX-8150-host.xml => x86_64-cpuid-FX-8150-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-FX-8150.xml => x86_64-cpuid-FX-8150.xml} (100%) rename tests/cputestdata/{x86-cpuid-Opteron-1352-guest.xml => x86_64-cpuid-Opteron-1352-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Opteron-1352-host.xml => x86_64-cpuid-Opteron-1352-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Opteron-1352.xml => x86_64-cpuid-Opteron-1352.xml} (100%) rename tests/cputestdata/{x86-cpuid-Opteron-2350-guest.xml => x86_64-cpuid-Opteron-2350-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Opteron-2350-host.xml => x86_64-cpuid-Opteron-2350-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Opteron-2350-json.xml => x86_64-cpuid-Opteron-2350-json.xml} (97%) create mode 100644 tests/cputestdata/x86_64-cpuid-Opteron-2350.json rename tests/cputestdata/{x86-cpuid-Opteron-2350.xml => x86_64-cpuid-Opteron-2350.xml} (100%) rename tests/cputestdata/{x86-cpuid-Opteron-6234-guest.xml => x86_64-cpuid-Opteron-6234-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Opteron-6234-host.xml => x86_64-cpuid-Opteron-6234-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Opteron-6234-json.xml => x86_64-cpuid-Opteron-6234-json.xml} (96%) create mode 100644 tests/cputestdata/x86_64-cpuid-Opteron-6234.json rename tests/cputestdata/{x86-cpuid-Opteron-6234.xml => x86_64-cpuid-Opteron-6234.xml} (100%) rename tests/cputestdata/{x86-cpuid-Opteron-6282-guest.xml => x86_64-cpuid-Opteron-6282-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Opteron-6282-host.xml => x86_64-cpuid-Opteron-6282-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Opteron-6282.xml => x86_64-cpuid-Opteron-6282.xml} (100%) rename tests/cputestdata/{x86-cpuid-Pentium-P6100-guest.xml => x86_64-cpuid-Pentium-P6100-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Pentium-P6100-host.xml => x86_64-cpuid-Pentium-P6100-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Pentium-P6100.xml => x86_64-cpuid-Pentium-P6100.xml} (100%) rename tests/cputestdata/{x86-cpuid-Phenom-B95-guest.xml => x86_64-cpuid-Phenom-B95-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Phenom-B95-host.xml => x86_64-cpuid-Phenom-B95-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Phenom-B95-json.xml => x86_64-cpuid-Phenom-B95-json.xml} (97%) create mode 100644 tests/cputestdata/x86_64-cpuid-Phenom-B95.json rename tests/cputestdata/{x86-cpuid-Phenom-B95.xml => x86_64-cpuid-Phenom-B95.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-5110-guest.xml => x86_64-cpuid-Xeon-5110-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-5110-host.xml => x86_64-cpuid-Xeon-5110-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-5110.xml => x86_64-cpuid-Xeon-5110.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-E3-1245-guest.xml => x86_64-cpuid-Xeon-E3-1245-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-E3-1245-host.xml => x86_64-cpuid-Xeon-E3-1245-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-E3-1245-json.xml => x86_64-cpuid-Xeon-E3-1245-json.xml} (93%) create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E3-1245.json rename tests/cputestdata/{x86-cpuid-Xeon-E3-1245.xml => x86_64-cpuid-Xeon-E3-1245.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-E5-2630-guest.xml => x86_64-cpuid-Xeon-E5-2630-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-E5-2630-host.xml => x86_64-cpuid-Xeon-E5-2630-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-E5-2630-json.xml => x86_64-cpuid-Xeon-E5-2630-json.xml} (95%) create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E5-2630.json rename tests/cputestdata/{x86-cpuid-Xeon-E5-2630.xml => x86_64-cpuid-Xeon-E5-2630.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-E5-2650-guest.xml => x86_64-cpuid-Xeon-E5-2650-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-E5-2650-host.xml => x86_64-cpuid-Xeon-E5-2650-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-E5-2650-json.xml => x86_64-cpuid-Xeon-E5-2650-json.xml} (94%) create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E5-2650.json rename tests/cputestdata/{x86-cpuid-Xeon-E5-2650.xml => x86_64-cpuid-Xeon-E5-2650.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-E7-4820-guest.xml => x86_64-cpuid-Xeon-E7-4820-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-E7-4820-host.xml => x86_64-cpuid-Xeon-E7-4820-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-E7-4820-json.xml => x86_64-cpuid-Xeon-E7-4820-json.xml} (94%) create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7-4820.json rename tests/cputestdata/{x86-cpuid-Xeon-E7-4820.xml => x86_64-cpuid-Xeon-E7-4820.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-W3520-guest.xml => x86_64-cpuid-Xeon-W3520-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-W3520-host.xml => x86_64-cpuid-Xeon-W3520-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-W3520-json.xml => x86_64-cpuid-Xeon-W3520-json.xml} (93%) create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-W3520.json rename tests/cputestdata/{x86-cpuid-Xeon-W3520.xml => x86_64-cpuid-Xeon-W3520.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-X5460-guest.xml => x86_64-cpuid-Xeon-X5460-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-X5460-host.xml => x86_64-cpuid-Xeon-X5460-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-X5460.xml => x86_64-cpuid-Xeon-X5460.xml} (100%) rename tests/cputestdata/{x86-exact-disable-extra.xml => x86_64-exact-disable-extra.xml} (100%) rename tests/cputestdata/{x86-exact-disable.xml => x86_64-exact-disable.xml} (100%) rename tests/cputestdata/{x86-exact-disable2.xml => x86_64-exact-disable2.xml} (100%) rename tests/cputestdata/{x86-exact-forbid-extra.xml => x86_64-exact-forbid-extra.xml} (100%) rename tests/cputestdata/{x86-exact-forbid.xml => x86_64-exact-forbid.xml} (100%) rename tests/cputestdata/{x86-exact-force-Haswell.xml => x86_64-exact-force-Haswell.xml} (100%) rename tests/cputestdata/{x86-exact-force.xml => x86_64-exact-force.xml} (100%) rename tests/cputestdata/{x86-exact-require-extra.xml => x86_64-exact-require-extra.xml} (100%) rename tests/cputestdata/{x86-exact-require.xml => x86_64-exact-require.xml} (100%) rename tests/cputestdata/{x86-exact.xml => x86_64-exact.xml} (100%) rename tests/cputestdata/{x86-guest-nofallback.xml => x86_64-guest-nofallback.xml} (100%) rename tests/cputestdata/{x86-guest.xml => x86_64-guest.xml} (100%) rename tests/cputestdata/{x86-host+guest,model486-result.xml => x86_64-host+guest,model486-result.xml} (100%) rename tests/cputestdata/{x86-host+guest,models-result.xml => x86_64-host+guest,models-result.xml} (100%) rename tests/cputestdata/{x86-host+guest-result.xml => x86_64-host+guest-result.xml} (100%) rename tests/cputestdata/{x86-host+guest.xml => x86_64-host+guest.xml} (100%) rename tests/cputestdata/{x86-host+host+host-model,models-result.xml => x86_64-host+host+host-model,models-result.xml} (100%) rename tests/cputestdata/{x86-host+host-model-nofallback.xml => x86_64-host+host-model-nofallback.xml} (100%) rename tests/cputestdata/{x86-host+host-model.xml => x86_64-host+host-model.xml} (100%) rename tests/cputestdata/{x86-host+host-passthrough-features.xml => x86_64-host+host-passthrough-features.xml} (100%) rename tests/cputestdata/{x86-host+host-passthrough.xml => x86_64-host+host-passthrough.xml} (100%) rename tests/cputestdata/{x86-host+min.xml => x86_64-host+min.xml} (100%) rename tests/cputestdata/{x86-host+penryn-force-result.xml => x86_64-host+penryn-force-result.xml} (100%) rename tests/cputestdata/{x86-host+pentium3.xml => x86_64-host+pentium3.xml} (100%) rename tests/cputestdata/{x86-host+strict-force-extra-result.xml => x86_64-host+strict-force-extra-result.xml} (100%) rename tests/cputestdata/{x86-host-Haswell-noTSX+Haswell,haswell-result.xml => x86_64-host-Haswell-noTSX+Haswell,haswell-result.xml} (100%) rename tests/cputestdata/{x86-host-Haswell-noTSX+Haswell-noTSX,haswell-result.xml => x86_64-host-Haswell-noTSX+Haswell-noTSX,haswell-result.xml} (100%) rename tests/cputestdata/{x86-host-Haswell-noTSX+Haswell-noTSX-result.xml => x86_64-host-Haswell-noTSX+Haswell-noTSX-result.xml} (100%) rename tests/cputestdata/{x86-host-Haswell-noTSX.xml => x86_64-host-Haswell-noTSX.xml} (100%) rename tests/cputestdata/{x86-host-SandyBridge.xml => x86_64-host-SandyBridge.xml} (100%) rename tests/cputestdata/{x86-host-amd-fake.xml => x86_64-host-amd-fake.xml} (100%) rename tests/cputestdata/{x86-host-amd.xml => x86_64-host-amd.xml} (100%) rename tests/cputestdata/{x86-host-better+pentium3-result.xml => x86_64-host-better+pentium3-result.xml} (100%) rename tests/cputestdata/{x86-host-better.xml => x86_64-host-better.xml} (100%) rename tests/cputestdata/{x86-host-incomp-arch.xml => x86_64-host-incomp-arch.xml} (100%) rename tests/cputestdata/{x86-host-invtsc+host-model.xml => x86_64-host-invtsc+host-model.xml} (100%) rename tests/cputestdata/{x86-host-invtsc.xml => x86_64-host-invtsc.xml} (100%) rename tests/cputestdata/{x86-host-model-nofallback.xml => x86_64-host-model-nofallback.xml} (100%) rename tests/cputestdata/{x86-host-model.xml => x86_64-host-model.xml} (100%) rename tests/cputestdata/{x86-host-no-vendor.xml => x86_64-host-no-vendor.xml} (100%) rename tests/cputestdata/{x86-host-passthrough-features.xml => x86_64-host-passthrough-features.xml} (100%) rename tests/cputestdata/{x86-host-passthrough.xml => x86_64-host-passthrough.xml} (100%) rename tests/cputestdata/{x86-host-worse+guest-result.xml => x86_64-host-worse+guest-result.xml} (100%) rename tests/cputestdata/{x86-host-worse.xml => x86_64-host-worse.xml} (100%) rename tests/cputestdata/{x86-host.xml => x86_64-host.xml} (100%) rename tests/cputestdata/{x86-min.xml => x86_64-min.xml} (100%) rename tests/cputestdata/{x86-penryn-force.xml => x86_64-penryn-force.xml} (100%) rename tests/cputestdata/{x86-pentium3-amd.xml => x86_64-pentium3-amd.xml} (100%) rename tests/cputestdata/{x86-pentium3.xml => x86_64-pentium3.xml} (100%) rename tests/cputestdata/{x86-strict-disable.xml => x86_64-strict-disable.xml} (100%) rename tests/cputestdata/{x86-strict-force-extra.xml => x86_64-strict-force-extra.xml} (100%) rename tests/cputestdata/{x86-strict-full.xml => x86_64-strict-full.xml} (100%) rename tests/cputestdata/{x86-strict.xml => x86_64-strict.xml} (100%) create mode 100644 tests/domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml create mode 100644 tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml create mode 100644 tests/qemucapabilitiesdata/caps_2.9.0.x86_64.replies create mode 100644 tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml -- 2.11.1

The guest CPU definition has always been updated automatically during migration. And currently we just transform any host-model CPU into a custom one when a domain starts. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - no change docs/formatdomain.html.in | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 0a115f5dc..bc125ed63 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -1307,16 +1307,6 @@ a migration is attempted then the guest may hang or crash upon resuming execution on the destination host.</dd> </dl> - - In both <code>host-model</code> and <code>host-passthrough</code> - mode, the real (approximate in <code>host-passthrough</code> mode) CPU - definition which would be used on current host can be determined by - specifying <code>VIR_DOMAIN_XML_UPDATE_CPU</code> flag when calling - <code>virDomainGetXMLDesc</code> API. When running a guest that might - be prone to operating system reactivation when presented with - different hardware, and which will be migrated between hosts with - different capabilities, you can use this output to rewrite XML to the - <code>custom</code> mode for more robust migration. </dd> <dt><code>model</code></dt> -- 2.11.1

On 02/15/2017 11:44 AM, Jiri Denemark wrote:
The guest CPU definition has always been updated automatically during migration. And currently we just transform any host-model CPU into a custom one when a domain starts.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
docs/formatdomain.html.in | 10 ---------- 1 file changed, 10 deletions(-)
ACK John

On Tue, Feb 21, 2017 at 09:19:54 -0500, John Ferlan wrote:
On 02/15/2017 11:44 AM, Jiri Denemark wrote:
The guest CPU definition has always been updated automatically during migration. And currently we just transform any host-model CPU into a custom one when a domain starts.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
docs/formatdomain.html.in | 10 ---------- 1 file changed, 10 deletions(-)
ACK
Thanks. I pushed it since it didn't have any dependencies on the other patches in this series. Jirka

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - no change docs/formatdomain.html.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index bc125ed63..294d3c467 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -1282,7 +1282,7 @@ it's a good idea to avoid using <code>host-model</code> and use <code>custom</code> mode with just the CPU model from host capabilities XML. - <span class="since">(Since 1.2.11)</span>. PowerISA allows + <span class="since">Since 1.2.11</span> PowerISA allows processors to run VMs in binary compatibility mode supporting an older version of ISA. Libvirt on PowerPC architecture uses the <code>host-model</code> to signify a guest mode CPU running in -- 2.11.1

On 02/15/2017 11:44 AM, Jiri Denemark wrote:
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
docs/formatdomain.html.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
ACK John

On Tue, Feb 21, 2017 at 09:20:02 -0500, John Ferlan wrote:
On 02/15/2017 11:44 AM, Jiri Denemark wrote:
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
docs/formatdomain.html.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
ACK
Thanks. I pushed it since it didn't have any dependencies on the other patches in this series. Jirka

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Generated from Eduardo's work/x86-query-cpu-expansion-full branch. Version 2: - no change .../qemucapabilitiesdata/caps_2.9.0.x86_64.replies | 14710 +++++++++++++++++++ tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml | 468 + tests/qemucapabilitiestest.c | 1 + 3 files changed, 15179 insertions(+) create mode 100644 tests/qemucapabilitiesdata/caps_2.9.0.x86_64.replies create mode 100644 tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml diff --git a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.replies b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.replies new file mode 100644 index 000000000..8d54788df --- /dev/null +++ b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.replies @@ -0,0 +1,14710 @@ +{ + "QMP": { + "version": { + "qemu": { + "micro": 50, + "minor": 8, + "major": 2 + }, + "package": " (v2.8.0-877-g38e4b757b4)" + }, + "capabilities": [ + ] + } +} + +{ + "return": { + }, + "id": "libvirt-1" +} + +{ + "return": { + "qemu": { + "micro": 50, + "minor": 8, + "major": 2 + }, + "package": " (v2.8.0-877-g38e4b757b4)" + }, + "id": "libvirt-2" +} + +{ + "return": { + "arch": "x86_64" + }, + "id": "libvirt-3" +} + +{ + "return": [ + { + "name": "xen-set-global-dirty-log" + }, + { + "name": "xen-save-devices-state" + }, + { + "name": "xen-load-devices-state" + }, + { + "name": "x-colo-lost-heartbeat" + }, + { + "name": "x-blockdev-remove-medium" + }, + { + "name": "x-blockdev-insert-medium" + }, + { + "name": "x-blockdev-del" + }, + { + "name": "x-blockdev-change" + }, + { + "name": "transaction" + }, + { + "name": "trace-event-set-state" + }, + { + "name": "trace-event-get-state" + }, + { + "name": "system_wakeup" + }, + { + "name": "system_reset" + }, + { + "name": "system_powerdown" + }, + { + "name": "stop" + }, + { + "name": "set_password" + }, + { + "name": "set_link" + }, + { + "name": "send-key" + }, + { + "name": "screendump" + }, + { + "name": "rtc-reset-reinjection" + }, + { + "name": "ringbuf-write" + }, + { + "name": "ringbuf-read" + }, + { + "name": "remove-fd" + }, + { + "name": "quit" + }, + { + "name": "query-vnc-servers" + }, + { + "name": "query-vnc" + }, + { + "name": "query-version" + }, + { + "name": "query-uuid" + }, + { + "name": "query-tpm-types" + }, + { + "name": "query-tpm-models" + }, + { + "name": "query-tpm" + }, + { + "name": "query-target" + }, + { + "name": "query-status" + }, + { + "name": "query-spice" + }, + { + "name": "query-rx-filter" + }, + { + "name": "query-rocker-ports" + }, + { + "name": "query-rocker-of-dpa-groups" + }, + { + "name": "query-rocker-of-dpa-flows" + }, + { + "name": "query-rocker" + }, + { + "name": "query-pci" + }, + { + "name": "query-named-block-nodes" + }, + { + "name": "query-name" + }, + { + "name": "query-migrate-parameters" + }, + { + "name": "query-migrate-capabilities" + }, + { + "name": "query-migrate-cache-size" + }, + { + "name": "query-migrate" + }, + { + "name": "query-mice" + }, + { + "name": "query-memory-devices" + }, + { + "name": "query-memdev" + }, + { + "name": "query-machines" + }, + { + "name": "query-kvm" + }, + { + "name": "query-iothreads" + }, + { + "name": "query-hotpluggable-cpus" + }, + { + "name": "query-fdsets" + }, + { + "name": "query-events" + }, + { + "name": "query-dump-guest-memory-capability" + }, + { + "name": "query-dump" + }, + { + "name": "query-cpus" + }, + { + "name": "query-cpu-model-expansion" + }, + { + "name": "query-cpu-definitions" + }, + { + "name": "query-commands" + }, + { + "name": "query-command-line-options" + }, + { + "name": "query-chardev-backends" + }, + { + "name": "query-chardev" + }, + { + "name": "query-blockstats" + }, + { + "name": "query-block-jobs" + }, + { + "name": "query-block" + }, + { + "name": "query-balloon" + }, + { + "name": "query-acpi-ospm-status" + }, + { + "name": "qom-set" + }, + { + "name": "qom-list-types" + }, + { + "name": "qom-list" + }, + { + "name": "qom-get" + }, + { + "name": "qmp_capabilities" + }, + { + "name": "pmemsave" + }, + { + "name": "object-del" + }, + { + "name": "object-add" + }, + { + "name": "netdev_del" + }, + { + "name": "nbd-server-stop" + }, + { + "name": "nbd-server-start" + }, + { + "name": "nbd-server-add" + }, + { + "name": "migrate_set_speed" + }, + { + "name": "migrate_set_downtime" + }, + { + "name": "migrate_cancel" + }, + { + "name": "migrate-start-postcopy" + }, + { + "name": "migrate-set-parameters" + }, + { + "name": "migrate-set-capabilities" + }, + { + "name": "migrate-set-cache-size" + }, + { + "name": "migrate-incoming" + }, + { + "name": "migrate" + }, + { + "name": "memsave" + }, + { + "name": "input-send-event" + }, + { + "name": "inject-nmi" + }, + { + "name": "human-monitor-command" + }, + { + "name": "getfd" + }, + { + "name": "expire_password" + }, + { + "name": "eject" + }, + { + "name": "dump-guest-memory" + }, + { + "name": "drive-mirror" + }, + { + "name": "drive-backup" + }, + { + "name": "device_del" + }, + { + "name": "device-list-properties" + }, + { + "name": "cpu-add" + }, + { + "name": "cpu" + }, + { + "name": "cont" + }, + { + "name": "closefd" + }, + { + "name": "client_migrate_info" + }, + { + "name": "chardev-remove" + }, + { + "name": "chardev-add" + }, + { + "name": "change-vnc-password" + }, + { + "name": "change-backing-file" + }, + { + "name": "change" + }, + { + "name": "blockdev-snapshot-sync" + }, + { + "name": "blockdev-snapshot-internal-sync" + }, + { + "name": "blockdev-snapshot-delete-internal-sync" + }, + { + "name": "blockdev-snapshot" + }, + { + "name": "blockdev-open-tray" + }, + { + "name": "blockdev-mirror" + }, + { + "name": "blockdev-close-tray" + }, + { + "name": "blockdev-change-medium" + }, + { + "name": "blockdev-backup" + }, + { + "name": "blockdev-add" + }, + { + "name": "block_set_io_throttle" + }, + { + "name": "block_resize" + }, + { + "name": "block_passwd" + }, + { + "name": "block-stream" + }, + { + "name": "block-set-write-threshold" + }, + { + "name": "block-job-set-speed" + }, + { + "name": "block-job-resume" + }, + { + "name": "block-job-pause" + }, + { + "name": "block-job-complete" + }, + { + "name": "block-job-cancel" + }, + { + "name": "block-dirty-bitmap-remove" + }, + { + "name": "block-dirty-bitmap-clear" + }, + { + "name": "block-dirty-bitmap-add" + }, + { + "name": "block-commit" + }, + { + "name": "balloon" + }, + { + "name": "add_client" + }, + { + "name": "add-fd" + }, + { + "name": "netdev_add" + }, + { + "name": "device_add" + }, + { + "name": "query-qmp-schema" + } + ], + "id": "libvirt-4" +} + +{ + "return": { + "fd": 16, + "fdset-id": 0 + }, + "id": "libvirt-5" +} + +{ + "id": "libvirt-6", + "error": { + "class": "DeviceNotFound", + "desc": "Device 'bogus' not found" + } +} + +{ + "return": { + "enabled": true, + "present": true + }, + "id": "libvirt-7" +} + +{ + "return": [ + { + "name": "WATCHDOG" + }, + { + "name": "WAKEUP" + }, + { + "name": "VSERPORT_CHANGE" + }, + { + "name": "VNC_INITIALIZED" + }, + { + "name": "VNC_DISCONNECTED" + }, + { + "name": "VNC_CONNECTED" + }, + { + "name": "SUSPEND_DISK" + }, + { + "name": "SUSPEND" + }, + { + "name": "STOP" + }, + { + "name": "SPICE_MIGRATE_COMPLETED" + }, + { + "name": "SPICE_INITIALIZED" + }, + { + "name": "SPICE_DISCONNECTED" + }, + { + "name": "SPICE_CONNECTED" + }, + { + "name": "SHUTDOWN" + }, + { + "name": "RTC_CHANGE" + }, + { + "name": "RESUME" + }, + { + "name": "RESET" + }, + { + "name": "QUORUM_REPORT_BAD" + }, + { + "name": "QUORUM_FAILURE" + }, + { + "name": "POWERDOWN" + }, + { + "name": "NIC_RX_FILTER_CHANGED" + }, + { + "name": "MIGRATION_PASS" + }, + { + "name": "MIGRATION" + }, + { + "name": "MEM_UNPLUG_ERROR" + }, + { + "name": "GUEST_PANICKED" + }, + { + "name": "DUMP_COMPLETED" + }, + { + "name": "DEVICE_TRAY_MOVED" + }, + { + "name": "DEVICE_DELETED" + }, + { + "name": "BLOCK_WRITE_THRESHOLD" + }, + { + "name": "BLOCK_JOB_READY" + }, + { + "name": "BLOCK_JOB_ERROR" + }, + { + "name": "BLOCK_JOB_COMPLETED" + }, + { + "name": "BLOCK_JOB_CANCELLED" + }, + { + "name": "BLOCK_IO_ERROR" + }, + { + "name": "BLOCK_IMAGE_CORRUPTED" + }, + { + "name": "BALLOON_CHANGE" + }, + { + "name": "ACPI_DEVICE_OST" + } + ], + "id": "libvirt-8" +} + +{ + "return": [ + { + "name": "vhost-vsock-pci" + }, + { + "name": "xen-sysdev" + }, + { + "name": "virtio-tablet-pci" + }, + { + "name": "generic-sdhci" + }, + { + "name": "pc-0.13-machine" + }, + { + "name": "cfi.pflash01" + }, + { + "name": "i82551" + }, + { + "name": "i82550" + }, + { + "name": "Westmere-x86_64-cpu" + }, + { + "name": "pci-serial-4x" + }, + { + "name": "cryptodev-backend" + }, + { + "name": "Penryn-x86_64-cpu" + }, + { + "name": "Haswell-x86_64-cpu" + }, + { + "name": "iothread" + }, + { + "name": "pc-i440fx-2.9-machine" + }, + { + "name": "Skylake-Client-x86_64-cpu" + }, + { + "name": "virtio-gpu-device" + }, + { + "name": "Opteron_G3-x86_64-cpu" + }, + { + "name": "e1000e" + }, + { + "name": "Broadwell-x86_64-cpu" + }, + { + "name": "piix3-ide" + }, + { + "name": "floppy-bus" + }, + { + "name": "base-x86_64-cpu" + }, + { + "name": "isa-parallel" + }, + { + "name": "megasas" + }, + { + "name": "i2c-bus" + }, + { + "name": "pc-q35-2.4-machine" + }, + { + "name": "vhost-vsock-device" + }, + { + "name": "usb-braille" + }, + { + "name": "mptsas1068" + }, + { + "name": "vmware-svga" + }, + { + "name": "PIIX3-xen" + }, + { + "name": "ccid-bus" + }, + { + "name": "scsi-cd" + }, + { + "name": "pc-i440fx-2.0-machine" + }, + { + "name": "isa-serial" + }, + { + "name": "usb-ehci" + }, + { + "name": "container" + }, + { + "name": "filter-buffer" + }, + { + "name": "host-x86_64-cpu" + }, + { + "name": "pci-serial-2x" + }, + { + "name": "scsi-generic" + }, + { + "name": "piix4-ide" + }, + { + "name": "pc-1.0-machine" + }, + { + "name": "virtio-net-pci" + }, + { + "name": "hyperv-testdev" + }, + { + "name": "pc-dimm" + }, + { + "name": "pc-q35-2.8-machine" + }, + { + "name": "Haswell-noTSX-x86_64-cpu" + }, + { + "name": "pc-i440fx-2.1-machine" + }, + { + "name": "virtio-mouse-device" + }, + { + "name": "virtio-mouse-pci" + }, + { + "name": "isa-debugcon" + }, + { + "name": "AMDVI-PCI" + }, + { + "name": "ide-hd" + }, + { + "name": "virtio-vga" + }, + { + "name": "qemu64-x86_64-cpu" + }, + { + "name": "isa-ipmi-bt" + }, + { + "name": "rng-egd" + }, + { + "name": "isa-pcspk" + }, + { + "name": "isa-pit" + }, + { + "name": "pc-1.1-machine" + }, + { + "name": "ich9-usb-ehci2" + }, + { + "name": "ich9-usb-ehci1" + }, + { + "name": "pxb-host" + }, + { + "name": "pc-q35-2.9-machine" + }, + { + "name": "intel-iommu" + }, + { + "name": "irq" + }, + { + "name": "ipmi-bmc-sim" + }, + { + "name": "cirrus-vga" + }, + { + "name": "virtconsole" + }, + { + "name": "virtio-rng-pci" + }, + { + "name": "PCIE" + }, + { + "name": "vfio-amd-xgbe" + }, + { + "name": "pentium3-x86_64-cpu" + }, + { + "name": "qxl-vga" + }, + { + "name": "ioapic" + }, + { + "name": "kvm-pit" + }, + { + "name": "pc-i440fx-2.5-machine" + }, + { + "name": "filter-rewriter" + }, + { + "name": "qio-channel-buffer" + }, + { + "name": "vhost-scsi-pci" + }, + { + "name": "usb-kbd" + }, + { + "name": "xen-apic" + }, + { + "name": "xen-sysbus" + }, + { + "name": "usb-host" + }, + { + "name": "usb-bus" + }, + { + "name": "pc-i440fx-1.4-machine" + }, + { + "name": "PIIX3" + }, + { + "name": "486-x86_64-cpu" + }, + { + "name": "ES1370" + }, + { + "name": "gus" + }, + { + "name": "kvm-pci-assign" + }, + { + "name": "isa-applesmc" + }, + { + "name": "pc-i440fx-2.6-machine" + }, + { + "name": "xen-pci-passthrough" + }, + { + "name": "i82559er" + }, + { + "name": "q35-pcihost" + }, + { + "name": "usb-bt-dongle" + }, + { + "name": "e1000-82545em" + }, + { + "name": "e1000-82544gc" + }, + { + "name": "pc-i440fx-1.5-machine" + }, + { + "name": "or-irq" + }, + { + "name": "pc-0.14-machine" + }, + { + "name": "i6300esb" + }, + { + "name": "mc146818rtc" + }, + { + "name": "AC97" + }, + { + "name": "filter-redirector" + }, + { + "name": "PIIX4_PM" + }, + { + "name": "piix4-usb-uhci" + }, + { + "name": "sysbus-ahci" + }, + { + "name": "virtio-tablet-device" + }, + { + "name": "kvm-ioapic" + }, + { + "name": "pvpanic" + }, + { + "name": "core2duo-x86_64-cpu" + }, + { + "name": "tls-creds-x509" + }, + { + "name": "virtio-9p-pci" + }, + { + "name": "scsi-disk" + }, + { + "name": "vfio-pci-igd-lpc-bridge" + }, + { + "name": "sb16" + }, + { + "name": "qemu-console" + }, + { + "name": "pc-0.15-machine" + }, + { + "name": "usb-mouse" + }, + { + "name": "xenfv-machine" + }, + { + "name": "filter-dump" + }, + { + "name": "virtio-blk-pci" + }, + { + "name": "piix3-usb-uhci" + }, + { + "name": "vfio-calxeda-xgmac" + }, + { + "name": "virtio-scsi-device" + }, + { + "name": "tpci200" + }, + { + "name": "virtio-9p-device" + }, + { + "name": "pc-q35-2.5-machine" + }, + { + "name": "SUNW,fdtwo" + }, + { + "name": "hda-output" + }, + { + "name": "i8257" + }, + { + "name": "Opteron_G4-x86_64-cpu" + }, + { + "name": "filter-mirror" + }, + { + "name": "virtio-mmio" + }, + { + "name": "isa-i8259" + }, + { + "name": "System" + }, + { + "name": "pvscsi" + }, + { + "name": "amd-iommu" + }, + { + "name": "virtio-net-device" + }, + { + "name": "colo-compare" + }, + { + "name": "sd-bus" + }, + { + "name": "qio-channel-file" + }, + { + "name": "input-linux" + }, + { + "name": "usb-hub" + }, + { + "name": "IvyBridge-x86_64-cpu" + }, + { + "name": "hda-duplex" + }, + { + "name": "igd-passthrough-i440FX" + }, + { + "name": "qio-dns-resolver" + }, + { + "name": "virtio-keyboard-pci" + }, + { + "name": "igd-passthrough-isa-bridge" + }, + { + "name": "rocker" + }, + { + "name": "nec-usb-xhci" + }, + { + "name": "megasas-gen2" + }, + { + "name": "pci-ohci" + }, + { + "name": "ib700" + }, + { + "name": "xio3130-downstream" + }, + { + "name": "isapc-machine" + }, + { + "name": "ipoctal232" + }, + { + "name": "ide-cd" + }, + { + "name": "tls-creds-anon" + }, + { + "name": "pc-i440fx-2.2-machine" + }, + { + "name": "isabus-bridge" + }, + { + "name": "isa-ipmi-kcs" + }, + { + "name": "memory-backend-file" + }, + { + "name": "isa-ide" + }, + { + "name": "virtio-keyboard-device" + }, + { + "name": "virtio-crypto-pci" + }, + { + "name": "isa-vga" + }, + { + "name": "qemu:memory-region" + }, + { + "name": "ipmi-bmc-extern" + }, + { + "name": "rng-random" + }, + { + "name": "kvm-i8259" + }, + { + "name": "i440FX-pcihost" + }, + { + "name": "sga" + }, + { + "name": "tpm-tis" + }, + { + "name": "tpm-passthrough" + }, + { + "name": "pc-1.2-machine" + }, + { + "name": "isa-debug-exit" + }, + { + "name": "Opteron_G1-x86_64-cpu" + }, + { + "name": "pc-testdev" + }, + { + "name": "pc-0.10-machine" + }, + { + "name": "pc-i440fx-2.3-machine" + }, + { + "name": "xen-pvdevice" + }, + { + "name": "qemu32-x86_64-cpu" + }, + { + "name": "pcnet" + }, + { + "name": "apic" + }, + { + "name": "ivshmem" + }, + { + "name": "hpet" + }, + { + "name": "adlib" + }, + { + "name": "qio-channel-command" + }, + { + "name": "lsi53c895a" + }, + { + "name": "secret" + }, + { + "name": "pxb-bus" + }, + { + "name": "usb-audio" + }, + { + "name": "usb-wacom-tablet" + }, + { + "name": "virtio-mmio-bus" + }, + { + "name": "pc-0.11-machine" + }, + { + "name": "kvm-apic" + }, + { + "name": "phenom-x86_64-cpu" + }, + { + "name": "fw_cfg_io" + }, + { + "name": "usb-net" + }, + { + "name": "ioh3420" + }, + { + "name": "virtio-crypto-device" + }, + { + "name": "cs4231a" + }, + { + "name": "dc390" + }, + { + "name": "nvme" + }, + { + "name": "i82801b11-bridge" + }, + { + "name": "kvmvapic" + }, + { + "name": "usb-tablet" + }, + { + "name": "usb-ccid" + }, + { + "name": "sdhci-bus" + }, + { + "name": "pci-bridge-seat" + }, + { + "name": "mch" + }, + { + "name": "pc-i440fx-2.7-machine" + }, + { + "name": "vhost-scsi" + }, + { + "name": "tcg-accel" + }, + { + "name": "ich9-usb-uhci2" + }, + { + "name": "isa-cirrus-vga" + }, + { + "name": "usb-bot" + }, + { + "name": "ICH9-LPC" + }, + { + "name": "edu" + }, + { + "name": "accel" + }, + { + "name": "pxb-pcie-bus" + }, + { + "name": "pc-i440fx-1.6-machine" + }, + { + "name": "lsi53c810" + }, + { + "name": "kvmclock" + }, + { + "name": "loader" + }, + { + "name": "pc-i440fx-2.8-machine" + }, + { + "name": "ich9-usb-uhci4" + }, + { + "name": "virtio-serial-bus" + }, + { + "name": "nvdimm" + }, + { + "name": "virtio-balloon-pci" + }, + { + "name": "ich9-usb-uhci6" + }, + { + "name": "SandyBridge-x86_64-cpu" + }, + { + "name": "esp" + }, + { + "name": "virtio-balloon-device" + }, + { + "name": "x3130-upstream" + }, + { + "name": "ich9-usb-uhci5" + }, + { + "name": "qxl" + }, + { + "name": "intel-hda" + }, + { + "name": "pc-i440fx-1.7-machine" + }, + { + "name": "max-x86_64-cpu" + }, + { + "name": "virtio-serial-device" + }, + { + "name": "ich9-usb-uhci3" + }, + { + "name": "ICH9 SMB" + }, + { + "name": "pxb-pcie" + }, + { + "name": "piix3-ide-xen" + }, + { + "name": "xen-accel" + }, + { + "name": "virtio-input-host-device" + }, + { + "name": "vmxnet3" + }, + { + "name": "IDE" + }, + { + "name": "VGA" + }, + { + "name": "pci-testdev" + }, + { + "name": "ich9-usb-uhci1" + }, + { + "name": "xenpv-machine" + }, + { + "name": "pci-bridge" + }, + { + "name": "SCSI" + }, + { + "name": "none-machine" + }, + { + "name": "sysbus-fdc" + }, + { + "name": "allwinner-ahci" + }, + { + "name": "n270-x86_64-cpu" + }, + { + "name": "pci-serial" + }, + { + "name": "pc-q35-2.6-machine" + }, + { + "name": "athlon-x86_64-cpu" + }, + { + "name": "virtio-rng-device" + }, + { + "name": "am53c974" + }, + { + "name": "ISA" + }, + { + "name": "i8042" + }, + { + "name": "kvm-accel" + }, + { + "name": "i82559c" + }, + { + "name": "floppy" + }, + { + "name": "i82559b" + }, + { + "name": "i82559a" + }, + { + "name": "scsi-hd" + }, + { + "name": "qtest-accel" + }, + { + "name": "virtio-scsi-pci" + }, + { + "name": "hda-micro" + }, + { + "name": "scsi-block" + }, + { + "name": "ich9-intel-hda" + }, + { + "name": "rtl8139" + }, + { + "name": "vmmouse" + }, + { + "name": "pc-q35-2.7-machine" + }, + { + "name": "usb-mtp" + }, + { + "name": "ide-drive" + }, + { + "name": "qio-channel-websock" + }, + { + "name": "fw_cfg_mem" + }, + { + "name": "PCI" + }, + { + "name": "Opteron_G5-x86_64-cpu" + }, + { + "name": "vmport" + }, + { + "name": "coreduo-x86_64-cpu" + }, + { + "name": "xen-backend" + }, + { + "name": "qio-channel-tls" + }, + { + "name": "virtio-serial-pci" + }, + { + "name": "xen-platform" + }, + { + "name": "virtio-input-host-pci" + }, + { + "name": "pentium2-x86_64-cpu" + }, + { + "name": "i82558b" + }, + { + "name": "cryptodev-backend-builtin" + }, + { + "name": "i82558a" + }, + { + "name": "qemu,register" + }, + { + "name": "ne2k_isa" + }, + { + "name": "sdhci-pci" + }, + { + "name": "virtio-pci-bus" + }, + { + "name": "pxb" + }, + { + "name": "port92" + }, + { + "name": "e1000" + }, + { + "name": "Conroe-x86_64-cpu" + }, + { + "name": "kvm64-x86_64-cpu" + }, + { + "name": "filter-replay" + }, + { + "name": "vt82c686b-usb-uhci" + }, + { + "name": "HDA" + }, + { + "name": "usb-storage" + }, + { + "name": "pc-1.3-machine" + }, + { + "name": "usb-serial" + }, + { + "name": "usb-redir" + }, + { + "name": "sysbus-ohci" + }, + { + "name": "i82801" + }, + { + "name": "pc-i440fx-2.4-machine" + }, + { + "name": "i82557b" + }, + { + "name": "usb-uas" + }, + { + "name": "Broadwell-noTSX-x86_64-cpu" + }, + { + "name": "i82557c" + }, + { + "name": "Nehalem-x86_64-cpu" + }, + { + "name": "memory-backend-ram" + }, + { + "name": "i82557a" + }, + { + "name": "virtserialport" + }, + { + "name": "i440FX" + }, + { + "name": "ne2k_pci" + }, + { + "name": "smbus-eeprom" + }, + { + "name": "i82562" + }, + { + "name": "ich9-ahci" + }, + { + "name": "isa-fdc" + }, + { + "name": "sd-card" + }, + { + "name": "pc-0.12-machine" + }, + { + "name": "kvm32-x86_64-cpu" + }, + { + "name": "Opteron_G2-x86_64-cpu" + }, + { + "name": "vfio-pci" + }, + { + "name": "IndustryPack" + }, + { + "name": "virtio-gpu-pci" + }, + { + "name": "ivshmem-plain" + }, + { + "name": "secondary-vga" + }, + { + "name": "ivshmem-doorbell" + }, + { + "name": "qio-channel-socket" + }, + { + "name": "pentium-x86_64-cpu" + }, + { + "name": "virtio-blk-device" + } + ], + "id": "libvirt-9" +} + +{ + "return": [ + { + "name": "secs", + "type": "uint32" + }, + { + "name": "request-merging", + "description": "on/off", + "type": "bool" + }, + { + "name": "min_io_size", + "type": "uint16" + }, + { + "name": "event_idx", + "description": "on/off", + "type": "bool" + }, + { + "name": "serial", + "type": "str" + }, + { + "name": "heads", + "type": "uint32" + }, + { + "name": "ioeventfd", + "description": "on/off", + "type": "bool" + }, + { + "name": "multifunction", + "description": "on/off", + "type": "bool" + }, + { + "name": "rombar", + "type": "uint32" + }, + { + "name": "scsi", + "description": "on/off", + "type": "bool" + }, + { + "name": "cyls", + "type": "uint32" + }, + { + "name": "x-disable-pcie", + "description": "on/off", + "type": "bool" + }, + { + "name": "logical_block_size", + "description": "A power of two between 512 and 32768", + "type": "uint16" + }, + { + "name": "indirect_desc", + "description": "on/off", + "type": "bool" + }, + { + "name": "iothread", + "type": "link<iothread>" + }, + { + "name": "disable-modern", + "type": "bool" + }, + { + "name": "drive", + "description": "Node name or ID of a block device to use as a backend", + "type": "str" + }, + { + "name": "disable-legacy", + "description": "on/off/auto", + "type": "OnOffAuto" + }, + { + "name": "command_serr_enable", + "description": "on/off", + "type": "bool" + }, + { + "name": "werror", + "description": "Error handling policy, report/ignore/enospc/stop/auto", + "type": "BlockdevOnError" + }, + { + "name": "discard_granularity", + "type": "uint32" + }, + { + "name": "rerror", + "description": "Error handling policy, report/ignore/enospc/stop/auto", + "type": "BlockdevOnError" + }, + { + "name": "page-per-vq", + "description": "on/off", + "type": "bool" + }, + { + "name": "bootindex", + "type": "int32" + }, + { + "name": "x-pcie-lnksta-dllla", + "description": "on/off", + "type": "bool" + }, + { + "name": "notify_on_empty", + "description": "on/off", + "type": "bool" + }, + { + "name": "any_layout", + "description": "on/off", + "type": "bool" + }, + { + "name": "class", + "type": "uint32" + }, + { + "name": "migrate-extra", + "description": "on/off", + "type": "bool" + }, + { + "name": "addr", + "description": "Slot and optional function number, example: 06.0 or 06", + "type": "int32" + }, + { + "name": "modern-pio-notify", + "description": "on/off", + "type": "bool" + }, + { + "name": "vectors", + "type": "uint32" + }, + { + "name": "physical_block_size", + "description": "A power of two between 512 and 32768", + "type": "uint16" + }, + { + "name": "iommu_platform", + "description": "on/off", + "type": "bool" + }, + { + "name": "config-wce", + "description": "on/off", + "type": "bool" + }, + { + "name": "virtio-backend", + "type": "child<virtio-blk-device>" + }, + { + "name": "x-ignore-backend-features", + "type": "bool" + }, + { + "name": "write-cache", + "description": "on/off/auto", + "type": "OnOffAuto" + }, + { + "name": "num-queues", + "type": "uint16" + }, + { + "name": "virtio-pci-bus-master-bug-migration", + "description": "on/off", + "type": "bool" + }, + { + "name": "ats", + "description": "on/off", + "type": "bool" + }, + { + "name": "opt_io_size", + "type": "uint32" + }, + { + "name": "romfile", + "type": "str" + } + ], + "id": "libvirt-10" +} + +{ + "return": [ + { + "name": "indirect_desc", + "description": "on/off", + "type": "bool" + }, + { + "name": "x-txtimer", + "type": "uint32" + }, + { + "name": "notify_on_empty", + "description": "on/off", + "type": "bool" + }, + { + "name": "guest_ufo", + "description": "on/off", + "type": "bool" + }, + { + "name": "mq", + "description": "on/off", + "type": "bool" + }, + { + "name": "status", + "description": "on/off", + "type": "bool" + }, + { + "name": "host_ecn", + "description": "on/off", + "type": "bool" + }, + { + "name": "ioeventfd", + "description": "on/off", + "type": "bool" + }, + { + "name": "tx", + "type": "str" + }, + { + "name": "multifunction", + "description": "on/off", + "type": "bool" + }, + { + "name": "rombar", + "type": "uint32" + }, + { + "name": "ctrl_rx_extra", + "description": "on/off", + "type": "bool" + }, + { + "name": "ctrl_vq", + "description": "on/off", + "type": "bool" + }, + { + "name": "mac", + "description": "Ethernet 6-byte MAC Address, example: 52:54:00:12:34:56", + "type": "str" + }, + { + "name": "rx_queue_size", + "type": "uint16" + }, + { + "name": "x-disable-pcie", + "description": "on/off", + "type": "bool" + }, + { + "name": "guest_tso6", + "description": "on/off", + "type": "bool" + }, + { + "name": "gso", + "description": "on/off", + "type": "bool" + }, + { + "name": "guest_ecn", + "description": "on/off", + "type": "bool" + }, + { + "name": "ctrl_rx", + "description": "on/off", + "type": "bool" + }, + { + "name": "guest_tso4", + "description": "on/off", + "type": "bool" + }, + { + "name": "disable-modern", + "type": "bool" + }, + { + "name": "guest_csum", + "description": "on/off", + "type": "bool" + }, + { + "name": "guest_announce", + "description": "on/off", + "type": "bool" + }, + { + "name": "disable-legacy", + "description": "on/off/auto", + "type": "OnOffAuto" + }, + { + "name": "command_serr_enable", + "description": "on/off", + "type": "bool" + }, + { + "name": "x-txburst", + "type": "int32" + }, + { + "name": "ctrl_vlan", + "description": "on/off", + "type": "bool" + }, + { + "name": "csum", + "description": "on/off", + "type": "bool" + }, + { + "name": "mrg_rxbuf", + "description": "on/off", + "type": "bool" + }, + { + "name": "page-per-vq", + "description": "on/off", + "type": "bool" + }, + { + "name": "any_layout", + "description": "on/off", + "type": "bool" + }, + { + "name": "x-pcie-lnksta-dllla", + "description": "on/off", + "type": "bool" + }, + { + "name": "ctrl_guest_offloads", + "description": "on/off", + "type": "bool" + }, + { + "name": "host_tso6", + "description": "on/off", + "type": "bool" + }, + { + "name": "bootindex", + "type": "int32" + }, + { + "name": "ctrl_mac_addr", + "description": "on/off", + "type": "bool" + }, + { + "name": "addr", + "description": "Slot and optional function number, example: 06.0 or 06", + "type": "int32" + }, + { + "name": "migrate-extra", + "description": "on/off", + "type": "bool" + }, + { + "name": "modern-pio-notify", + "description": "on/off", + "type": "bool" + }, + { + "name": "vectors", + "type": "uint32" + }, + { + "name": "vlan", + "description": "Integer VLAN id to connect to", + "type": "int32" + }, + { + "name": "host_tso4", + "description": "on/off", + "type": "bool" + }, + { + "name": "host_ufo", + "description": "on/off", + "type": "bool" + }, + { + "name": "virtio-backend", + "type": "child<virtio-net-device>" + }, + { + "name": "x-ignore-backend-features", + "type": "bool" + }, + { + "name": "netdev", + "description": "ID of a netdev to use as a backend", + "type": "str" + }, + { + "name": "event_idx", + "description": "on/off", + "type": "bool" + }, + { + "name": "host_mtu", + "type": "uint16" + }, + { + "name": "iommu_platform", + "description": "on/off", + "type": "bool" + }, + { + "name": "ats", + "description": "on/off", + "type": "bool" + }, + { + "name": "virtio-pci-bus-master-bug-migration", + "description": "on/off", + "type": "bool" + }, + { + "name": "romfile", + "type": "str" + } + ], + "id": "libvirt-11" +} + +{ + "return": [ + { + "name": "event_idx", + "description": "on/off", + "type": "bool" + }, + { + "name": "ioeventfd", + "description": "on/off", + "type": "bool" + }, + { + "name": "multifunction", + "description": "on/off", + "type": "bool" + }, + { + "name": "rombar", + "type": "uint32" + }, + { + "name": "x-disable-pcie", + "description": "on/off", + "type": "bool" + }, + { + "name": "indirect_desc", + "description": "on/off", + "type": "bool" + }, + { + "name": "disable-modern", + "type": "bool" + }, + { + "name": "num_queues", + "type": "uint32" + }, + { + "name": "cmd_per_lun", + "type": "uint32" + }, + { + "name": "disable-legacy", + "description": "on/off/auto", + "type": "OnOffAuto" + }, + { + "name": "command_serr_enable", + "description": "on/off", + "type": "bool" + }, + { + "name": "page-per-vq", + "description": "on/off", + "type": "bool" + }, + { + "name": "hotplug", + "description": "on/off", + "type": "bool" + }, + { + "name": "x-pcie-lnksta-dllla", + "description": "on/off", + "type": "bool" + }, + { + "name": "max_sectors", + "type": "uint32" + }, + { + "name": "param_change", + "description": "on/off", + "type": "bool" + }, + { + "name": "any_layout", + "description": "on/off", + "type": "bool" + }, + { + "name": "iothread", + "type": "link<iothread>" + }, + { + "name": "addr", + "description": "Slot and optional function number, example: 06.0 or 06", + "type": "int32" + }, + { + "name": "migrate-extra", + "description": "on/off", + "type": "bool" + }, + { + "name": "modern-pio-notify", + "description": "on/off", + "type": "bool" + }, + { + "name": "vectors", + "type": "uint32" + }, + { + "name": "virtio-backend", + "type": "child<virtio-scsi-device>" + }, + { + "name": "x-ignore-backend-features", + "type": "bool" + }, + { + "name": "notify_on_empty", + "description": "on/off", + "type": "bool" + }, + { + "name": "iommu_platform", + "description": "on/off", + "type": "bool" + }, + { + "name": "ats", + "description": "on/off", + "type": "bool" + }, + { + "name": "virtio-pci-bus-master-bug-migration", + "description": "on/off", + "type": "bool" + }, + { + "name": "romfile", + "type": "str" + } + ], + "id": "libvirt-12" +} + +{ + "id": "libvirt-13", + "error": { + "class": "DeviceNotFound", + "desc": "Device 'virtio-blk-ccw' not found" + } +} + +{ + "id": "libvirt-14", + "error": { + "class": "DeviceNotFound", + "desc": "Device 'virtio-net-ccw' not found" + } +} + +{ + "id": "libvirt-15", + "error": { + "class": "DeviceNotFound", + "desc": "Device 'virtio-scsi-ccw' not found" + } +} + +{ + "id": "libvirt-16", + "error": { + "class": "DeviceNotFound", + "desc": "Device 'virtio-blk-s390' not found" + } +} + +{ + "id": "libvirt-17", + "error": { + "class": "DeviceNotFound", + "desc": "Device 'virtio-net-s390' not found" + } +} + +{ + "id": "libvirt-18", + "error": { + "class": "DeviceNotFound", + "desc": "Device 'pci-assign' not found" + } +} + +{ + "return": [ + { + "name": "share_intx", + "description": "on/off", + "type": "bool" + }, + { + "name": "rombar", + "type": "uint32" + }, + { + "name": "x-pcie-lnksta-dllla", + "description": "on/off", + "type": "bool" + }, + { + "name": "bootindex", + "type": "int32" + }, + { + "name": "multifunction", + "description": "on/off", + "type": "bool" + }, + { + "name": "host", + "description": "Address (bus/device/function) of the host device, example: 04:10.0", + "type": "str" + }, + { + "name": "romfile", + "type": "str" + }, + { + "name": "configfd", + "type": "str" + }, + { + "name": "command_serr_enable", + "description": "on/off", + "type": "bool" + }, + { + "name": "addr", + "description": "Slot and optional function number, example: 06.0 or 06", + "type": "int32" + }, + { + "name": "prefer_msi", + "description": "on/off", + "type": "bool" + } + ], + "id": "libvirt-19" +} + +{ + "return": [ + { + "name": "x-pci-sub-device-id", + "type": "uint32" + }, + { + "name": "x-no-kvm-msi", + "type": "bool" + }, + { + "name": "rombar", + "type": "uint32" + }, + { + "name": "x-pcie-lnksta-dllla", + "description": "on/off", + "type": "bool" + }, + { + "name": "x-igd-opregion", + "description": "on/off", + "type": "bool" + }, + { + "name": "x-vga", + "description": "on/off", + "type": "bool" + }, + { + "name": "x-pci-vendor-id", + "type": "uint32" + }, + { + "name": "multifunction", + "description": "on/off", + "type": "bool" + }, + { + "name": "bootindex", + "type": "int32" + }, + { + "name": "x-req", + "description": "on/off", + "type": "bool" + }, + { + "name": "x-igd-gms", + "type": "uint32" + }, + { + "name": "romfile", + "type": "str" + }, + { + "name": "x-no-kvm-intx", + "type": "bool" + }, + { + "name": "x-pci-device-id", + "type": "uint32" + }, + { + "name": "host", + "description": "Address (bus/device/function) of the host device, example: 04:10.0", + "type": "str" + }, + { + "name": "x-no-kvm-msix", + "type": "bool" + }, + { + "name": "x-intx-mmap-timeout-ms", + "type": "uint32" + }, + { + "name": "command_serr_enable", + "description": "on/off", + "type": "bool" + }, + { + "name": "addr", + "description": "Slot and optional function number, example: 06.0 or 06", + "type": "int32" + }, + { + "name": "x-pci-sub-vendor-id", + "type": "uint32" + }, + { + "name": "sysfsdev", + "type": "str" + }, + { + "name": "x-no-mmap", + "type": "bool" + } + ], + "id": "libvirt-20" +} + +{ + "return": [ + { + "name": "serial", + "type": "str" + }, + { + "name": "port_index", + "type": "uint16" + }, + { + "name": "dpofua", + "description": "on/off", + "type": "bool" + }, + { + "name": "bootindex", + "type": "int32" + }, + { + "name": "logical_block_size", + "description": "A power of two between 512 and 32768", + "type": "uint16" + }, + { + "name": "discard_granularity", + "type": "uint32" + }, + { + "name": "lun", + "type": "uint32" + }, + { + "name": "max_unmap_size", + "type": "uint64" + }, + { + "name": "drive", + "description": "Node name or ID of a block device to use as a backend", + "type": "str" + }, + { + "name": "port_wwn", + "type": "uint64" + }, + { + "name": "write-cache", + "description": "on/off/auto", + "type": "OnOffAuto" + }, + { + "name": "opt_io_size", + "type": "uint32" + }, + { + "name": "min_io_size", + "type": "uint16" + }, + { + "name": "product", + "type": "str" + }, + { + "name": "scsi-id", + "type": "uint32" + }, + { + "name": "channel", + "type": "uint32" + }, + { + "name": "vendor", + "type": "str" + }, + { + "name": "wwn", + "type": "uint64" + }, + { + "name": "werror", + "description": "Error handling policy, report/ignore/enospc/stop/auto", + "type": "BlockdevOnError" + }, + { + "name": "removable", + "description": "on/off", + "type": "bool" + }, + { + "name": "rerror", + "description": "Error handling policy, report/ignore/enospc/stop/auto", + "type": "BlockdevOnError" + }, + { + "name": "ver", + "type": "str" + }, + { + "name": "physical_block_size", + "description": "A power of two between 512 and 32768", + "type": "uint16" + }, + { + "name": "max_io_size", + "type": "uint64" + } + ], + "id": "libvirt-21" +} + +{ + "return": [ + { + "name": "serial", + "type": "str" + }, + { + "name": "logical_block_size", + "description": "A power of two between 512 and 32768", + "type": "uint16" + }, + { + "name": "discard_granularity", + "type": "uint32" + }, + { + "name": "drive", + "description": "Node name or ID of a block device to use as a backend", + "type": "str" + }, + { + "name": "bootindex", + "type": "int32" + }, + { + "name": "write-cache", + "description": "on/off/auto", + "type": "OnOffAuto" + }, + { + "name": "opt_io_size", + "type": "uint32" + }, + { + "name": "min_io_size", + "type": "uint16" + }, + { + "name": "unit", + "type": "uint32" + }, + { + "name": "wwn", + "type": "uint64" + }, + { + "name": "werror", + "description": "Error handling policy, report/ignore/enospc/stop/auto", + "type": "BlockdevOnError" + }, + { + "name": "model", + "type": "str" + }, + { + "name": "rerror", + "description": "Error handling policy, report/ignore/enospc/stop/auto", + "type": "BlockdevOnError" + }, + { + "name": "ver", + "type": "str" + }, + { + "name": "physical_block_size", + "description": "A power of two between 512 and 32768", + "type": "uint16" + } + ], + "id": "libvirt-22" +} + +{ + "return": [ + { + "name": "memory-hotplug-support", + "type": "bool" + }, + { + "name": "rombar", + "type": "uint32" + }, + { + "name": "x-pcie-lnksta-dllla", + "description": "on/off", + "type": "bool" + }, + { + "name": "acpi-pci-hotplug-with-bridge-support", + "type": "bool" + }, + { + "name": "multifunction", + "description": "on/off", + "type": "bool" + }, + { + "name": "romfile", + "type": "str" + }, + { + "name": "disable_s4", + "type": "uint8" + }, + { + "name": "disable_s3", + "type": "uint8" + }, + { + "name": "command_serr_enable", + "description": "on/off", + "type": "bool" + }, + { + "name": "s4_val", + "type": "uint8" + }, + { + "name": "smb_io_base", + "type": "uint32" + }, + { + "name": "addr", + "description": "Slot and optional function number, example: 06.0 or 06", + "type": "int32" + } + ], + "id": "libvirt-23" +} + +{ + "return": [ + { + "name": "filter", + "type": "str" + }, + { + "name": "msos-desc", + "description": "on/off", + "type": "bool" + }, + { + "name": "serial", + "type": "str" + }, + { + "name": "bootindex", + "type": "int32" + }, + { + "name": "port", + "type": "str" + }, + { + "name": "debug", + "type": "uint8" + }, + { + "name": "streams", + "type": "bool" + }, + { + "name": "chardev", + "description": "ID of a chardev to use as a backend", + "type": "str" + }, + { + "name": "full-path", + "description": "on/off", + "type": "bool" + }, + { + "name": "attached", + "type": "bool" + } + ], + "id": "libvirt-24" +} + +{ + "return": [ + { + "name": "isobufs", + "type": "uint32" + }, + { + "name": "hostaddr", + "type": "uint32" + }, + { + "name": "msos-desc", + "description": "on/off", + "type": "bool" + }, + { + "name": "productid", + "type": "uint32" + }, + { + "name": "serial", + "type": "str" + }, + { + "name": "bootindex", + "type": "int32" + }, + { + "name": "isobsize", + "type": "uint32" + }, + { + "name": "port", + "type": "str" + }, + { + "name": "vendorid", + "type": "uint32" + }, + { + "name": "pipeline", + "description": "on/off", + "type": "bool" + }, + { + "name": "attached", + "type": "bool" + }, + { + "name": "hostport", + "type": "str" + }, + { + "name": "full-path", + "description": "on/off", + "type": "bool" + }, + { + "name": "loglevel", + "type": "uint32" + }, + { + "name": "hostbus", + "type": "uint32" + } + ], + "id": "libvirt-25" +} + +{ + "return": [ + { + "name": "bootindex", + "type": "int32" + }, + { + "name": "drive", + "description": "Node name or ID of a block device to use as a backend", + "type": "str" + }, + { + "name": "lun", + "type": "uint32" + }, + { + "name": "channel", + "type": "uint32" + }, + { + "name": "scsi-id", + "type": "uint32" + } + ], + "id": "libvirt-26" +} + +{ + "return": [ + { + "name": "short_root_bus", + "type": "uint32" + }, + { + "name": "pci-conf-idx[0]", + "type": "child<qemu:memory-region>" + }, + { + "name": "pci-hole64-end", + "type": "int" + }, + { + "name": "pci-hole-end", + "type": "int" + }, + { + "name": "pci-hole-start", + "type": "int" + }, + { + "name": "pci-hole64-start", + "type": "int" + }, + { + "name": "pci-hole64-size", + "type": "size" + }, + { + "name": "pci-conf-data[0]", + "type": "child<qemu:memory-region>" + } + ], + "id": "libvirt-27" +} + +{ + "return": [ + { + "name": "short_root_bus", + "type": "uint32" + }, + { + "name": "system-mem", + "type": "link<qemu:memory-region>" + }, + { + "name": "pci-conf-idx[0]", + "type": "child<qemu:memory-region>" + }, + { + "name": "pcie-mmcfg-mmio[0]", + "type": "child<qemu:memory-region>" + }, + { + "name": "pci-hole64-start", + "type": "int" + }, + { + "name": "io-mem", + "type": "link<qemu:memory-region>" + }, + { + "name": "pci-hole64-end", + "type": "int" + }, + { + "name": "pci-hole-end", + "type": "int" + }, + { + "name": "above-4g-mem-size", + "type": "size" + }, + { + "name": "below-4g-mem-size", + "type": "size" + }, + { + "name": "ram-mem", + "type": "link<qemu:memory-region>" + }, + { + "name": "pci-hole-start", + "type": "int" + }, + { + "name": "MCFG", + "type": "uint64" + }, + { + "name": "mch", + "type": "child<mch>" + }, + { + "name": "pci-hole64-size", + "type": "size" + }, + { + "name": "pci-mem", + "type": "link<qemu:memory-region>" + }, + { + "name": "pci-conf-data[0]", + "type": "child<qemu:memory-region>" + }, + { + "name": "mcfg_size", + "type": "int" + } + ], + "id": "libvirt-28" +} + +{ + "return": [ + { + "name": "serial", + "type": "str" + }, + { + "name": "msos-desc", + "description": "on/off", + "type": "bool" + }, + { + "name": "logical_block_size", + "description": "A power of two between 512 and 32768", + "type": "uint16" + }, + { + "name": "discard_granularity", + "type": "uint32" + }, + { + "name": "drive", + "description": "Node name or ID of a block device to use as a backend", + "type": "str" + }, + { + "name": "bootindex", + "type": "int32" + }, + { + "name": "write-cache", + "description": "on/off/auto", + "type": "OnOffAuto" + }, + { + "name": "opt_io_size", + "type": "uint32" + }, + { + "name": "min_io_size", + "type": "uint16" + }, + { + "name": "port", + "type": "str" + }, + { + "name": "attached", + "type": "bool" + }, + { + "name": "full-path", + "description": "on/off", + "type": "bool" + }, + { + "name": "removable", + "description": "on/off", + "type": "bool" + }, + { + "name": "physical_block_size", + "description": "A power of two between 512 and 32768", + "type": "uint16" + } + ], + "id": "libvirt-29" +} + +{ + "return": [ + { + "name": "iobase", + "type": "uint32" + }, + { + "name": "lost_tick_policy", + "type": "LostTickPolicy" + } + ], + "id": "libvirt-30" +} + +{ + "return": [ + { + "name": "rombar", + "type": "uint32" + }, + { + "name": "x-pcie-lnksta-dllla", + "description": "on/off", + "type": "bool" + }, + { + "name": "mmio", + "description": "on/off", + "type": "bool" + }, + { + "name": "multifunction", + "description": "on/off", + "type": "bool" + }, + { + "name": "qemu-extended-regs", + "description": "on/off", + "type": "bool" + }, + { + "name": "big-endian-framebuffer", + "type": "bool" + }, + { + "name": "romfile", + "type": "str" + }, + { + "name": "vgamem_mb", + "type": "uint32" + }, + { + "name": "command_serr_enable", + "description": "on/off", + "type": "bool" + }, + { + "name": "addr", + "description": "Slot and optional function number, example: 06.0 or 06", + "type": "int32" + } + ], + "id": "libvirt-31" +} + +{ + "return": [ + { + "name": "rombar", + "type": "uint32" + }, + { + "name": "x-pcie-lnksta-dllla", + "description": "on/off", + "type": "bool" + }, + { + "name": "multifunction", + "description": "on/off", + "type": "bool" + }, + { + "name": "romfile", + "type": "str" + }, + { + "name": "vgamem_mb", + "type": "uint32" + }, + { + "name": "command_serr_enable", + "description": "on/off", + "type": "bool" + }, + { + "name": "addr", + "description": "Slot and optional function number, example: 06.0 or 06", + "type": "int32" + } + ], + "id": "libvirt-32" +} + +{ + "return": [ + { + "name": "rombar", + "type": "uint32" + }, + { + "name": "x-pcie-lnksta-dllla", + "description": "on/off", + "type": "bool" + }, + { + "name": "ram_size_mb", + "type": "uint32" + }, + { + "name": "command_serr_enable", + "description": "on/off", + "type": "bool" + }, + { + "name": "multifunction", + "description": "on/off", + "type": "bool" + }, + { + "name": "vgamem_mb", + "type": "uint32" + }, + { + "name": "romfile", + "type": "str" + }, + { + "name": "addr", + "description": "Slot and optional function number, example: 06.0 or 06", + "type": "int32" + }, + { + "name": "debug", + "type": "uint32" + }, + { + "name": "vram_size_mb", + "type": "uint32" + }, + { + "name": "revision", + "type": "uint32" + }, + { + "name": "ram_size", + "type": "uint32" + }, + { + "name": "vram64_size_mb", + "type": "uint32" + }, + { + "name": "guestdebug", + "type": "uint32" + }, + { + "name": "vram_size", + "type": "uint64" + }, + { + "name": "surfaces", + "type": "int32" + }, + { + "name": "max_outputs", + "type": "uint16" + }, + { + "name": "cmdlog", + "type": "uint32" + } + ], + "id": "libvirt-33" +} + +{ + "return": [ + { + "name": "event_idx", + "description": "on/off", + "type": "bool" + }, + { + "name": "ioeventfd", + "description": "on/off", + "type": "bool" + }, + { + "name": "multifunction", + "description": "on/off", + "type": "bool" + }, + { + "name": "rombar", + "type": "uint32" + }, + { + "name": "x-disable-pcie", + "description": "on/off", + "type": "bool" + }, + { + "name": "indirect_desc", + "description": "on/off", + "type": "bool" + }, + { + "name": "disable-modern", + "type": "bool" + }, + { + "name": "disable-legacy", + "description": "on/off/auto", + "type": "OnOffAuto" + }, + { + "name": "command_serr_enable", + "description": "on/off", + "type": "bool" + }, + { + "name": "page-per-vq", + "description": "on/off", + "type": "bool" + }, + { + "name": "max_outputs", + "type": "uint32" + }, + { + "name": "x-pcie-lnksta-dllla", + "description": "on/off", + "type": "bool" + }, + { + "name": "any_layout", + "description": "on/off", + "type": "bool" + }, + { + "name": "addr", + "description": "Slot and optional function number, example: 06.0 or 06", + "type": "int32" + }, + { + "name": "migrate-extra", + "description": "on/off", + "type": "bool" + }, + { + "name": "modern-pio-notify", + "description": "on/off", + "type": "bool" + }, + { + "name": "vectors", + "type": "uint32" + }, + { + "name": "iommu_platform", + "description": "on/off", + "type": "bool" + }, + { + "name": "virtio-backend", + "type": "child<virtio-gpu-device>" + }, + { + "name": "max_hostmem", + "type": "size" + }, + { + "name": "x-ignore-backend-features", + "type": "bool" + }, + { + "name": "stats", + "description": "on/off", + "type": "bool" + }, + { + "name": "notify_on_empty", + "description": "on/off", + "type": "bool" + }, + { + "name": "virtio-pci-bus-master-bug-migration", + "description": "on/off", + "type": "bool" + }, + { + "name": "ats", + "description": "on/off", + "type": "bool" + }, + { + "name": "virgl", + "description": "on/off", + "type": "bool" + }, + { + "name": "romfile", + "type": "str" + } + ], + "id": "libvirt-34" +} + +{ + "return": [ + { + "name": "notify_on_empty", + "description": "on/off", + "type": "bool" + }, + { + "name": "any_layout", + "description": "on/off", + "type": "bool" + }, + { + "name": "indirect_desc", + "description": "on/off", + "type": "bool" + }, + { + "name": "event_idx", + "description": "on/off", + "type": "bool" + }, + { + "name": "stats", + "description": "on/off", + "type": "bool" + }, + { + "name": "iommu_platform", + "description": "on/off", + "type": "bool" + }, + { + "name": "max_outputs", + "type": "uint32" + }, + { + "name": "virgl", + "description": "on/off", + "type": "bool" + }, + { + "name": "max_hostmem", + "type": "size" + } + ], + "id": "libvirt-35" +} + +{ + "return": [ + { + "name": "memory-hotplug-support", + "type": "bool" + }, + { + "name": "rombar", + "type": "uint32" + }, + { + "name": "sci_int", + "type": "uint32" + }, + { + "name": "x-pcie-lnksta-dllla", + "description": "on/off", + "type": "bool" + }, + { + "name": "gpe0_blk_len", + "type": "uint32" + }, + { + "name": "pm_io_base", + "type": "uint32" + }, + { + "name": "noreboot", + "type": "bool" + }, + { + "name": "multifunction", + "description": "on/off", + "type": "bool" + }, + { + "name": "disable_s4", + "type": "uint8" + }, + { + "name": "acpi_disable_cmd", + "type": "uint8" + }, + { + "name": "cpu-hotplug-legacy", + "type": "bool" + }, + { + "name": "romfile", + "type": "str" + }, + { + "name": "disable_s3", + "type": "uint8" + }, + { + "name": "s4_val", + "type": "uint8" + }, + { + "name": "acpi_enable_cmd", + "type": "uint8" + }, + { + "name": "command_serr_enable", + "description": "on/off", + "type": "bool" + }, + { + "name": "addr", + "description": "Slot and optional function number, example: 06.0 or 06", + "type": "int32" + }, + { + "name": "enable_tco", + "type": "bool" + }, + { + "name": "gpe0_blk", + "type": "uint32" + } + ], + "id": "libvirt-36" +} + +{ + "return": [ + { + "name": "guest-stats-polling-interval", + "type": "int" + }, + { + "name": "event_idx", + "description": "on/off", + "type": "bool" + }, + { + "name": "rombar", + "type": "uint32" + }, + { + "name": "multifunction", + "description": "on/off", + "type": "bool" + }, + { + "name": "x-disable-pcie", + "description": "on/off", + "type": "bool" + }, + { + "name": "indirect_desc", + "description": "on/off", + "type": "bool" + }, + { + "name": "disable-modern", + "type": "bool" + }, + { + "name": "disable-legacy", + "description": "on/off/auto", + "type": "OnOffAuto" + }, + { + "name": "command_serr_enable", + "description": "on/off", + "type": "bool" + }, + { + "name": "guest-stats", + "type": "guest statistics" + }, + { + "name": "deflate-on-oom", + "description": "on/off", + "type": "bool" + }, + { + "name": "page-per-vq", + "description": "on/off", + "type": "bool" + }, + { + "name": "x-pcie-lnksta-dllla", + "description": "on/off", + "type": "bool" + }, + { + "name": "any_layout", + "description": "on/off", + "type": "bool" + }, + { + "name": "class", + "type": "uint32" + }, + { + "name": "addr", + "description": "Slot and optional function number, example: 06.0 or 06", + "type": "int32" + }, + { + "name": "migrate-extra", + "description": "on/off", + "type": "bool" + }, + { + "name": "modern-pio-notify", + "description": "on/off", + "type": "bool" + }, + { + "name": "virtio-backend", + "type": "child<virtio-balloon-device>" + }, + { + "name": "x-ignore-backend-features", + "type": "bool" + }, + { + "name": "notify_on_empty", + "description": "on/off", + "type": "bool" + }, + { + "name": "ats", + "description": "on/off", + "type": "bool" + }, + { + "name": "iommu_platform", + "description": "on/off", + "type": "bool" + }, + { + "name": "virtio-pci-bus-master-bug-migration", + "description": "on/off", + "type": "bool" + }, + { + "name": "romfile", + "type": "str" + } + ], + "id": "libvirt-37" +} + +{ + "id": "libvirt-38", + "error": { + "class": "DeviceNotFound", + "desc": "Device 'virtio-balloon-ccw' not found" + } +} + +{ + "return": [ + { + "name": "notify_on_empty", + "description": "on/off", + "type": "bool" + }, + { + "name": "any_layout", + "description": "on/off", + "type": "bool" + }, + { + "name": "indirect_desc", + "description": "on/off", + "type": "bool" + }, + { + "name": "guest-stats", + "type": "guest statistics" + }, + { + "name": "guest-stats-polling-interval", + "type": "int" + }, + { + "name": "event_idx", + "description": "on/off", + "type": "bool" + }, + { + "name": "iommu_platform", + "description": "on/off", + "type": "bool" + }, + { + "name": "deflate-on-oom", + "description": "on/off", + "type": "bool" + } + ], + "id": "libvirt-39" +} + +{ + "return": [ + { + "name": "rombar", + "type": "uint32" + }, + { + "name": "intrs", + "type": "uint32" + }, + { + "name": "x-pcie-lnksta-dllla", + "description": "on/off", + "type": "bool" + }, + { + "name": "msix", + "description": "on/off/auto", + "type": "OnOffAuto" + }, + { + "name": "multifunction", + "description": "on/off", + "type": "bool" + }, + { + "name": "msi", + "description": "on/off/auto", + "type": "OnOffAuto" + }, + { + "name": "superspeed-ports-first", + "description": "on/off", + "type": "bool" + }, + { + "name": "streams", + "description": "on/off", + "type": "bool" + }, + { + "name": "romfile", + "type": "str" + }, + { + "name": "force-pcie-endcap", + "description": "on/off", + "type": "bool" + }, + { + "name": "command_serr_enable", + "description": "on/off", + "type": "bool" + }, + { + "name": "addr", + "description": "Slot and optional function number, example: 06.0 or 06", + "type": "int32" + }, + { + "name": "p3", + "type": "uint32" + }, + { + "name": "p2", + "type": "uint32" + }, + { + "name": "slots", + "type": "uint32" + } + ], + "id": "libvirt-40" +} + +{ + "return": [ + { + "hotpluggable-cpus": true, + "name": "pc-0.12", + "cpu-max": 255 + }, + { + "hotpluggable-cpus": true, + "name": "pc-i440fx-2.4", + "cpu-max": 255 + }, + { + "hotpluggable-cpus": true, + "name": "pc-1.3", + "cpu-max": 255 + }, + { + "hotpluggable-cpus": true, + "name": "pc-q35-2.7", + "cpu-max": 255 + }, + { + "hotpluggable-cpus": true, + "name": "pc-q35-2.6", + "cpu-max": 255 + }, + { + "hotpluggable-cpus": false, + "name": "none", + "cpu-max": 1 + }, + { + "hotpluggable-cpus": false, + "name": "xenpv", + "cpu-max": 1 + }, + { + "hotpluggable-cpus": true, + "name": "pc-i440fx-1.7", + "cpu-max": 255 + }, + { + "hotpluggable-cpus": true, + "name": "pc-i440fx-2.8", + "cpu-max": 255 + }, + { + "hotpluggable-cpus": true, + "name": "pc-i440fx-1.6", + "cpu-max": 255 + }, + { + "hotpluggable-cpus": true, + "name": "pc-i440fx-2.7", + "cpu-max": 255 + }, + { + "hotpluggable-cpus": true, + "name": "pc-0.11", + "cpu-max": 255 + }, + { + "hotpluggable-cpus": true, + "name": "pc-i440fx-2.3", + "cpu-max": 255 + }, + { + "hotpluggable-cpus": true, + "name": "pc-0.10", + "cpu-max": 255 + }, + { + "hotpluggable-cpus": true, + "name": "pc-1.2", + "cpu-max": 255 + }, + { + "hotpluggable-cpus": true, + "name": "pc-i440fx-2.2", + "cpu-max": 255 + }, + { + "hotpluggable-cpus": true, + "name": "isapc", + "cpu-max": 1 + }, + { + "hotpluggable-cpus": true, + "name": "pc-q35-2.5", + "cpu-max": 255 + }, + { + "hotpluggable-cpus": true, + "name": "xenfv", + "cpu-max": 128 + }, + { + "hotpluggable-cpus": true, + "name": "pc-0.15", + "cpu-max": 255 + }, + { + "hotpluggable-cpus": true, + "name": "pc-0.14", + "cpu-max": 255 + }, + { + "hotpluggable-cpus": true, + "name": "pc-i440fx-1.5", + "cpu-max": 255 + }, + { + "hotpluggable-cpus": true, + "name": "pc-i440fx-2.6", + "cpu-max": 255 + }, + { + "hotpluggable-cpus": true, + "name": "pc-i440fx-1.4", + "cpu-max": 255 + }, + { + "hotpluggable-cpus": true, + "name": "pc-i440fx-2.5", + "cpu-max": 255 + }, + { + "hotpluggable-cpus": true, + "name": "pc-q35-2.9", + "cpu-max": 288, + "alias": "q35" + }, + { + "hotpluggable-cpus": true, + "name": "pc-1.1", + "cpu-max": 255 + }, + { + "hotpluggable-cpus": true, + "name": "pc-i440fx-2.1", + "cpu-max": 255 + }, + { + "hotpluggable-cpus": true, + "name": "pc-q35-2.8", + "cpu-max": 288 + }, + { + "hotpluggable-cpus": true, + "name": "pc-1.0", + "cpu-max": 255 + }, + { + "hotpluggable-cpus": true, + "name": "pc-i440fx-2.0", + "cpu-max": 255 + }, + { + "hotpluggable-cpus": true, + "name": "pc-q35-2.4", + "cpu-max": 255 + }, + { + "hotpluggable-cpus": true, + "name": "pc-i440fx-2.9", + "is-default": true, + "cpu-max": 255, + "alias": "pc" + }, + { + "hotpluggable-cpus": true, + "name": "pc-0.13", + "cpu-max": 255 + } + ], + "id": "libvirt-41" +} + +{ + "return": [ + { + "name": "max", + "typename": "max-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": false + }, + { + "name": "host", + "typename": "host-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": false + }, + { + "name": "base", + "typename": "base-x86_64-cpu", + "unavailable-features": [ + ], + "static": true, + "migration-safe": true + }, + { + "name": "qemu64", + "typename": "qemu64-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "qemu32", + "typename": "qemu32-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "phenom", + "typename": "phenom-x86_64-cpu", + "unavailable-features": [ + "mmxext", + "fxsr-opt", + "3dnowext", + "3dnow", + "sse4a", + "npt" + ], + "static": false, + "migration-safe": true + }, + { + "name": "pentium3", + "typename": "pentium3-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "pentium2", + "typename": "pentium2-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "pentium", + "typename": "pentium-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "n270", + "typename": "n270-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "kvm64", + "typename": "kvm64-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "kvm32", + "typename": "kvm32-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "coreduo", + "typename": "coreduo-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "core2duo", + "typename": "core2duo-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "athlon", + "typename": "athlon-x86_64-cpu", + "unavailable-features": [ + "mmxext", + "3dnowext", + "3dnow" + ], + "static": false, + "migration-safe": true + }, + { + "name": "Westmere", + "typename": "Westmere-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "Skylake-Client", + "typename": "Skylake-Client-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "SandyBridge", + "typename": "SandyBridge-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "Penryn", + "typename": "Penryn-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "Opteron_G5", + "typename": "Opteron_G5-x86_64-cpu", + "unavailable-features": [ + "sse4a", + "misalignsse", + "xop", + "fma4", + "tbm" + ], + "static": false, + "migration-safe": true + }, + { + "name": "Opteron_G4", + "typename": "Opteron_G4-x86_64-cpu", + "unavailable-features": [ + "sse4a", + "misalignsse", + "xop", + "fma4" + ], + "static": false, + "migration-safe": true + }, + { + "name": "Opteron_G3", + "typename": "Opteron_G3-x86_64-cpu", + "unavailable-features": [ + "sse4a", + "misalignsse" + ], + "static": false, + "migration-safe": true + }, + { + "name": "Opteron_G2", + "typename": "Opteron_G2-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "Opteron_G1", + "typename": "Opteron_G1-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "Nehalem", + "typename": "Nehalem-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "IvyBridge", + "typename": "IvyBridge-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "Haswell", + "typename": "Haswell-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "Haswell-noTSX", + "typename": "Haswell-noTSX-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "Conroe", + "typename": "Conroe-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "Broadwell", + "typename": "Broadwell-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "Broadwell-noTSX", + "typename": "Broadwell-noTSX-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "486", + "typename": "486-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + } + ], + "id": "libvirt-42" +} + +{ + "return": [ + "tpm-tis" + ], + "id": "libvirt-43" +} + +{ + "return": [ + "passthrough" + ], + "id": "libvirt-44" +} + +{ + "return": [ + { + "parameters": [ + { + "name": "non-adaptive", + "type": "boolean" + }, + { + "name": "lossy", + "type": "boolean" + }, + { + "name": "acl", + "type": "boolean" + }, + { + "name": "x509verify", + "type": "string" + }, + { + "name": "tls", + "type": "boolean" + }, + { + "name": "sasl", + "type": "boolean" + }, + { + "name": "key-delay-ms", + "type": "number" + }, + { + "name": "lock-key-sync", + "type": "boolean" + }, + { + "name": "reverse", + "type": "boolean" + }, + { + "name": "password", + "type": "boolean" + }, + { + "name": "ipv6", + "type": "boolean" + }, + { + "name": "ipv4", + "type": "boolean" + }, + { + "name": "to", + "type": "number" + }, + { + "name": "connections", + "type": "number" + }, + { + "name": "head", + "type": "number" + }, + { + "name": "display", + "type": "string" + }, + { + "name": "share", + "type": "string" + }, + { + "name": "x509", + "type": "string" + }, + { + "name": "tls-creds", + "type": "string" + }, + { + "name": "websocket", + "type": "string" + }, + { + "name": "vnc", + "type": "string" + } + ], + "option": "vnc" + }, + { + "parameters": [ + { + "name": "gl", + "type": "boolean" + }, + { + "name": "seamless-migration", + "type": "boolean" + }, + { + "name": "playback-compression", + "type": "boolean" + }, + { + "name": "agent-mouse", + "type": "boolean" + }, + { + "name": "streaming-video", + "type": "string" + }, + { + "name": "zlib-glz-wan-compression", + "type": "string" + }, + { + "name": "jpeg-wan-compression", + "type": "string" + }, + { + "name": "image-compression", + "type": "string" + }, + { + "name": "plaintext-channel", + "type": "string" + }, + { + "name": "tls-channel", + "type": "string" + }, + { + "name": "tls-ciphers", + "type": "string" + }, + { + "name": "x509-dh-key-file", + "type": "string" + }, + { + "name": "x509-cacert-file", + "type": "string" + }, + { + "name": "x509-cert-file", + "type": "string" + }, + { + "name": "x509-key-password", + "type": "string" + }, + { + "name": "x509-key-file", + "type": "string" + }, + { + "name": "x509-dir", + "type": "string" + }, + { + "name": "sasl", + "type": "boolean" + }, + { + "name": "disable-agent-file-xfer", + "type": "boolean" + }, + { + "name": "disable-copy-paste", + "type": "boolean" + }, + { + "name": "disable-ticketing", + "type": "boolean" + }, + { + "name": "password", + "type": "string" + }, + { + "name": "unix", + "type": "boolean" + }, + { + "name": "ipv6", + "type": "boolean" + }, + { + "name": "ipv4", + "type": "boolean" + }, + { + "name": "addr", + "type": "string" + }, + { + "name": "tls-port", + "type": "number" + }, + { + "name": "port", + "type": "number" + } + ], + "option": "spice" + }, + { + "parameters": [ + ], + "option": "smbios" + }, + { + "parameters": [ + ], + "option": "acpi" + }, + { + "parameters": [ + { + "name": "sock_fd", + "type": "number" + }, + { + "name": "socket", + "type": "string" + }, + { + "name": "readonly", + "type": "boolean" + }, + { + "name": "writeout", + "type": "string" + }, + { + "name": "security_model", + "type": "string" + }, + { + "name": "mount_tag", + "type": "string" + }, + { + "name": "path", + "type": "string" + }, + { + "name": "fsdriver", + "type": "string" + } + ], + "option": "virtfs" + }, + { + "parameters": [ + { + "name": "sock_fd", + "type": "number" + }, + { + "name": "socket", + "type": "string" + }, + { + "name": "readonly", + "type": "boolean" + }, + { + "name": "writeout", + "type": "string" + }, + { + "name": "security_model", + "type": "string" + }, + { + "name": "path", + "type": "string" + }, + { + "name": "fsdriver", + "type": "string" + } + ], + "option": "fsdev" + }, + { + "parameters": [ + { + "name": "timeout", + "help": "Request timeout in seconds (default 0 = no timeout)", + "type": "number" + }, + { + "name": "initiator-name", + "help": "Initiator iqn name to use when connecting", + "type": "string" + }, + { + "name": "header-digest", + "help": "HeaderDigest setting. {CRC32C|CRC32C-NONE|NONE-CRC32C|NONE}", + "type": "string" + }, + { + "name": "password-secret", + "help": "ID of the secret providing password for CHAP authentication to target", + "type": "string" + }, + { + "name": "password", + "help": "password for CHAP authentication to target", + "type": "string" + }, + { + "name": "user", + "help": "username for CHAP authentication to target", + "type": "string" + } + ], + "option": "iscsi" + }, + { + "parameters": [ + { + "name": "string", + "help": "Sets content of the blob to be inserted from a string", + "type": "string" + }, + { + "name": "file", + "help": "Sets the name of the file from which\nthe fw_cfg blob will be loaded", + "type": "string" + }, + { + "name": "name", + "help": "Sets the fw_cfg name of the blob to be inserted", + "type": "string" + } + ], + "option": "fw_cfg" + }, + { + "parameters": [ + { + "name": "arg", + "type": "string" + }, + { + "name": "target", + "type": "string" + }, + { + "name": "enable", + "type": "boolean" + } + ], + "option": "semihosting-config" + }, + { + "parameters": [ + { + "name": "rrfile", + "type": "string" + }, + { + "name": "rr", + "type": "string" + }, + { + "name": "sleep", + "type": "boolean" + }, + { + "name": "align", + "type": "boolean" + }, + { + "name": "shift", + "type": "string" + } + ], + "option": "icount" + }, + { + "parameters": [ + ], + "option": "numa" + }, + { + "parameters": [ + { + "name": "debug-threads", + "help": "When enabled, name the individual threads; defaults off.\nNOTE: The thread names are for debugging and not a\nstable API.", + "type": "boolean" + }, + { + "name": "process", + "help": "Sets the name of the QEMU process, as shown in top etc", + "type": "string" + }, + { + "name": "guest", + "help": "Sets the name of the guest.\nThis name will be displayed in the SDL window caption.\nThe name will also be used for the VNC server", + "type": "string" + } + ], + "option": "name" + }, + { + "parameters": [ + { + "name": "timestamp", + "type": "boolean" + } + ], + "option": "msg" + }, + { + "parameters": [ + { + "name": "mlock", + "type": "boolean" + } + ], + "option": "realtime" + }, + { + "parameters": [ + ], + "option": "tpmdev" + }, + { + "parameters": [ + ], + "option": "object" + }, + { + "parameters": [ + { + "name": "opaque", + "help": "free-form string used to describe fd", + "type": "string" + }, + { + "name": "set", + "help": "ID of the fd set to add fd to", + "type": "number" + }, + { + "name": "fd", + "help": "file descriptor of which a duplicate is added to fd set", + "type": "number" + } + ], + "option": "add-fd" + }, + { + "parameters": [ + { + "name": "enable", + "type": "boolean" + } + ], + "option": "sandbox" + }, + { + "parameters": [ + { + "name": "strict", + "type": "boolean" + }, + { + "name": "reboot-timeout", + "type": "string" + }, + { + "name": "splash-time", + "type": "string" + }, + { + "name": "splash", + "type": "string" + }, + { + "name": "menu", + "type": "boolean" + }, + { + "name": "once", + "type": "string" + }, + { + "name": "order", + "type": "string" + } + ], + "option": "boot-opts" + }, + { + "parameters": [ + { + "name": "maxcpus", + "type": "number" + }, + { + "name": "threads", + "type": "number" + }, + { + "name": "cores", + "type": "number" + }, + { + "name": "sockets", + "type": "number" + }, + { + "name": "cpus", + "type": "number" + } + ], + "option": "smp-opts" + }, + { + "parameters": [ + { + "name": "maxmem", + "type": "size" + }, + { + "name": "slots", + "type": "number" + }, + { + "name": "size", + "type": "size" + } + ], + "option": "memory" + }, + { + "parameters": [ + { + "name": "dea-key-wrap", + "help": "enable/disable DEA key wrapping using the CPACF wrapping key", + "type": "boolean" + }, + { + "name": "aes-key-wrap", + "help": "enable/disable AES key wrapping using the CPACF wrapping key", + "type": "boolean" + }, + { + "name": "suppress-vmdesc", + "help": "Set on to disable self-describing migration", + "type": "boolean" + }, + { + "name": "iommu", + "help": "Set on/off to enable/disable Intel IOMMU (VT-d)", + "type": "boolean" + }, + { + "name": "firmware", + "help": "firmware image", + "type": "string" + }, + { + "name": "usb", + "help": "Set on/off to enable/disable usb", + "type": "boolean" + }, + { + "name": "mem-merge", + "help": "enable/disable memory merge support", + "type": "boolean" + }, + { + "name": "dump-guest-core", + "help": "Include guest memory in a core dump", + "type": "boolean" + }, + { + "name": "dt_compatible", + "help": "Overrides the \"compatible\" property of the dt root node", + "type": "string" + }, + { + "name": "phandle_start", + "help": "The first phandle ID we may generate dynamically", + "type": "number" + }, + { + "name": "dumpdtb", + "help": "Dump current dtb to a file and quit", + "type": "string" + }, + { + "name": "dtb", + "help": "Linux kernel device tree file", + "type": "string" + }, + { + "name": "append", + "help": "Linux kernel command line", + "type": "string" + }, + { + "name": "initrd", + "help": "Linux initial ramdisk file", + "type": "string" + }, + { + "name": "kernel", + "help": "Linux kernel image file", + "type": "string" + }, + { + "name": "kvm_shadow_mem", + "help": "KVM shadow MMU size", + "type": "size" + }, + { + "name": "kernel_irqchip", + "help": "use KVM in-kernel irqchip", + "type": "boolean" + }, + { + "name": "accel", + "help": "accelerator list", + "type": "string" + }, + { + "name": "type", + "help": "emulated machine", + "type": "string" + } + ], + "option": "machine" + }, + { + "parameters": [ + { + "name": "romfile", + "type": "string" + }, + { + "name": "bootindex", + "type": "number" + } + ], + "option": "option-rom" + }, + { + "parameters": [ + { + "name": "file", + "type": "string" + }, + { + "name": "events", + "type": "string" + }, + { + "name": "enable", + "type": "string" + } + ], + "option": "trace" + }, + { + "parameters": [ + { + "name": "pretty", + "type": "boolean" + }, + { + "name": "default", + "type": "boolean" + }, + { + "name": "chardev", + "type": "string" + }, + { + "name": "mode", + "type": "string" + } + ], + "option": "mon" + }, + { + "parameters": [ + { + "name": "value", + "type": "string" + }, + { + "name": "property", + "type": "string" + }, + { + "name": "driver", + "type": "string" + } + ], + "option": "global" + }, + { + "parameters": [ + { + "name": "driftfix", + "type": "string" + }, + { + "name": "clock", + "type": "string" + }, + { + "name": "base", + "type": "string" + } + ], + "option": "rtc" + }, + { + "parameters": [ + ], + "option": "net" + }, + { + "parameters": [ + ], + "option": "netdev" + }, + { + "parameters": [ + ], + "option": "device" + }, + { + "parameters": [ + { + "name": "logappend", + "type": "boolean" + }, + { + "name": "logfile", + "type": "string" + }, + { + "name": "append", + "type": "boolean" + }, + { + "name": "chardev", + "type": "string" + }, + { + "name": "size", + "type": "size" + }, + { + "name": "debug", + "type": "number" + }, + { + "name": "name", + "type": "string" + }, + { + "name": "signal", + "type": "boolean" + }, + { + "name": "mux", + "type": "boolean" + }, + { + "name": "rows", + "type": "number" + }, + { + "name": "cols", + "type": "number" + }, + { + "name": "height", + "type": "number" + }, + { + "name": "width", + "type": "number" + }, + { + "name": "tls-creds", + "type": "string" + }, + { + "name": "telnet", + "type": "boolean" + }, + { + "name": "reconnect", + "type": "number" + }, + { + "name": "delay", + "type": "boolean" + }, + { + "name": "server", + "type": "boolean" + }, + { + "name": "wait", + "type": "boolean" + }, + { + "name": "ipv6", + "type": "boolean" + }, + { + "name": "ipv4", + "type": "boolean" + }, + { + "name": "to", + "type": "number" + }, + { + "name": "localport", + "type": "string" + }, + { + "name": "localaddr", + "type": "string" + }, + { + "name": "port", + "type": "string" + }, + { + "name": "host", + "type": "string" + }, + { + "name": "path", + "type": "string" + }, + { + "name": "backend", + "type": "string" + } + ], + "option": "chardev" + }, + { + "parameters": [ + { + "name": "copy-on-read", + "help": "copy read data from backing file into image file", + "type": "boolean" + }, + { + "name": "werror", + "help": "write error action", + "type": "string" + }, + { + "name": "rerror", + "help": "read error action", + "type": "string" + }, + { + "name": "read-only", + "help": "open drive file as read-only", + "type": "boolean" + }, + { + "name": "file", + "help": "file name", + "type": "string" + }, + { + "name": "serial", + "help": "disk serial number", + "type": "string" + }, + { + "name": "addr", + "help": "pci address (virtio only)", + "type": "string" + }, + { + "name": "boot", + "help": "(deprecated, ignored)", + "type": "boolean" + }, + { + "name": "trans", + "help": "chs translation (auto, lba, none)", + "type": "string" + }, + { + "name": "secs", + "help": "number of sectors (ide disk geometry)", + "type": "number" + }, + { + "name": "heads", + "help": "number of heads (ide disk geometry)", + "type": "number" + }, + { + "name": "cyls", + "help": "number of cylinders (ide disk geometry)", + "type": "number" + }, + { + "name": "if", + "help": "interface (ide, scsi, sd, mtd, floppy, pflash, virtio)", + "type": "string" + }, + { + "name": "media", + "help": "media type (disk, cdrom)", + "type": "string" + }, + { + "name": "index", + "help": "index number", + "type": "number" + }, + { + "name": "unit", + "help": "unit number (i.e. lun for scsi)", + "type": "number" + }, + { + "name": "bus", + "help": "bus number", + "type": "number" + }, + { + "name": "stats-account-failed", + "help": "whether to account for failed I/O operations in the statistics", + "type": "boolean" + }, + { + "name": "stats-account-invalid", + "help": "whether to account for invalid I/O operations in the statistics", + "type": "boolean" + }, + { + "name": "detect-zeroes", + "help": "try to optimize zero writes (off, on, unmap)", + "type": "string" + }, + { + "name": "throttling.group", + "help": "name of the block throttling group", + "type": "string" + }, + { + "name": "throttling.iops-size", + "help": "when limiting by iops max size of an I/O in bytes", + "type": "number" + }, + { + "name": "throttling.bps-write-max-length", + "help": "length of the bps-write-max burst period, in seconds", + "type": "number" + }, + { + "name": "throttling.bps-read-max-length", + "help": "length of the bps-read-max burst period, in seconds", + "type": "number" + }, + { + "name": "throttling.bps-total-max-length", + "help": "length of the bps-total-max burst period, in seconds", + "type": "number" + }, + { + "name": "throttling.iops-write-max-length", + "help": "length of the iops-write-max burst period, in seconds", + "type": "number" + }, + { + "name": "throttling.iops-read-max-length", + "help": "length of the iops-read-max burst period, in seconds", + "type": "number" + }, + { + "name": "throttling.iops-total-max-length", + "help": "length of the iops-total-max burst period, in seconds", + "type": "number" + }, + { + "name": "throttling.bps-write-max", + "help": "total bytes write burst", + "type": "number" + }, + { + "name": "throttling.bps-read-max", + "help": "total bytes read burst", + "type": "number" + }, + { + "name": "throttling.bps-total-max", + "help": "total bytes burst", + "type": "number" + }, + { + "name": "throttling.iops-write-max", + "help": "I/O operations write burst", + "type": "number" + }, + { + "name": "throttling.iops-read-max", + "help": "I/O operations read burst", + "type": "number" + }, + { + "name": "throttling.iops-total-max", + "help": "I/O operations burst", + "type": "number" + }, + { + "name": "throttling.bps-write", + "help": "limit write bytes per second", + "type": "number" + }, + { + "name": "throttling.bps-read", + "help": "limit read bytes per second", + "type": "number" + }, + { + "name": "throttling.bps-total", + "help": "limit total bytes per second", + "type": "number" + }, + { + "name": "throttling.iops-write", + "help": "limit write operations per second", + "type": "number" + }, + { + "name": "throttling.iops-read", + "help": "limit read operations per second", + "type": "number" + }, + { + "name": "throttling.iops-total", + "help": "limit total I/O operations per second", + "type": "number" + }, + { + "name": "werror", + "help": "write error action", + "type": "string" + }, + { + "name": "format", + "help": "disk format (raw, qcow2, ...)", + "type": "string" + }, + { + "name": "cache.writeback", + "help": "Enable writeback mode", + "type": "boolean" + }, + { + "name": "aio", + "help": "host AIO implementation (threads, native)", + "type": "string" + }, + { + "name": "snapshot", + "help": "enable/disable snapshot mode", + "type": "boolean" + }, + { + "name": "discard", + "help": "discard operation (ignore/off, unmap/on)", + "type": "string" + }, + { + "name": "read-only", + "help": "Node is opened in read-only mode", + "type": "boolean" + }, + { + "name": "cache.no-flush", + "help": "Ignore flush requests", + "type": "boolean" + }, + { + "name": "cache.direct", + "help": "Bypass software writeback cache on the host", + "type": "boolean" + }, + { + "name": "driver", + "help": "Block driver to use for the node", + "type": "string" + }, + { + "name": "node-name", + "help": "Node name of the block device node", + "type": "string" + } + ], + "option": "drive" + } + ], + "id": "libvirt-45" +} + +{ + "return": [ + { + "state": false, + "capability": "xbzrle" + }, + { + "state": false, + "capability": "rdma-pin-all" + }, + { + "state": false, + "capability": "auto-converge" + }, + { + "state": false, + "capability": "zero-blocks" + }, + { + "state": false, + "capability": "compress" + }, + { + "state": false, + "capability": "events" + }, + { + "state": false, + "capability": "postcopy-ram" + }, + { + "state": false, + "capability": "x-colo" + } + ], + "id": "libvirt-46" +} + +{ + "return": [ + { + "name": "ACPI_DEVICE_OST", + "meta-type": "event", + "arg-type": "0" + }, + { + "name": "BALLOON_CHANGE", + "meta-type": "event", + "arg-type": "1" + }, + { + "name": "BLOCK_IMAGE_CORRUPTED", + "meta-type": "event", + "arg-type": "2" + }, + { + "name": "BLOCK_IO_ERROR", + "meta-type": "event", + "arg-type": "3" + }, + { + "name": "BLOCK_JOB_CANCELLED", + "meta-type": "event", + "arg-type": "4" + }, + { + "name": "BLOCK_JOB_COMPLETED", + "meta-type": "event", + "arg-type": "5" + }, + { + "name": "BLOCK_JOB_ERROR", + "meta-type": "event", + "arg-type": "6" + }, + { + "name": "BLOCK_JOB_READY", + "meta-type": "event", + "arg-type": "7" + }, + { + "name": "BLOCK_WRITE_THRESHOLD", + "meta-type": "event", + "arg-type": "8" + }, + { + "name": "DEVICE_DELETED", + "meta-type": "event", + "arg-type": "9" + }, + { + "name": "DEVICE_TRAY_MOVED", + "meta-type": "event", + "arg-type": "10" + }, + { + "name": "DUMP_COMPLETED", + "meta-type": "event", + "arg-type": "11" + }, + { + "name": "GUEST_PANICKED", + "meta-type": "event", + "arg-type": "12" + }, + { + "name": "MEM_UNPLUG_ERROR", + "meta-type": "event", + "arg-type": "13" + }, + { + "name": "MIGRATION", + "meta-type": "event", + "arg-type": "14" + }, + { + "name": "MIGRATION_PASS", + "meta-type": "event", + "arg-type": "15" + }, + { + "name": "NIC_RX_FILTER_CHANGED", + "meta-type": "event", + "arg-type": "16" + }, + { + "name": "POWERDOWN", + "meta-type": "event", + "arg-type": "17" + }, + { + "name": "QUORUM_FAILURE", + "meta-type": "event", + "arg-type": "18" + }, + { + "name": "QUORUM_REPORT_BAD", + "meta-type": "event", + "arg-type": "19" + }, + { + "name": "RESET", + "meta-type": "event", + "arg-type": "17" + }, + { + "name": "RESUME", + "meta-type": "event", + "arg-type": "17" + }, + { + "name": "RTC_CHANGE", + "meta-type": "event", + "arg-type": "20" + }, + { + "name": "SHUTDOWN", + "meta-type": "event", + "arg-type": "17" + }, + { + "name": "SPICE_CONNECTED", + "meta-type": "event", + "arg-type": "21" + }, + { + "name": "SPICE_DISCONNECTED", + "meta-type": "event", + "arg-type": "22" + }, + { + "name": "SPICE_INITIALIZED", + "meta-type": "event", + "arg-type": "23" + }, + { + "name": "SPICE_MIGRATE_COMPLETED", + "meta-type": "event", + "arg-type": "17" + }, + { + "name": "STOP", + "meta-type": "event", + "arg-type": "17" + }, + { + "name": "SUSPEND", + "meta-type": "event", + "arg-type": "17" + }, + { + "name": "SUSPEND_DISK", + "meta-type": "event", + "arg-type": "17" + }, + { + "name": "VNC_CONNECTED", + "meta-type": "event", + "arg-type": "24" + }, + { + "name": "VNC_DISCONNECTED", + "meta-type": "event", + "arg-type": "25" + }, + { + "name": "VNC_INITIALIZED", + "meta-type": "event", + "arg-type": "26" + }, + { + "name": "VSERPORT_CHANGE", + "meta-type": "event", + "arg-type": "27" + }, + { + "name": "WAKEUP", + "meta-type": "event", + "arg-type": "17" + }, + { + "name": "WATCHDOG", + "meta-type": "event", + "arg-type": "28" + }, + { + "name": "add-fd", + "ret-type": "30", + "meta-type": "command", + "arg-type": "29" + }, + { + "name": "add_client", + "ret-type": "17", + "meta-type": "command", + "arg-type": "31" + }, + { + "name": "balloon", + "ret-type": "17", + "meta-type": "command", + "arg-type": "32" + }, + { + "name": "block-commit", + "ret-type": "17", + "meta-type": "command", + "arg-type": "33" + }, + { + "name": "block-dirty-bitmap-add", + "ret-type": "17", + "meta-type": "command", + "arg-type": "34" + }, + { + "name": "block-dirty-bitmap-clear", + "ret-type": "17", + "meta-type": "command", + "arg-type": "35" + }, + { + "name": "block-dirty-bitmap-remove", + "ret-type": "17", + "meta-type": "command", + "arg-type": "35" + }, + { + "name": "block-job-cancel", + "ret-type": "17", + "meta-type": "command", + "arg-type": "36" + }, + { + "name": "block-job-complete", + "ret-type": "17", + "meta-type": "command", + "arg-type": "37" + }, + { + "name": "block-job-pause", + "ret-type": "17", + "meta-type": "command", + "arg-type": "38" + }, + { + "name": "block-job-resume", + "ret-type": "17", + "meta-type": "command", + "arg-type": "39" + }, + { + "name": "block-job-set-speed", + "ret-type": "17", + "meta-type": "command", + "arg-type": "40" + }, + { + "name": "block-set-write-threshold", + "ret-type": "17", + "meta-type": "command", + "arg-type": "41" + }, + { + "name": "block-stream", + "ret-type": "17", + "meta-type": "command", + "arg-type": "42" + }, + { + "name": "block_passwd", + "ret-type": "17", + "meta-type": "command", + "arg-type": "43" + }, + { + "name": "block_resize", + "ret-type": "17", + "meta-type": "command", + "arg-type": "44" + }, + { + "name": "block_set_io_throttle", + "ret-type": "17", + "meta-type": "command", + "arg-type": "45" + }, + { + "name": "blockdev-add", + "ret-type": "17", + "meta-type": "command", + "arg-type": "46" + }, + { + "name": "blockdev-backup", + "ret-type": "17", + "meta-type": "command", + "arg-type": "47" + }, + { + "name": "blockdev-change-medium", + "ret-type": "17", + "meta-type": "command", + "arg-type": "48" + }, + { + "name": "blockdev-close-tray", + "ret-type": "17", + "meta-type": "command", + "arg-type": "49" + }, + { + "name": "blockdev-mirror", + "ret-type": "17", + "meta-type": "command", + "arg-type": "50" + }, + { + "name": "blockdev-open-tray", + "ret-type": "17", + "meta-type": "command", + "arg-type": "51" + }, + { + "name": "blockdev-snapshot", + "ret-type": "17", + "meta-type": "command", + "arg-type": "52" + }, + { + "name": "blockdev-snapshot-delete-internal-sync", + "ret-type": "54", + "meta-type": "command", + "arg-type": "53" + }, + { + "name": "blockdev-snapshot-internal-sync", + "ret-type": "17", + "meta-type": "command", + "arg-type": "55" + }, + { + "name": "blockdev-snapshot-sync", + "ret-type": "17", + "meta-type": "command", + "arg-type": "56" + }, + { + "name": "change", + "ret-type": "17", + "meta-type": "command", + "arg-type": "57" + }, + { + "name": "change-backing-file", + "ret-type": "17", + "meta-type": "command", + "arg-type": "58" + }, + { + "name": "change-vnc-password", + "ret-type": "17", + "meta-type": "command", + "arg-type": "59" + }, + { + "name": "chardev-add", + "ret-type": "61", + "meta-type": "command", + "arg-type": "60" + }, + { + "name": "chardev-remove", + "ret-type": "17", + "meta-type": "command", + "arg-type": "62" + }, + { + "name": "client_migrate_info", + "ret-type": "17", + "meta-type": "command", + "arg-type": "63" + }, + { + "name": "closefd", + "ret-type": "17", + "meta-type": "command", + "arg-type": "64" + }, + { + "name": "cont", + "ret-type": "17", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "cpu", + "ret-type": "17", + "meta-type": "command", + "arg-type": "65" + }, + { + "name": "cpu-add", + "ret-type": "17", + "meta-type": "command", + "arg-type": "66" + }, + { + "name": "device-list-properties", + "ret-type": "[68]", + "meta-type": "command", + "arg-type": "67" + }, + { + "name": "device_add", + "ret-type": "17", + "meta-type": "command", + "arg-type": "69" + }, + { + "name": "device_del", + "ret-type": "17", + "meta-type": "command", + "arg-type": "70" + }, + { + "name": "drive-backup", + "ret-type": "17", + "meta-type": "command", + "arg-type": "71" + }, + { + "name": "drive-mirror", + "ret-type": "17", + "meta-type": "command", + "arg-type": "72" + }, + { + "name": "dump-guest-memory", + "ret-type": "17", + "meta-type": "command", + "arg-type": "73" + }, + { + "name": "dump-skeys", + "ret-type": "17", + "meta-type": "command", + "arg-type": "74" + }, + { + "name": "eject", + "ret-type": "17", + "meta-type": "command", + "arg-type": "75" + }, + { + "name": "expire_password", + "ret-type": "17", + "meta-type": "command", + "arg-type": "76" + }, + { + "name": "getfd", + "ret-type": "17", + "meta-type": "command", + "arg-type": "77" + }, + { + "name": "human-monitor-command", + "ret-type": "str", + "meta-type": "command", + "arg-type": "78" + }, + { + "name": "inject-nmi", + "ret-type": "17", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "input-send-event", + "ret-type": "17", + "meta-type": "command", + "arg-type": "79" + }, + { + "name": "memsave", + "ret-type": "17", + "meta-type": "command", + "arg-type": "80" + }, + { + "name": "migrate", + "ret-type": "17", + "meta-type": "command", + "arg-type": "81" + }, + { + "name": "migrate-incoming", + "ret-type": "17", + "meta-type": "command", + "arg-type": "82" + }, + { + "name": "migrate-set-cache-size", + "ret-type": "17", + "meta-type": "command", + "arg-type": "83" + }, + { + "name": "migrate-set-capabilities", + "ret-type": "17", + "meta-type": "command", + "arg-type": "84" + }, + { + "name": "migrate-set-parameters", + "ret-type": "17", + "meta-type": "command", + "arg-type": "85" + }, + { + "name": "migrate-start-postcopy", + "ret-type": "17", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "migrate_cancel", + "ret-type": "17", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "migrate_set_downtime", + "ret-type": "17", + "meta-type": "command", + "arg-type": "86" + }, + { + "name": "migrate_set_speed", + "ret-type": "17", + "meta-type": "command", + "arg-type": "87" + }, + { + "name": "nbd-server-add", + "ret-type": "17", + "meta-type": "command", + "arg-type": "88" + }, + { + "name": "nbd-server-start", + "ret-type": "17", + "meta-type": "command", + "arg-type": "89" + }, + { + "name": "nbd-server-stop", + "ret-type": "17", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "netdev_add", + "ret-type": "17", + "meta-type": "command", + "arg-type": "90" + }, + { + "name": "netdev_del", + "ret-type": "17", + "meta-type": "command", + "arg-type": "91" + }, + { + "name": "object-add", + "ret-type": "17", + "meta-type": "command", + "arg-type": "92" + }, + { + "name": "object-del", + "ret-type": "17", + "meta-type": "command", + "arg-type": "93" + }, + { + "name": "pmemsave", + "ret-type": "17", + "meta-type": "command", + "arg-type": "94" + }, + { + "name": "qmp_capabilities", + "ret-type": "17", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "qom-get", + "ret-type": "any", + "meta-type": "command", + "arg-type": "95" + }, + { + "name": "qom-list", + "ret-type": "[97]", + "meta-type": "command", + "arg-type": "96" + }, + { + "name": "qom-list-types", + "ret-type": "[99]", + "meta-type": "command", + "arg-type": "98" + }, + { + "name": "qom-set", + "ret-type": "17", + "meta-type": "command", + "arg-type": "100" + }, + { + "name": "query-acpi-ospm-status", + "ret-type": "[101]", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-balloon", + "ret-type": "102", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-block", + "ret-type": "[103]", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-block-jobs", + "ret-type": "[104]", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-blockstats", + "ret-type": "[106]", + "meta-type": "command", + "arg-type": "105" + }, + { + "name": "query-chardev", + "ret-type": "[107]", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-chardev-backends", + "ret-type": "[108]", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-command-line-options", + "ret-type": "[110]", + "meta-type": "command", + "arg-type": "109" + }, + { + "name": "query-commands", + "ret-type": "[111]", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-cpu-definitions", + "ret-type": "[112]", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-cpu-model-baseline", + "ret-type": "114", + "meta-type": "command", + "arg-type": "113" + }, + { + "name": "query-cpu-model-comparison", + "ret-type": "116", + "meta-type": "command", + "arg-type": "115" + }, + { + "name": "query-cpu-model-expansion", + "ret-type": "118", + "meta-type": "command", + "arg-type": "117" + }, + { + "name": "query-cpus", + "ret-type": "[119]", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-dump", + "ret-type": "120", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-dump-guest-memory-capability", + "ret-type": "121", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-events", + "ret-type": "[122]", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-fdsets", + "ret-type": "[123]", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-gic-capabilities", + "ret-type": "[124]", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-hotpluggable-cpus", + "ret-type": "[125]", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-iothreads", + "ret-type": "[126]", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-kvm", + "ret-type": "127", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-machines", + "ret-type": "[128]", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-memdev", + "ret-type": "[129]", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-memory-devices", + "ret-type": "[130]", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-mice", + "ret-type": "[131]", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-migrate", + "ret-type": "132", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-migrate-cache-size", + "ret-type": "int", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-migrate-capabilities", + "ret-type": "[133]", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-migrate-parameters", + "ret-type": "85", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-name", + "ret-type": "134", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-named-block-nodes", + "ret-type": "[135]", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-pci", + "ret-type": "[136]", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-qmp-schema", + "ret-type": "[137]", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-rocker", + "ret-type": "139", + "meta-type": "command", + "arg-type": "138" + }, + { + "name": "query-rocker-of-dpa-flows", + "ret-type": "[141]", + "meta-type": "command", + "arg-type": "140" + }, + { + "name": "query-rocker-of-dpa-groups", + "ret-type": "[143]", + "meta-type": "command", + "arg-type": "142" + }, + { + "name": "query-rocker-ports", + "ret-type": "[145]", + "meta-type": "command", + "arg-type": "144" + }, + { + "name": "query-rx-filter", + "ret-type": "[147]", + "meta-type": "command", + "arg-type": "146" + }, + { + "name": "query-spice", + "ret-type": "148", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-status", + "ret-type": "149", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-target", + "ret-type": "150", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-tpm", + "ret-type": "[151]", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-tpm-models", + "ret-type": "[152]", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-tpm-types", + "ret-type": "[153]", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-uuid", + "ret-type": "154", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-version", + "ret-type": "155", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-vnc", + "ret-type": "156", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "query-vnc-servers", + "ret-type": "[157]", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "quit", + "ret-type": "17", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "remove-fd", + "ret-type": "17", + "meta-type": "command", + "arg-type": "158" + }, + { + "name": "ringbuf-read", + "ret-type": "str", + "meta-type": "command", + "arg-type": "159" + }, + { + "name": "ringbuf-write", + "ret-type": "17", + "meta-type": "command", + "arg-type": "160" + }, + { + "name": "rtc-reset-reinjection", + "ret-type": "17", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "screendump", + "ret-type": "17", + "meta-type": "command", + "arg-type": "161" + }, + { + "name": "send-key", + "ret-type": "17", + "meta-type": "command", + "arg-type": "162" + }, + { + "name": "set_link", + "ret-type": "17", + "meta-type": "command", + "arg-type": "163" + }, + { + "name": "set_password", + "ret-type": "17", + "meta-type": "command", + "arg-type": "164" + }, + { + "name": "stop", + "ret-type": "17", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "system_powerdown", + "ret-type": "17", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "system_reset", + "ret-type": "17", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "system_wakeup", + "ret-type": "17", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "trace-event-get-state", + "ret-type": "[166]", + "meta-type": "command", + "arg-type": "165" + }, + { + "name": "trace-event-set-state", + "ret-type": "17", + "meta-type": "command", + "arg-type": "167" + }, + { + "name": "transaction", + "ret-type": "17", + "meta-type": "command", + "arg-type": "168" + }, + { + "name": "x-blockdev-change", + "ret-type": "17", + "meta-type": "command", + "arg-type": "169" + }, + { + "name": "x-blockdev-del", + "ret-type": "17", + "meta-type": "command", + "arg-type": "170" + }, + { + "name": "x-blockdev-insert-medium", + "ret-type": "17", + "meta-type": "command", + "arg-type": "171" + }, + { + "name": "x-blockdev-remove-medium", + "ret-type": "17", + "meta-type": "command", + "arg-type": "172" + }, + { + "name": "x-colo-lost-heartbeat", + "ret-type": "17", + "meta-type": "command", + "arg-type": "17" + }, + { + "name": "xen-load-devices-state", + "ret-type": "17", + "meta-type": "command", + "arg-type": "173" + }, + { + "name": "xen-save-devices-state", + "ret-type": "17", + "meta-type": "command", + "arg-type": "174" + }, + { + "name": "xen-set-global-dirty-log", + "ret-type": "17", + "meta-type": "command", + "arg-type": "175" + }, + { + "name": "0", + "members": [ + { + "name": "info", + "type": "101" + } + ], + "meta-type": "object" + }, + { + "name": "1", + "members": [ + { + "name": "actual", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "2", + "members": [ + { + "name": "device", + "type": "str" + }, + { + "name": "node-name", + "default": null, + "type": "str" + }, + { + "name": "msg", + "type": "str" + }, + { + "name": "offset", + "default": null, + "type": "int" + }, + { + "name": "size", + "default": null, + "type": "int" + }, + { + "name": "fatal", + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "3", + "members": [ + { + "name": "device", + "type": "str" + }, + { + "name": "node-name", + "type": "str" + }, + { + "name": "operation", + "type": "176" + }, + { + "name": "action", + "type": "177" + }, + { + "name": "nospace", + "default": null, + "type": "bool" + }, + { + "name": "reason", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "4", + "members": [ + { + "name": "type", + "type": "178" + }, + { + "name": "device", + "type": "str" + }, + { + "name": "len", + "type": "int" + }, + { + "name": "offset", + "type": "int" + }, + { + "name": "speed", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "5", + "members": [ + { + "name": "type", + "type": "178" + }, + { + "name": "device", + "type": "str" + }, + { + "name": "len", + "type": "int" + }, + { + "name": "offset", + "type": "int" + }, + { + "name": "speed", + "type": "int" + }, + { + "name": "error", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "6", + "members": [ + { + "name": "device", + "type": "str" + }, + { + "name": "operation", + "type": "176" + }, + { + "name": "action", + "type": "177" + } + ], + "meta-type": "object" + }, + { + "name": "7", + "members": [ + { + "name": "type", + "type": "178" + }, + { + "name": "device", + "type": "str" + }, + { + "name": "len", + "type": "int" + }, + { + "name": "offset", + "type": "int" + }, + { + "name": "speed", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "8", + "members": [ + { + "name": "node-name", + "type": "str" + }, + { + "name": "amount-exceeded", + "type": "int" + }, + { + "name": "write-threshold", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "9", + "members": [ + { + "name": "device", + "default": null, + "type": "str" + }, + { + "name": "path", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "10", + "members": [ + { + "name": "device", + "type": "str" + }, + { + "name": "id", + "type": "str" + }, + { + "name": "tray-open", + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "11", + "members": [ + { + "name": "result", + "type": "120" + }, + { + "name": "error", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "12", + "members": [ + { + "name": "action", + "type": "179" + } + ], + "meta-type": "object" + }, + { + "name": "13", + "members": [ + { + "name": "device", + "type": "str" + }, + { + "name": "msg", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "14", + "members": [ + { + "name": "status", + "type": "180" + } + ], + "meta-type": "object" + }, + { + "name": "15", + "members": [ + { + "name": "pass", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "16", + "members": [ + { + "name": "name", + "default": null, + "type": "str" + }, + { + "name": "path", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "17", + "members": [ + ], + "meta-type": "object" + }, + { + "name": "18", + "members": [ + { + "name": "reference", + "type": "str" + }, + { + "name": "sector-num", + "type": "int" + }, + { + "name": "sectors-count", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "19", + "members": [ + { + "name": "type", + "type": "181" + }, + { + "name": "error", + "default": null, + "type": "str" + }, + { + "name": "node-name", + "type": "str" + }, + { + "name": "sector-num", + "type": "int" + }, + { + "name": "sectors-count", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "20", + "members": [ + { + "name": "offset", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "21", + "members": [ + { + "name": "server", + "type": "182" + }, + { + "name": "client", + "type": "182" + } + ], + "meta-type": "object" + }, + { + "name": "22", + "members": [ + { + "name": "server", + "type": "182" + }, + { + "name": "client", + "type": "182" + } + ], + "meta-type": "object" + }, + { + "name": "23", + "members": [ + { + "name": "server", + "type": "183" + }, + { + "name": "client", + "type": "184" + } + ], + "meta-type": "object" + }, + { + "name": "24", + "members": [ + { + "name": "server", + "type": "185" + }, + { + "name": "client", + "type": "186" + } + ], + "meta-type": "object" + }, + { + "name": "25", + "members": [ + { + "name": "server", + "type": "185" + }, + { + "name": "client", + "type": "187" + } + ], + "meta-type": "object" + }, + { + "name": "26", + "members": [ + { + "name": "server", + "type": "185" + }, + { + "name": "client", + "type": "187" + } + ], + "meta-type": "object" + }, + { + "name": "27", + "members": [ + { + "name": "id", + "type": "str" + }, + { + "name": "open", + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "28", + "members": [ + { + "name": "action", + "type": "188" + } + ], + "meta-type": "object" + }, + { + "name": "29", + "members": [ + { + "name": "fdset-id", + "default": null, + "type": "int" + }, + { + "name": "opaque", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "30", + "members": [ + { + "name": "fdset-id", + "type": "int" + }, + { + "name": "fd", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "31", + "members": [ + { + "name": "protocol", + "type": "str" + }, + { + "name": "fdname", + "type": "str" + }, + { + "name": "skipauth", + "default": null, + "type": "bool" + }, + { + "name": "tls", + "default": null, + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "32", + "members": [ + { + "name": "value", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "33", + "members": [ + { + "name": "job-id", + "default": null, + "type": "str" + }, + { + "name": "device", + "type": "str" + }, + { + "name": "base", + "default": null, + "type": "str" + }, + { + "name": "top", + "default": null, + "type": "str" + }, + { + "name": "backing-file", + "default": null, + "type": "str" + }, + { + "name": "speed", + "default": null, + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "34", + "members": [ + { + "name": "node", + "type": "str" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "granularity", + "default": null, + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "35", + "members": [ + { + "name": "node", + "type": "str" + }, + { + "name": "name", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "36", + "members": [ + { + "name": "device", + "type": "str" + }, + { + "name": "force", + "default": null, + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "37", + "members": [ + { + "name": "device", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "38", + "members": [ + { + "name": "device", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "39", + "members": [ + { + "name": "device", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "40", + "members": [ + { + "name": "device", + "type": "str" + }, + { + "name": "speed", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "41", + "members": [ + { + "name": "node-name", + "type": "str" + }, + { + "name": "write-threshold", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "42", + "members": [ + { + "name": "job-id", + "default": null, + "type": "str" + }, + { + "name": "device", + "type": "str" + }, + { + "name": "base", + "default": null, + "type": "str" + }, + { + "name": "base-node", + "default": null, + "type": "str" + }, + { + "name": "backing-file", + "default": null, + "type": "str" + }, + { + "name": "speed", + "default": null, + "type": "int" + }, + { + "name": "on-error", + "default": null, + "type": "189" + } + ], + "meta-type": "object" + }, + { + "name": "43", + "members": [ + { + "name": "device", + "default": null, + "type": "str" + }, + { + "name": "node-name", + "default": null, + "type": "str" + }, + { + "name": "password", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "44", + "members": [ + { + "name": "device", + "default": null, + "type": "str" + }, + { + "name": "node-name", + "default": null, + "type": "str" + }, + { + "name": "size", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "45", + "members": [ + { + "name": "device", + "default": null, + "type": "str" + }, + { + "name": "id", + "default": null, + "type": "str" + }, + { + "name": "bps", + "type": "int" + }, + { + "name": "bps_rd", + "type": "int" + }, + { + "name": "bps_wr", + "type": "int" + }, + { + "name": "iops", + "type": "int" + }, + { + "name": "iops_rd", + "type": "int" + }, + { + "name": "iops_wr", + "type": "int" + }, + { + "name": "bps_max", + "default": null, + "type": "int" + }, + { + "name": "bps_rd_max", + "default": null, + "type": "int" + }, + { + "name": "bps_wr_max", + "default": null, + "type": "int" + }, + { + "name": "iops_max", + "default": null, + "type": "int" + }, + { + "name": "iops_rd_max", + "default": null, + "type": "int" + }, + { + "name": "iops_wr_max", + "default": null, + "type": "int" + }, + { + "name": "bps_max_length", + "default": null, + "type": "int" + }, + { + "name": "bps_rd_max_length", + "default": null, + "type": "int" + }, + { + "name": "bps_wr_max_length", + "default": null, + "type": "int" + }, + { + "name": "iops_max_length", + "default": null, + "type": "int" + }, + { + "name": "iops_rd_max_length", + "default": null, + "type": "int" + }, + { + "name": "iops_wr_max_length", + "default": null, + "type": "int" + }, + { + "name": "iops_size", + "default": null, + "type": "int" + }, + { + "name": "group", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "46", + "tag": "driver", + "variants": [ + { + "case": "archipelago", + "type": "194" + }, + { + "case": "blkdebug", + "type": "195" + }, + { + "case": "blkverify", + "type": "196" + }, + { + "case": "bochs", + "type": "197" + }, + { + "case": "cloop", + "type": "197" + }, + { + "case": "dmg", + "type": "197" + }, + { + "case": "file", + "type": "198" + }, + { + "case": "ftp", + "type": "199" + }, + { + "case": "ftps", + "type": "199" + }, + { + "case": "gluster", + "type": "200" + }, + { + "case": "host_cdrom", + "type": "198" + }, + { + "case": "host_device", + "type": "198" + }, + { + "case": "http", + "type": "199" + }, + { + "case": "https", + "type": "199" + }, + { + "case": "luks", + "type": "201" + }, + { + "case": "nbd", + "type": "202" + }, + { + "case": "nfs", + "type": "203" + }, + { + "case": "null-aio", + "type": "204" + }, + { + "case": "null-co", + "type": "204" + }, + { + "case": "parallels", + "type": "197" + }, + { + "case": "qcow2", + "type": "205" + }, + { + "case": "qcow", + "type": "206" + }, + { + "case": "qed", + "type": "206" + }, + { + "case": "quorum", + "type": "207" + }, + { + "case": "raw", + "type": "208" + }, + { + "case": "replication", + "type": "209" + }, + { + "case": "ssh", + "type": "210" + }, + { + "case": "vdi", + "type": "197" + }, + { + "case": "vhdx", + "type": "197" + }, + { + "case": "vmdk", + "type": "206" + }, + { + "case": "vpc", + "type": "197" + }, + { + "case": "vvfat", + "type": "211" + } + ], + "members": [ + { + "name": "driver", + "type": "190" + }, + { + "name": "node-name", + "default": null, + "type": "str" + }, + { + "name": "discard", + "default": null, + "type": "191" + }, + { + "name": "cache", + "default": null, + "type": "192" + }, + { + "name": "read-only", + "default": null, + "type": "bool" + }, + { + "name": "detect-zeroes", + "default": null, + "type": "193" + } + ], + "meta-type": "object" + }, + { + "name": "47", + "members": [ + { + "name": "job-id", + "default": null, + "type": "str" + }, + { + "name": "device", + "type": "str" + }, + { + "name": "target", + "type": "str" + }, + { + "name": "sync", + "type": "212" + }, + { + "name": "speed", + "default": null, + "type": "int" + }, + { + "name": "compress", + "default": null, + "type": "bool" + }, + { + "name": "on-source-error", + "default": null, + "type": "189" + }, + { + "name": "on-target-error", + "default": null, + "type": "189" + } + ], + "meta-type": "object" + }, + { + "name": "48", + "members": [ + { + "name": "device", + "default": null, + "type": "str" + }, + { + "name": "id", + "default": null, + "type": "str" + }, + { + "name": "filename", + "type": "str" + }, + { + "name": "format", + "default": null, + "type": "str" + }, + { + "name": "read-only-mode", + "default": null, + "type": "213" + } + ], + "meta-type": "object" + }, + { + "name": "49", + "members": [ + { + "name": "device", + "default": null, + "type": "str" + }, + { + "name": "id", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "50", + "members": [ + { + "name": "job-id", + "default": null, + "type": "str" + }, + { + "name": "device", + "type": "str" + }, + { + "name": "target", + "type": "str" + }, + { + "name": "replaces", + "default": null, + "type": "str" + }, + { + "name": "sync", + "type": "212" + }, + { + "name": "speed", + "default": null, + "type": "int" + }, + { + "name": "granularity", + "default": null, + "type": "int" + }, + { + "name": "buf-size", + "default": null, + "type": "int" + }, + { + "name": "on-source-error", + "default": null, + "type": "189" + }, + { + "name": "on-target-error", + "default": null, + "type": "189" + } + ], + "meta-type": "object" + }, + { + "name": "51", + "members": [ + { + "name": "device", + "default": null, + "type": "str" + }, + { + "name": "id", + "default": null, + "type": "str" + }, + { + "name": "force", + "default": null, + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "52", + "members": [ + { + "name": "node", + "type": "str" + }, + { + "name": "overlay", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "53", + "members": [ + { + "name": "device", + "type": "str" + }, + { + "name": "id", + "default": null, + "type": "str" + }, + { + "name": "name", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "54", + "members": [ + { + "name": "id", + "type": "str" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "vm-state-size", + "type": "int" + }, + { + "name": "date-sec", + "type": "int" + }, + { + "name": "date-nsec", + "type": "int" + }, + { + "name": "vm-clock-sec", + "type": "int" + }, + { + "name": "vm-clock-nsec", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "55", + "members": [ + { + "name": "device", + "type": "str" + }, + { + "name": "name", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "56", + "members": [ + { + "name": "device", + "default": null, + "type": "str" + }, + { + "name": "node-name", + "default": null, + "type": "str" + }, + { + "name": "snapshot-file", + "type": "str" + }, + { + "name": "snapshot-node-name", + "default": null, + "type": "str" + }, + { + "name": "format", + "default": null, + "type": "str" + }, + { + "name": "mode", + "default": null, + "type": "214" + } + ], + "meta-type": "object" + }, + { + "name": "57", + "members": [ + { + "name": "device", + "type": "str" + }, + { + "name": "target", + "type": "str" + }, + { + "name": "arg", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "58", + "members": [ + { + "name": "device", + "type": "str" + }, + { + "name": "image-node-name", + "type": "str" + }, + { + "name": "backing-file", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "59", + "members": [ + { + "name": "password", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "60", + "members": [ + { + "name": "id", + "type": "str" + }, + { + "name": "backend", + "type": "215" + } + ], + "meta-type": "object" + }, + { + "name": "61", + "members": [ + { + "name": "pty", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "62", + "members": [ + { + "name": "id", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "63", + "members": [ + { + "name": "protocol", + "type": "str" + }, + { + "name": "hostname", + "type": "str" + }, + { + "name": "port", + "default": null, + "type": "int" + }, + { + "name": "tls-port", + "default": null, + "type": "int" + }, + { + "name": "cert-subject", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "64", + "members": [ + { + "name": "fdname", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "65", + "members": [ + { + "name": "index", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "66", + "members": [ + { + "name": "id", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "67", + "members": [ + { + "name": "typename", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "[68]", + "element-type": "68", + "meta-type": "array" + }, + { + "name": "68", + "members": [ + { + "name": "name", + "type": "str" + }, + { + "name": "type", + "type": "str" + }, + { + "name": "description", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "69", + "members": [ + { + "name": "driver", + "type": "str" + }, + { + "name": "bus", + "default": null, + "type": "str" + }, + { + "name": "id", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "70", + "members": [ + { + "name": "id", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "71", + "members": [ + { + "name": "job-id", + "default": null, + "type": "str" + }, + { + "name": "device", + "type": "str" + }, + { + "name": "target", + "type": "str" + }, + { + "name": "format", + "default": null, + "type": "str" + }, + { + "name": "sync", + "type": "212" + }, + { + "name": "mode", + "default": null, + "type": "214" + }, + { + "name": "speed", + "default": null, + "type": "int" + }, + { + "name": "bitmap", + "default": null, + "type": "str" + }, + { + "name": "compress", + "default": null, + "type": "bool" + }, + { + "name": "on-source-error", + "default": null, + "type": "189" + }, + { + "name": "on-target-error", + "default": null, + "type": "189" + } + ], + "meta-type": "object" + }, + { + "name": "72", + "members": [ + { + "name": "job-id", + "default": null, + "type": "str" + }, + { + "name": "device", + "type": "str" + }, + { + "name": "target", + "type": "str" + }, + { + "name": "format", + "default": null, + "type": "str" + }, + { + "name": "node-name", + "default": null, + "type": "str" + }, + { + "name": "replaces", + "default": null, + "type": "str" + }, + { + "name": "sync", + "type": "212" + }, + { + "name": "mode", + "default": null, + "type": "214" + }, + { + "name": "speed", + "default": null, + "type": "int" + }, + { + "name": "granularity", + "default": null, + "type": "int" + }, + { + "name": "buf-size", + "default": null, + "type": "int" + }, + { + "name": "on-source-error", + "default": null, + "type": "189" + }, + { + "name": "on-target-error", + "default": null, + "type": "189" + }, + { + "name": "unmap", + "default": null, + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "73", + "members": [ + { + "name": "paging", + "type": "bool" + }, + { + "name": "protocol", + "type": "str" + }, + { + "name": "detach", + "default": null, + "type": "bool" + }, + { + "name": "begin", + "default": null, + "type": "int" + }, + { + "name": "length", + "default": null, + "type": "int" + }, + { + "name": "format", + "default": null, + "type": "216" + } + ], + "meta-type": "object" + }, + { + "name": "74", + "members": [ + { + "name": "filename", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "75", + "members": [ + { + "name": "device", + "default": null, + "type": "str" + }, + { + "name": "id", + "default": null, + "type": "str" + }, + { + "name": "force", + "default": null, + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "76", + "members": [ + { + "name": "protocol", + "type": "str" + }, + { + "name": "time", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "77", + "members": [ + { + "name": "fdname", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "78", + "members": [ + { + "name": "command-line", + "type": "str" + }, + { + "name": "cpu-index", + "default": null, + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "str", + "json-type": "string", + "meta-type": "builtin" + }, + { + "name": "79", + "members": [ + { + "name": "device", + "default": null, + "type": "str" + }, + { + "name": "head", + "default": null, + "type": "int" + }, + { + "name": "events", + "type": "[217]" + } + ], + "meta-type": "object" + }, + { + "name": "80", + "members": [ + { + "name": "val", + "type": "int" + }, + { + "name": "size", + "type": "int" + }, + { + "name": "filename", + "type": "str" + }, + { + "name": "cpu-index", + "default": null, + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "81", + "members": [ + { + "name": "uri", + "type": "str" + }, + { + "name": "blk", + "default": null, + "type": "bool" + }, + { + "name": "inc", + "default": null, + "type": "bool" + }, + { + "name": "detach", + "default": null, + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "82", + "members": [ + { + "name": "uri", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "83", + "members": [ + { + "name": "value", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "84", + "members": [ + { + "name": "capabilities", + "type": "[133]" + } + ], + "meta-type": "object" + }, + { + "name": "85", + "members": [ + { + "name": "compress-level", + "default": null, + "type": "int" + }, + { + "name": "compress-threads", + "default": null, + "type": "int" + }, + { + "name": "decompress-threads", + "default": null, + "type": "int" + }, + { + "name": "cpu-throttle-initial", + "default": null, + "type": "int" + }, + { + "name": "cpu-throttle-increment", + "default": null, + "type": "int" + }, + { + "name": "tls-creds", + "default": null, + "type": "str" + }, + { + "name": "tls-hostname", + "default": null, + "type": "str" + }, + { + "name": "max-bandwidth", + "default": null, + "type": "int" + }, + { + "name": "downtime-limit", + "default": null, + "type": "int" + }, + { + "name": "x-checkpoint-delay", + "default": null, + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "86", + "members": [ + { + "name": "value", + "type": "number" + } + ], + "meta-type": "object" + }, + { + "name": "87", + "members": [ + { + "name": "value", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "88", + "members": [ + { + "name": "device", + "type": "str" + }, + { + "name": "writable", + "default": null, + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "89", + "members": [ + { + "name": "addr", + "type": "218" + }, + { + "name": "tls-creds", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "90", + "members": [ + { + "name": "type", + "type": "str" + }, + { + "name": "id", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "91", + "members": [ + { + "name": "id", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "92", + "members": [ + { + "name": "qom-type", + "type": "str" + }, + { + "name": "id", + "type": "str" + }, + { + "name": "props", + "default": null, + "type": "any" + } + ], + "meta-type": "object" + }, + { + "name": "93", + "members": [ + { + "name": "id", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "94", + "members": [ + { + "name": "val", + "type": "int" + }, + { + "name": "size", + "type": "int" + }, + { + "name": "filename", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "95", + "members": [ + { + "name": "path", + "type": "str" + }, + { + "name": "property", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "any", + "json-type": "value", + "meta-type": "builtin" + }, + { + "name": "96", + "members": [ + { + "name": "path", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "[97]", + "element-type": "97", + "meta-type": "array" + }, + { + "name": "97", + "members": [ + { + "name": "name", + "type": "str" + }, + { + "name": "type", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "98", + "members": [ + { + "name": "implements", + "default": null, + "type": "str" + }, + { + "name": "abstract", + "default": null, + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "[99]", + "element-type": "99", + "meta-type": "array" + }, + { + "name": "99", + "members": [ + { + "name": "name", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "100", + "members": [ + { + "name": "path", + "type": "str" + }, + { + "name": "property", + "type": "str" + }, + { + "name": "value", + "type": "any" + } + ], + "meta-type": "object" + }, + { + "name": "[101]", + "element-type": "101", + "meta-type": "array" + }, + { + "name": "101", + "members": [ + { + "name": "device", + "default": null, + "type": "str" + }, + { + "name": "slot", + "type": "str" + }, + { + "name": "slot-type", + "type": "219" + }, + { + "name": "source", + "type": "int" + }, + { + "name": "status", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "102", + "members": [ + { + "name": "actual", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "[103]", + "element-type": "103", + "meta-type": "array" + }, + { + "name": "103", + "members": [ + { + "name": "device", + "type": "str" + }, + { + "name": "type", + "type": "str" + }, + { + "name": "removable", + "type": "bool" + }, + { + "name": "locked", + "type": "bool" + }, + { + "name": "inserted", + "default": null, + "type": "135" + }, + { + "name": "tray_open", + "default": null, + "type": "bool" + }, + { + "name": "io-status", + "default": null, + "type": "220" + }, + { + "name": "dirty-bitmaps", + "default": null, + "type": "[221]" + } + ], + "meta-type": "object" + }, + { + "name": "[104]", + "element-type": "104", + "meta-type": "array" + }, + { + "name": "104", + "members": [ + { + "name": "type", + "type": "str" + }, + { + "name": "device", + "type": "str" + }, + { + "name": "len", + "type": "int" + }, + { + "name": "offset", + "type": "int" + }, + { + "name": "busy", + "type": "bool" + }, + { + "name": "paused", + "type": "bool" + }, + { + "name": "speed", + "type": "int" + }, + { + "name": "io-status", + "type": "220" + }, + { + "name": "ready", + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "105", + "members": [ + { + "name": "query-nodes", + "default": null, + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "[106]", + "element-type": "106", + "meta-type": "array" + }, + { + "name": "106", + "members": [ + { + "name": "device", + "default": null, + "type": "str" + }, + { + "name": "node-name", + "default": null, + "type": "str" + }, + { + "name": "stats", + "type": "222" + }, + { + "name": "parent", + "default": null, + "type": "106" + }, + { + "name": "backing", + "default": null, + "type": "106" + } + ], + "meta-type": "object" + }, + { + "name": "[107]", + "element-type": "107", + "meta-type": "array" + }, + { + "name": "107", + "members": [ + { + "name": "label", + "type": "str" + }, + { + "name": "filename", + "type": "str" + }, + { + "name": "frontend-open", + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "[108]", + "element-type": "108", + "meta-type": "array" + }, + { + "name": "108", + "members": [ + { + "name": "name", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "109", + "members": [ + { + "name": "option", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "[110]", + "element-type": "110", + "meta-type": "array" + }, + { + "name": "110", + "members": [ + { + "name": "option", + "type": "str" + }, + { + "name": "parameters", + "type": "[223]" + } + ], + "meta-type": "object" + }, + { + "name": "[111]", + "element-type": "111", + "meta-type": "array" + }, + { + "name": "111", + "members": [ + { + "name": "name", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "[112]", + "element-type": "112", + "meta-type": "array" + }, + { + "name": "112", + "members": [ + { + "name": "name", + "type": "str" + }, + { + "name": "migration-safe", + "default": null, + "type": "bool" + }, + { + "name": "static", + "type": "bool" + }, + { + "name": "unavailable-features", + "default": null, + "type": "[str]" + }, + { + "name": "typename", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "113", + "members": [ + { + "name": "modela", + "type": "224" + }, + { + "name": "modelb", + "type": "224" + } + ], + "meta-type": "object" + }, + { + "name": "114", + "members": [ + { + "name": "model", + "type": "224" + } + ], + "meta-type": "object" + }, + { + "name": "115", + "members": [ + { + "name": "modela", + "type": "224" + }, + { + "name": "modelb", + "type": "224" + } + ], + "meta-type": "object" + }, + { + "name": "116", + "members": [ + { + "name": "result", + "type": "225" + }, + { + "name": "responsible-properties", + "type": "[str]" + } + ], + "meta-type": "object" + }, + { + "name": "117", + "members": [ + { + "name": "type", + "type": "226" + }, + { + "name": "model", + "type": "224" + } + ], + "meta-type": "object" + }, + { + "name": "118", + "members": [ + { + "name": "model", + "type": "224" + } + ], + "meta-type": "object" + }, + { + "name": "[119]", + "element-type": "119", + "meta-type": "array" + }, + { + "name": "119", + "tag": "arch", + "variants": [ + { + "case": "x86", + "type": "228" + }, + { + "case": "sparc", + "type": "229" + }, + { + "case": "ppc", + "type": "230" + }, + { + "case": "mips", + "type": "231" + }, + { + "case": "tricore", + "type": "232" + }, + { + "case": "other", + "type": "233" + } + ], + "members": [ + { + "name": "CPU", + "type": "int" + }, + { + "name": "current", + "type": "bool" + }, + { + "name": "halted", + "type": "bool" + }, + { + "name": "qom_path", + "type": "str" + }, + { + "name": "thread_id", + "type": "int" + }, + { + "name": "arch", + "type": "227" + } + ], + "meta-type": "object" + }, + { + "name": "120", + "members": [ + { + "name": "status", + "type": "234" + }, + { + "name": "completed", + "type": "int" + }, + { + "name": "total", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "121", + "members": [ + { + "name": "formats", + "type": "[216]" + } + ], + "meta-type": "object" + }, + { + "name": "[122]", + "element-type": "122", + "meta-type": "array" + }, + { + "name": "122", + "members": [ + { + "name": "name", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "[123]", + "element-type": "123", + "meta-type": "array" + }, + { + "name": "123", + "members": [ + { + "name": "fdset-id", + "type": "int" + }, + { + "name": "fds", + "type": "[235]" + } + ], + "meta-type": "object" + }, + { + "name": "[124]", + "element-type": "124", + "meta-type": "array" + }, + { + "name": "124", + "members": [ + { + "name": "version", + "type": "int" + }, + { + "name": "emulated", + "type": "bool" + }, + { + "name": "kernel", + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "[125]", + "element-type": "125", + "meta-type": "array" + }, + { + "name": "125", + "members": [ + { + "name": "type", + "type": "str" + }, + { + "name": "vcpus-count", + "type": "int" + }, + { + "name": "props", + "type": "236" + }, + { + "name": "qom-path", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "[126]", + "element-type": "126", + "meta-type": "array" + }, + { + "name": "126", + "members": [ + { + "name": "id", + "type": "str" + }, + { + "name": "thread-id", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "127", + "members": [ + { + "name": "enabled", + "type": "bool" + }, + { + "name": "present", + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "[128]", + "element-type": "128", + "meta-type": "array" + }, + { + "name": "128", + "members": [ + { + "name": "name", + "type": "str" + }, + { + "name": "alias", + "default": null, + "type": "str" + }, + { + "name": "is-default", + "default": null, + "type": "bool" + }, + { + "name": "cpu-max", + "type": "int" + }, + { + "name": "hotpluggable-cpus", + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "[129]", + "element-type": "129", + "meta-type": "array" + }, + { + "name": "129", + "members": [ + { + "name": "id", + "default": null, + "type": "str" + }, + { + "name": "size", + "type": "int" + }, + { + "name": "merge", + "type": "bool" + }, + { + "name": "dump", + "type": "bool" + }, + { + "name": "prealloc", + "type": "bool" + }, + { + "name": "host-nodes", + "type": "[int]" + }, + { + "name": "policy", + "type": "237" + } + ], + "meta-type": "object" + }, + { + "name": "[130]", + "element-type": "130", + "meta-type": "array" + }, + { + "name": "130", + "tag": "type", + "variants": [ + { + "case": "dimm", + "type": "239" + } + ], + "members": [ + { + "name": "type", + "type": "238" + } + ], + "meta-type": "object" + }, + { + "name": "[131]", + "element-type": "131", + "meta-type": "array" + }, + { + "name": "131", + "members": [ + { + "name": "name", + "type": "str" + }, + { + "name": "index", + "type": "int" + }, + { + "name": "current", + "type": "bool" + }, + { + "name": "absolute", + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "132", + "members": [ + { + "name": "status", + "default": null, + "type": "180" + }, + { + "name": "ram", + "default": null, + "type": "240" + }, + { + "name": "disk", + "default": null, + "type": "240" + }, + { + "name": "xbzrle-cache", + "default": null, + "type": "241" + }, + { + "name": "total-time", + "default": null, + "type": "int" + }, + { + "name": "expected-downtime", + "default": null, + "type": "int" + }, + { + "name": "downtime", + "default": null, + "type": "int" + }, + { + "name": "setup-time", + "default": null, + "type": "int" + }, + { + "name": "cpu-throttle-percentage", + "default": null, + "type": "int" + }, + { + "name": "error-desc", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "int", + "json-type": "int", + "meta-type": "builtin" + }, + { + "name": "[133]", + "element-type": "133", + "meta-type": "array" + }, + { + "name": "133", + "members": [ + { + "name": "capability", + "type": "242" + }, + { + "name": "state", + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "134", + "members": [ + { + "name": "name", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "[135]", + "element-type": "135", + "meta-type": "array" + }, + { + "name": "135", + "members": [ + { + "name": "file", + "type": "str" + }, + { + "name": "node-name", + "default": null, + "type": "str" + }, + { + "name": "ro", + "type": "bool" + }, + { + "name": "drv", + "type": "str" + }, + { + "name": "backing_file", + "default": null, + "type": "str" + }, + { + "name": "backing_file_depth", + "type": "int" + }, + { + "name": "encrypted", + "type": "bool" + }, + { + "name": "encryption_key_missing", + "type": "bool" + }, + { + "name": "detect_zeroes", + "type": "193" + }, + { + "name": "bps", + "type": "int" + }, + { + "name": "bps_rd", + "type": "int" + }, + { + "name": "bps_wr", + "type": "int" + }, + { + "name": "iops", + "type": "int" + }, + { + "name": "iops_rd", + "type": "int" + }, + { + "name": "iops_wr", + "type": "int" + }, + { + "name": "image", + "type": "243" + }, + { + "name": "bps_max", + "default": null, + "type": "int" + }, + { + "name": "bps_rd_max", + "default": null, + "type": "int" + }, + { + "name": "bps_wr_max", + "default": null, + "type": "int" + }, + { + "name": "iops_max", + "default": null, + "type": "int" + }, + { + "name": "iops_rd_max", + "default": null, + "type": "int" + }, + { + "name": "iops_wr_max", + "default": null, + "type": "int" + }, + { + "name": "bps_max_length", + "default": null, + "type": "int" + }, + { + "name": "bps_rd_max_length", + "default": null, + "type": "int" + }, + { + "name": "bps_wr_max_length", + "default": null, + "type": "int" + }, + { + "name": "iops_max_length", + "default": null, + "type": "int" + }, + { + "name": "iops_rd_max_length", + "default": null, + "type": "int" + }, + { + "name": "iops_wr_max_length", + "default": null, + "type": "int" + }, + { + "name": "iops_size", + "default": null, + "type": "int" + }, + { + "name": "group", + "default": null, + "type": "str" + }, + { + "name": "cache", + "type": "244" + }, + { + "name": "write_threshold", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "[136]", + "element-type": "136", + "meta-type": "array" + }, + { + "name": "136", + "members": [ + { + "name": "bus", + "type": "int" + }, + { + "name": "devices", + "type": "[245]" + } + ], + "meta-type": "object" + }, + { + "name": "[137]", + "element-type": "137", + "meta-type": "array" + }, + { + "name": "137", + "tag": "meta-type", + "variants": [ + { + "case": "builtin", + "type": "247" + }, + { + "case": "enum", + "type": "248" + }, + { + "case": "array", + "type": "249" + }, + { + "case": "object", + "type": "250" + }, + { + "case": "alternate", + "type": "251" + }, + { + "case": "command", + "type": "252" + }, + { + "case": "event", + "type": "253" + } + ], + "members": [ + { + "name": "name", + "type": "str" + }, + { + "name": "meta-type", + "type": "246" + } + ], + "meta-type": "object" + }, + { + "name": "138", + "members": [ + { + "name": "name", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "139", + "members": [ + { + "name": "name", + "type": "str" + }, + { + "name": "id", + "type": "int" + }, + { + "name": "ports", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "140", + "members": [ + { + "name": "name", + "type": "str" + }, + { + "name": "tbl-id", + "default": null, + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "[141]", + "element-type": "141", + "meta-type": "array" + }, + { + "name": "141", + "members": [ + { + "name": "cookie", + "type": "int" + }, + { + "name": "hits", + "type": "int" + }, + { + "name": "key", + "type": "254" + }, + { + "name": "mask", + "type": "255" + }, + { + "name": "action", + "type": "256" + } + ], + "meta-type": "object" + }, + { + "name": "142", + "members": [ + { + "name": "name", + "type": "str" + }, + { + "name": "type", + "default": null, + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "[143]", + "element-type": "143", + "meta-type": "array" + }, + { + "name": "143", + "members": [ + { + "name": "id", + "type": "int" + }, + { + "name": "type", + "type": "int" + }, + { + "name": "vlan-id", + "default": null, + "type": "int" + }, + { + "name": "pport", + "default": null, + "type": "int" + }, + { + "name": "index", + "default": null, + "type": "int" + }, + { + "name": "out-pport", + "default": null, + "type": "int" + }, + { + "name": "group-id", + "default": null, + "type": "int" + }, + { + "name": "set-vlan-id", + "default": null, + "type": "int" + }, + { + "name": "pop-vlan", + "default": null, + "type": "int" + }, + { + "name": "group-ids", + "default": null, + "type": "[int]" + }, + { + "name": "set-eth-src", + "default": null, + "type": "str" + }, + { + "name": "set-eth-dst", + "default": null, + "type": "str" + }, + { + "name": "ttl-check", + "default": null, + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "144", + "members": [ + { + "name": "name", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "[145]", + "element-type": "145", + "meta-type": "array" + }, + { + "name": "145", + "members": [ + { + "name": "name", + "type": "str" + }, + { + "name": "enabled", + "type": "bool" + }, + { + "name": "link-up", + "type": "bool" + }, + { + "name": "speed", + "type": "int" + }, + { + "name": "duplex", + "type": "257" + }, + { + "name": "autoneg", + "type": "258" + } + ], + "meta-type": "object" + }, + { + "name": "146", + "members": [ + { + "name": "name", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "[147]", + "element-type": "147", + "meta-type": "array" + }, + { + "name": "147", + "members": [ + { + "name": "name", + "type": "str" + }, + { + "name": "promiscuous", + "type": "bool" + }, + { + "name": "multicast", + "type": "259" + }, + { + "name": "unicast", + "type": "259" + }, + { + "name": "vlan", + "type": "259" + }, + { + "name": "broadcast-allowed", + "type": "bool" + }, + { + "name": "multicast-overflow", + "type": "bool" + }, + { + "name": "unicast-overflow", + "type": "bool" + }, + { + "name": "main-mac", + "type": "str" + }, + { + "name": "vlan-table", + "type": "[int]" + }, + { + "name": "unicast-table", + "type": "[str]" + }, + { + "name": "multicast-table", + "type": "[str]" + } + ], + "meta-type": "object" + }, + { + "name": "148", + "members": [ + { + "name": "enabled", + "type": "bool" + }, + { + "name": "migrated", + "type": "bool" + }, + { + "name": "host", + "default": null, + "type": "str" + }, + { + "name": "port", + "default": null, + "type": "int" + }, + { + "name": "tls-port", + "default": null, + "type": "int" + }, + { + "name": "auth", + "default": null, + "type": "str" + }, + { + "name": "compiled-version", + "default": null, + "type": "str" + }, + { + "name": "mouse-mode", + "type": "260" + }, + { + "name": "channels", + "default": null, + "type": "[184]" + } + ], + "meta-type": "object" + }, + { + "name": "149", + "members": [ + { + "name": "running", + "type": "bool" + }, + { + "name": "singlestep", + "type": "bool" + }, + { + "name": "status", + "type": "261" + } + ], + "meta-type": "object" + }, + { + "name": "150", + "members": [ + { + "name": "arch", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "[151]", + "element-type": "151", + "meta-type": "array" + }, + { + "name": "151", + "members": [ + { + "name": "id", + "type": "str" + }, + { + "name": "model", + "type": "152" + }, + { + "name": "options", + "type": "262" + } + ], + "meta-type": "object" + }, + { + "name": "[152]", + "element-type": "152", + "meta-type": "array" + }, + { + "name": "152", + "meta-type": "enum", + "values": [ + "tpm-tis" + ] + }, + { + "name": "[153]", + "element-type": "153", + "meta-type": "array" + }, + { + "name": "153", + "meta-type": "enum", + "values": [ + "passthrough" + ] + }, + { + "name": "154", + "members": [ + { + "name": "UUID", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "155", + "members": [ + { + "name": "qemu", + "type": "263" + }, + { + "name": "package", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "156", + "members": [ + { + "name": "enabled", + "type": "bool" + }, + { + "name": "host", + "default": null, + "type": "str" + }, + { + "name": "family", + "default": null, + "type": "264" + }, + { + "name": "service", + "default": null, + "type": "str" + }, + { + "name": "auth", + "default": null, + "type": "str" + }, + { + "name": "clients", + "default": null, + "type": "[187]" + } + ], + "meta-type": "object" + }, + { + "name": "[157]", + "element-type": "157", + "meta-type": "array" + }, + { + "name": "157", + "members": [ + { + "name": "id", + "type": "str" + }, + { + "name": "server", + "type": "[186]" + }, + { + "name": "clients", + "type": "[187]" + }, + { + "name": "auth", + "type": "265" + }, + { + "name": "vencrypt", + "default": null, + "type": "266" + }, + { + "name": "display", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "158", + "members": [ + { + "name": "fdset-id", + "type": "int" + }, + { + "name": "fd", + "default": null, + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "159", + "members": [ + { + "name": "device", + "type": "str" + }, + { + "name": "size", + "type": "int" + }, + { + "name": "format", + "default": null, + "type": "267" + } + ], + "meta-type": "object" + }, + { + "name": "160", + "members": [ + { + "name": "device", + "type": "str" + }, + { + "name": "data", + "type": "str" + }, + { + "name": "format", + "default": null, + "type": "267" + } + ], + "meta-type": "object" + }, + { + "name": "161", + "members": [ + { + "name": "filename", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "162", + "members": [ + { + "name": "keys", + "type": "[268]" + }, + { + "name": "hold-time", + "default": null, + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "163", + "members": [ + { + "name": "name", + "type": "str" + }, + { + "name": "up", + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "164", + "members": [ + { + "name": "protocol", + "type": "str" + }, + { + "name": "password", + "type": "str" + }, + { + "name": "connected", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "165", + "members": [ + { + "name": "name", + "type": "str" + }, + { + "name": "vcpu", + "default": null, + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "[166]", + "element-type": "166", + "meta-type": "array" + }, + { + "name": "166", + "members": [ + { + "name": "name", + "type": "str" + }, + { + "name": "state", + "type": "269" + }, + { + "name": "vcpu", + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "167", + "members": [ + { + "name": "name", + "type": "str" + }, + { + "name": "enable", + "type": "bool" + }, + { + "name": "ignore-unavailable", + "default": null, + "type": "bool" + }, + { + "name": "vcpu", + "default": null, + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "168", + "members": [ + { + "name": "actions", + "type": "[270]" + }, + { + "name": "properties", + "default": null, + "type": "271" + } + ], + "meta-type": "object" + }, + { + "name": "169", + "members": [ + { + "name": "parent", + "type": "str" + }, + { + "name": "child", + "default": null, + "type": "str" + }, + { + "name": "node", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "170", + "members": [ + { + "name": "node-name", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "171", + "members": [ + { + "name": "device", + "default": null, + "type": "str" + }, + { + "name": "id", + "default": null, + "type": "str" + }, + { + "name": "node-name", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "172", + "members": [ + { + "name": "device", + "default": null, + "type": "str" + }, + { + "name": "id", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "173", + "members": [ + { + "name": "filename", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "174", + "members": [ + { + "name": "filename", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "175", + "members": [ + { + "name": "enable", + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "bool", + "json-type": "boolean", + "meta-type": "builtin" + }, + { + "name": "176", + "meta-type": "enum", + "values": [ + "read", + "write" + ] + }, + { + "name": "177", + "meta-type": "enum", + "values": [ + "ignore", + "report", + "stop" + ] + }, + { + "name": "178", + "meta-type": "enum", + "values": [ + "commit", + "stream", + "mirror", + "backup" + ] + }, + { + "name": "179", + "meta-type": "enum", + "values": [ + "pause", + "poweroff" + ] + }, + { + "name": "180", + "meta-type": "enum", + "values": [ + "none", + "setup", + "cancelling", + "cancelled", + "active", + "postcopy-active", + "completed", + "failed", + "colo" + ] + }, + { + "name": "181", + "meta-type": "enum", + "values": [ + "read", + "write", + "flush" + ] + }, + { + "name": "182", + "members": [ + { + "name": "host", + "type": "str" + }, + { + "name": "port", + "type": "str" + }, + { + "name": "family", + "type": "264" + } + ], + "meta-type": "object" + }, + { + "name": "183", + "members": [ + { + "name": "host", + "type": "str" + }, + { + "name": "port", + "type": "str" + }, + { + "name": "family", + "type": "264" + }, + { + "name": "auth", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "184", + "members": [ + { + "name": "host", + "type": "str" + }, + { + "name": "port", + "type": "str" + }, + { + "name": "family", + "type": "264" + }, + { + "name": "connection-id", + "type": "int" + }, + { + "name": "channel-type", + "type": "int" + }, + { + "name": "channel-id", + "type": "int" + }, + { + "name": "tls", + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "185", + "members": [ + { + "name": "host", + "type": "str" + }, + { + "name": "service", + "type": "str" + }, + { + "name": "family", + "type": "264" + }, + { + "name": "websocket", + "type": "bool" + }, + { + "name": "auth", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "186", + "members": [ + { + "name": "host", + "type": "str" + }, + { + "name": "service", + "type": "str" + }, + { + "name": "family", + "type": "264" + }, + { + "name": "websocket", + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "187", + "members": [ + { + "name": "host", + "type": "str" + }, + { + "name": "service", + "type": "str" + }, + { + "name": "family", + "type": "264" + }, + { + "name": "websocket", + "type": "bool" + }, + { + "name": "x509_dname", + "default": null, + "type": "str" + }, + { + "name": "sasl_username", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "188", + "meta-type": "enum", + "values": [ + "reset", + "shutdown", + "poweroff", + "pause", + "debug", + "none", + "inject-nmi" + ] + }, + { + "name": "189", + "meta-type": "enum", + "values": [ + "report", + "ignore", + "enospc", + "stop", + "auto" + ] + }, + { + "name": "190", + "meta-type": "enum", + "values": [ + "archipelago", + "blkdebug", + "blkverify", + "bochs", + "cloop", + "dmg", + "file", + "ftp", + "ftps", + "gluster", + "host_cdrom", + "host_device", + "http", + "https", + "luks", + "nbd", + "nfs", + "null-aio", + "null-co", + "parallels", + "qcow", + "qcow2", + "qed", + "quorum", + "raw", + "replication", + "ssh", + "vdi", + "vhdx", + "vmdk", + "vpc", + "vvfat" + ] + }, + { + "name": "191", + "meta-type": "enum", + "values": [ + "ignore", + "unmap" + ] + }, + { + "name": "192", + "members": [ + { + "name": "direct", + "default": null, + "type": "bool" + }, + { + "name": "no-flush", + "default": null, + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "193", + "meta-type": "enum", + "values": [ + "off", + "on", + "unmap" + ] + }, + { + "name": "194", + "members": [ + { + "name": "volume", + "type": "str" + }, + { + "name": "mport", + "default": null, + "type": "int" + }, + { + "name": "vport", + "default": null, + "type": "int" + }, + { + "name": "segment", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "195", + "members": [ + { + "name": "image", + "type": "272" + }, + { + "name": "config", + "default": null, + "type": "str" + }, + { + "name": "align", + "default": null, + "type": "int" + }, + { + "name": "inject-error", + "default": null, + "type": "[273]" + }, + { + "name": "set-state", + "default": null, + "type": "[274]" + } + ], + "meta-type": "object" + }, + { + "name": "196", + "members": [ + { + "name": "test", + "type": "272" + }, + { + "name": "raw", + "type": "272" + } + ], + "meta-type": "object" + }, + { + "name": "197", + "members": [ + { + "name": "file", + "type": "272" + } + ], + "meta-type": "object" + }, + { + "name": "198", + "members": [ + { + "name": "filename", + "type": "str" + }, + { + "name": "aio", + "default": null, + "type": "275" + } + ], + "meta-type": "object" + }, + { + "name": "199", + "members": [ + { + "name": "filename", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "200", + "members": [ + { + "name": "volume", + "type": "str" + }, + { + "name": "path", + "type": "str" + }, + { + "name": "server", + "type": "[276]" + }, + { + "name": "debug", + "default": null, + "type": "int" + }, + { + "name": "logfile", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "201", + "members": [ + { + "name": "file", + "type": "272" + }, + { + "name": "key-secret", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "202", + "members": [ + { + "name": "server", + "type": "218" + }, + { + "name": "export", + "default": null, + "type": "str" + }, + { + "name": "tls-creds", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "203", + "members": [ + { + "name": "server", + "type": "277" + }, + { + "name": "path", + "type": "str" + }, + { + "name": "user", + "default": null, + "type": "int" + }, + { + "name": "group", + "default": null, + "type": "int" + }, + { + "name": "tcp-syn-count", + "default": null, + "type": "int" + }, + { + "name": "readahead-size", + "default": null, + "type": "int" + }, + { + "name": "page-cache-size", + "default": null, + "type": "int" + }, + { + "name": "debug", + "default": null, + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "204", + "members": [ + { + "name": "size", + "default": null, + "type": "int" + }, + { + "name": "latency-ns", + "default": null, + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "205", + "members": [ + { + "name": "file", + "type": "272" + }, + { + "name": "backing", + "default": null, + "type": "272" + }, + { + "name": "lazy-refcounts", + "default": null, + "type": "bool" + }, + { + "name": "pass-discard-request", + "default": null, + "type": "bool" + }, + { + "name": "pass-discard-snapshot", + "default": null, + "type": "bool" + }, + { + "name": "pass-discard-other", + "default": null, + "type": "bool" + }, + { + "name": "overlap-check", + "default": null, + "type": "278" + }, + { + "name": "cache-size", + "default": null, + "type": "int" + }, + { + "name": "l2-cache-size", + "default": null, + "type": "int" + }, + { + "name": "refcount-cache-size", + "default": null, + "type": "int" + }, + { + "name": "cache-clean-interval", + "default": null, + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "206", + "members": [ + { + "name": "file", + "type": "272" + }, + { + "name": "backing", + "default": null, + "type": "272" + } + ], + "meta-type": "object" + }, + { + "name": "207", + "members": [ + { + "name": "blkverify", + "default": null, + "type": "bool" + }, + { + "name": "children", + "type": "[272]" + }, + { + "name": "vote-threshold", + "type": "int" + }, + { + "name": "rewrite-corrupted", + "default": null, + "type": "bool" + }, + { + "name": "read-pattern", + "default": null, + "type": "279" + } + ], + "meta-type": "object" + }, + { + "name": "208", + "members": [ + { + "name": "file", + "type": "272" + }, + { + "name": "offset", + "default": null, + "type": "int" + }, + { + "name": "size", + "default": null, + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "209", + "members": [ + { + "name": "file", + "type": "272" + }, + { + "name": "mode", + "type": "280" + }, + { + "name": "top-id", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "210", + "members": [ + { + "name": "server", + "type": "281" + }, + { + "name": "path", + "type": "str" + }, + { + "name": "user", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "211", + "members": [ + { + "name": "dir", + "type": "str" + }, + { + "name": "fat-type", + "default": null, + "type": "int" + }, + { + "name": "floppy", + "default": null, + "type": "bool" + }, + { + "name": "label", + "default": null, + "type": "str" + }, + { + "name": "rw", + "default": null, + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "212", + "meta-type": "enum", + "values": [ + "top", + "full", + "none", + "incremental" + ] + }, + { + "name": "213", + "meta-type": "enum", + "values": [ + "retain", + "read-only", + "read-write" + ] + }, + { + "name": "214", + "meta-type": "enum", + "values": [ + "existing", + "absolute-paths" + ] + }, + { + "name": "215", + "tag": "type", + "variants": [ + { + "case": "file", + "type": "283" + }, + { + "case": "serial", + "type": "284" + }, + { + "case": "parallel", + "type": "284" + }, + { + "case": "pipe", + "type": "284" + }, + { + "case": "socket", + "type": "285" + }, + { + "case": "udp", + "type": "286" + }, + { + "case": "pty", + "type": "287" + }, + { + "case": "null", + "type": "287" + }, + { + "case": "mux", + "type": "288" + }, + { + "case": "msmouse", + "type": "287" + }, + { + "case": "braille", + "type": "287" + }, + { + "case": "testdev", + "type": "287" + }, + { + "case": "stdio", + "type": "289" + }, + { + "case": "console", + "type": "287" + }, + { + "case": "spicevmc", + "type": "290" + }, + { + "case": "spiceport", + "type": "291" + }, + { + "case": "vc", + "type": "292" + }, + { + "case": "ringbuf", + "type": "293" + }, + { + "case": "memory", + "type": "293" + } + ], + "members": [ + { + "name": "type", + "type": "282" + } + ], + "meta-type": "object" + }, + { + "name": "216", + "meta-type": "enum", + "values": [ + "elf", + "kdump-zlib", + "kdump-lzo", + "kdump-snappy" + ] + }, + { + "name": "[217]", + "element-type": "217", + "meta-type": "array" + }, + { + "name": "217", + "tag": "type", + "variants": [ + { + "case": "key", + "type": "295" + }, + { + "case": "btn", + "type": "296" + }, + { + "case": "rel", + "type": "297" + }, + { + "case": "abs", + "type": "297" + } + ], + "members": [ + { + "name": "type", + "type": "294" + } + ], + "meta-type": "object" + }, + { + "name": "number", + "json-type": "number", + "meta-type": "builtin" + }, + { + "name": "218", + "tag": "type", + "variants": [ + { + "case": "inet", + "type": "299" + }, + { + "case": "unix", + "type": "300" + }, + { + "case": "vsock", + "type": "301" + }, + { + "case": "fd", + "type": "302" + } + ], + "members": [ + { + "name": "type", + "type": "298" + } + ], + "meta-type": "object" + }, + { + "name": "219", + "meta-type": "enum", + "values": [ + "DIMM", + "CPU" + ] + }, + { + "name": "220", + "meta-type": "enum", + "values": [ + "ok", + "failed", + "nospace" + ] + }, + { + "name": "[221]", + "element-type": "221", + "meta-type": "array" + }, + { + "name": "221", + "members": [ + { + "name": "name", + "default": null, + "type": "str" + }, + { + "name": "count", + "type": "int" + }, + { + "name": "granularity", + "type": "int" + }, + { + "name": "status", + "type": "303" + } + ], + "meta-type": "object" + }, + { + "name": "222", + "members": [ + { + "name": "rd_bytes", + "type": "int" + }, + { + "name": "wr_bytes", + "type": "int" + }, + { + "name": "rd_operations", + "type": "int" + }, + { + "name": "wr_operations", + "type": "int" + }, + { + "name": "flush_operations", + "type": "int" + }, + { + "name": "flush_total_time_ns", + "type": "int" + }, + { + "name": "wr_total_time_ns", + "type": "int" + }, + { + "name": "rd_total_time_ns", + "type": "int" + }, + { + "name": "wr_highest_offset", + "type": "int" + }, + { + "name": "rd_merged", + "type": "int" + }, + { + "name": "wr_merged", + "type": "int" + }, + { + "name": "idle_time_ns", + "default": null, + "type": "int" + }, + { + "name": "failed_rd_operations", + "type": "int" + }, + { + "name": "failed_wr_operations", + "type": "int" + }, + { + "name": "failed_flush_operations", + "type": "int" + }, + { + "name": "invalid_rd_operations", + "type": "int" + }, + { + "name": "invalid_wr_operations", + "type": "int" + }, + { + "name": "invalid_flush_operations", + "type": "int" + }, + { + "name": "account_invalid", + "type": "bool" + }, + { + "name": "account_failed", + "type": "bool" + }, + { + "name": "timed_stats", + "type": "[304]" + } + ], + "meta-type": "object" + }, + { + "name": "[223]", + "element-type": "223", + "meta-type": "array" + }, + { + "name": "223", + "members": [ + { + "name": "name", + "type": "str" + }, + { + "name": "type", + "type": "305" + }, + { + "name": "help", + "default": null, + "type": "str" + }, + { + "name": "default", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "[str]", + "element-type": "str", + "meta-type": "array" + }, + { + "name": "224", + "members": [ + { + "name": "name", + "type": "str" + }, + { + "name": "props", + "default": null, + "type": "any" + } + ], + "meta-type": "object" + }, + { + "name": "225", + "meta-type": "enum", + "values": [ + "incompatible", + "identical", + "superset", + "subset" + ] + }, + { + "name": "226", + "meta-type": "enum", + "values": [ + "static", + "full" + ] + }, + { + "name": "227", + "meta-type": "enum", + "values": [ + "x86", + "sparc", + "ppc", + "mips", + "tricore", + "other" + ] + }, + { + "name": "228", + "members": [ + { + "name": "pc", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "229", + "members": [ + { + "name": "pc", + "type": "int" + }, + { + "name": "npc", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "230", + "members": [ + { + "name": "nip", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "231", + "members": [ + { + "name": "PC", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "232", + "members": [ + { + "name": "PC", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "233", + "members": [ + ], + "meta-type": "object" + }, + { + "name": "234", + "meta-type": "enum", + "values": [ + "none", + "active", + "completed", + "failed" + ] + }, + { + "name": "[216]", + "element-type": "216", + "meta-type": "array" + }, + { + "name": "[235]", + "element-type": "235", + "meta-type": "array" + }, + { + "name": "235", + "members": [ + { + "name": "fd", + "type": "int" + }, + { + "name": "opaque", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "236", + "members": [ + { + "name": "node-id", + "default": null, + "type": "int" + }, + { + "name": "socket-id", + "default": null, + "type": "int" + }, + { + "name": "core-id", + "default": null, + "type": "int" + }, + { + "name": "thread-id", + "default": null, + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "[int]", + "element-type": "int", + "meta-type": "array" + }, + { + "name": "237", + "meta-type": "enum", + "values": [ + "default", + "preferred", + "bind", + "interleave" + ] + }, + { + "name": "238", + "meta-type": "enum", + "values": [ + "dimm" + ] + }, + { + "name": "239", + "members": [ + { + "name": "data", + "type": "306" + } + ], + "meta-type": "object" + }, + { + "name": "240", + "members": [ + { + "name": "transferred", + "type": "int" + }, + { + "name": "remaining", + "type": "int" + }, + { + "name": "total", + "type": "int" + }, + { + "name": "duplicate", + "type": "int" + }, + { + "name": "skipped", + "type": "int" + }, + { + "name": "normal", + "type": "int" + }, + { + "name": "normal-bytes", + "type": "int" + }, + { + "name": "dirty-pages-rate", + "type": "int" + }, + { + "name": "mbps", + "type": "number" + }, + { + "name": "dirty-sync-count", + "type": "int" + }, + { + "name": "postcopy-requests", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "241", + "members": [ + { + "name": "cache-size", + "type": "int" + }, + { + "name": "bytes", + "type": "int" + }, + { + "name": "pages", + "type": "int" + }, + { + "name": "cache-miss", + "type": "int" + }, + { + "name": "cache-miss-rate", + "type": "number" + }, + { + "name": "overflow", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "242", + "meta-type": "enum", + "values": [ + "xbzrle", + "rdma-pin-all", + "auto-converge", + "zero-blocks", + "compress", + "events", + "postcopy-ram", + "x-colo" + ] + }, + { + "name": "243", + "members": [ + { + "name": "filename", + "type": "str" + }, + { + "name": "format", + "type": "str" + }, + { + "name": "dirty-flag", + "default": null, + "type": "bool" + }, + { + "name": "actual-size", + "default": null, + "type": "int" + }, + { + "name": "virtual-size", + "type": "int" + }, + { + "name": "cluster-size", + "default": null, + "type": "int" + }, + { + "name": "encrypted", + "default": null, + "type": "bool" + }, + { + "name": "compressed", + "default": null, + "type": "bool" + }, + { + "name": "backing-filename", + "default": null, + "type": "str" + }, + { + "name": "full-backing-filename", + "default": null, + "type": "str" + }, + { + "name": "backing-filename-format", + "default": null, + "type": "str" + }, + { + "name": "snapshots", + "default": null, + "type": "[54]" + }, + { + "name": "backing-image", + "default": null, + "type": "243" + }, + { + "name": "format-specific", + "default": null, + "type": "307" + } + ], + "meta-type": "object" + }, + { + "name": "244", + "members": [ + { + "name": "writeback", + "type": "bool" + }, + { + "name": "direct", + "type": "bool" + }, + { + "name": "no-flush", + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "[245]", + "element-type": "245", + "meta-type": "array" + }, + { + "name": "245", + "members": [ + { + "name": "bus", + "type": "int" + }, + { + "name": "slot", + "type": "int" + }, + { + "name": "function", + "type": "int" + }, + { + "name": "class_info", + "type": "308" + }, + { + "name": "id", + "type": "309" + }, + { + "name": "irq", + "default": null, + "type": "int" + }, + { + "name": "qdev_id", + "type": "str" + }, + { + "name": "pci_bridge", + "default": null, + "type": "310" + }, + { + "name": "regions", + "type": "[311]" + } + ], + "meta-type": "object" + }, + { + "name": "246", + "meta-type": "enum", + "values": [ + "builtin", + "enum", + "array", + "object", + "alternate", + "command", + "event" + ] + }, + { + "name": "247", + "members": [ + { + "name": "json-type", + "type": "312" + } + ], + "meta-type": "object" + }, + { + "name": "248", + "members": [ + { + "name": "values", + "type": "[str]" + } + ], + "meta-type": "object" + }, + { + "name": "249", + "members": [ + { + "name": "element-type", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "250", + "members": [ + { + "name": "members", + "type": "[313]" + }, + { + "name": "tag", + "default": null, + "type": "str" + }, + { + "name": "variants", + "default": null, + "type": "[314]" + } + ], + "meta-type": "object" + }, + { + "name": "251", + "members": [ + { + "name": "members", + "type": "[315]" + } + ], + "meta-type": "object" + }, + { + "name": "252", + "members": [ + { + "name": "arg-type", + "type": "str" + }, + { + "name": "ret-type", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "253", + "members": [ + { + "name": "arg-type", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "254", + "members": [ + { + "name": "priority", + "type": "int" + }, + { + "name": "tbl-id", + "type": "int" + }, + { + "name": "in-pport", + "default": null, + "type": "int" + }, + { + "name": "tunnel-id", + "default": null, + "type": "int" + }, + { + "name": "vlan-id", + "default": null, + "type": "int" + }, + { + "name": "eth-type", + "default": null, + "type": "int" + }, + { + "name": "eth-src", + "default": null, + "type": "str" + }, + { + "name": "eth-dst", + "default": null, + "type": "str" + }, + { + "name": "ip-proto", + "default": null, + "type": "int" + }, + { + "name": "ip-tos", + "default": null, + "type": "int" + }, + { + "name": "ip-dst", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "255", + "members": [ + { + "name": "in-pport", + "default": null, + "type": "int" + }, + { + "name": "tunnel-id", + "default": null, + "type": "int" + }, + { + "name": "vlan-id", + "default": null, + "type": "int" + }, + { + "name": "eth-src", + "default": null, + "type": "str" + }, + { + "name": "eth-dst", + "default": null, + "type": "str" + }, + { + "name": "ip-proto", + "default": null, + "type": "int" + }, + { + "name": "ip-tos", + "default": null, + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "256", + "members": [ + { + "name": "goto-tbl", + "default": null, + "type": "int" + }, + { + "name": "group-id", + "default": null, + "type": "int" + }, + { + "name": "tunnel-lport", + "default": null, + "type": "int" + }, + { + "name": "vlan-id", + "default": null, + "type": "int" + }, + { + "name": "new-vlan-id", + "default": null, + "type": "int" + }, + { + "name": "out-pport", + "default": null, + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "257", + "meta-type": "enum", + "values": [ + "half", + "full" + ] + }, + { + "name": "258", + "meta-type": "enum", + "values": [ + "off", + "on" + ] + }, + { + "name": "259", + "meta-type": "enum", + "values": [ + "normal", + "none", + "all" + ] + }, + { + "name": "260", + "meta-type": "enum", + "values": [ + "client", + "server", + "unknown" + ] + }, + { + "name": "[184]", + "element-type": "184", + "meta-type": "array" + }, + { + "name": "261", + "meta-type": "enum", + "values": [ + "debug", + "inmigrate", + "internal-error", + "io-error", + "paused", + "postmigrate", + "prelaunch", + "finish-migrate", + "restore-vm", + "running", + "save-vm", + "shutdown", + "suspended", + "watchdog", + "guest-panicked", + "colo" + ] + }, + { + "name": "262", + "tag": "type", + "variants": [ + { + "case": "passthrough", + "type": "317" + } + ], + "members": [ + { + "name": "type", + "type": "316" + } + ], + "meta-type": "object" + }, + { + "name": "263", + "members": [ + { + "name": "major", + "type": "int" + }, + { + "name": "minor", + "type": "int" + }, + { + "name": "micro", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "264", + "meta-type": "enum", + "values": [ + "ipv4", + "ipv6", + "unix", + "vsock", + "unknown" + ] + }, + { + "name": "[187]", + "element-type": "187", + "meta-type": "array" + }, + { + "name": "[186]", + "element-type": "186", + "meta-type": "array" + }, + { + "name": "265", + "meta-type": "enum", + "values": [ + "none", + "vnc", + "ra2", + "ra2ne", + "tight", + "ultra", + "tls", + "vencrypt", + "sasl" + ] + }, + { + "name": "266", + "meta-type": "enum", + "values": [ + "plain", + "tls-none", + "x509-none", + "tls-vnc", + "x509-vnc", + "tls-plain", + "x509-plain", + "tls-sasl", + "x509-sasl" + ] + }, + { + "name": "267", + "meta-type": "enum", + "values": [ + "utf8", + "base64" + ] + }, + { + "name": "[268]", + "element-type": "268", + "meta-type": "array" + }, + { + "name": "268", + "tag": "type", + "variants": [ + { + "case": "number", + "type": "319" + }, + { + "case": "qcode", + "type": "320" + } + ], + "members": [ + { + "name": "type", + "type": "318" + } + ], + "meta-type": "object" + }, + { + "name": "269", + "meta-type": "enum", + "values": [ + "unavailable", + "disabled", + "enabled" + ] + }, + { + "name": "[270]", + "element-type": "270", + "meta-type": "array" + }, + { + "name": "270", + "tag": "type", + "variants": [ + { + "case": "abort", + "type": "322" + }, + { + "case": "block-dirty-bitmap-add", + "type": "323" + }, + { + "case": "block-dirty-bitmap-clear", + "type": "324" + }, + { + "case": "blockdev-backup", + "type": "325" + }, + { + "case": "blockdev-snapshot", + "type": "326" + }, + { + "case": "blockdev-snapshot-internal-sync", + "type": "327" + }, + { + "case": "blockdev-snapshot-sync", + "type": "328" + }, + { + "case": "drive-backup", + "type": "329" + } + ], + "members": [ + { + "name": "type", + "type": "321" + } + ], + "meta-type": "object" + }, + { + "name": "271", + "members": [ + { + "name": "completion-mode", + "default": null, + "type": "330" + } + ], + "meta-type": "object" + }, + { + "name": "272", + "members": [ + { + "type": "46" + }, + { + "type": "str" + } + ], + "meta-type": "alternate" + }, + { + "name": "[273]", + "element-type": "273", + "meta-type": "array" + }, + { + "name": "273", + "members": [ + { + "name": "event", + "type": "331" + }, + { + "name": "state", + "default": null, + "type": "int" + }, + { + "name": "errno", + "default": null, + "type": "int" + }, + { + "name": "sector", + "default": null, + "type": "int" + }, + { + "name": "once", + "default": null, + "type": "bool" + }, + { + "name": "immediately", + "default": null, + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "[274]", + "element-type": "274", + "meta-type": "array" + }, + { + "name": "274", + "members": [ + { + "name": "event", + "type": "331" + }, + { + "name": "state", + "default": null, + "type": "int" + }, + { + "name": "new_state", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "275", + "meta-type": "enum", + "values": [ + "threads", + "native" + ] + }, + { + "name": "[276]", + "element-type": "276", + "meta-type": "array" + }, + { + "name": "276", + "tag": "type", + "variants": [ + { + "case": "unix", + "type": "333" + }, + { + "case": "tcp", + "type": "281" + } + ], + "members": [ + { + "name": "type", + "type": "332" + } + ], + "meta-type": "object" + }, + { + "name": "277", + "members": [ + { + "name": "type", + "type": "334" + }, + { + "name": "host", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "278", + "members": [ + { + "type": "335" + }, + { + "type": "336" + } + ], + "meta-type": "alternate" + }, + { + "name": "[272]", + "element-type": "272", + "meta-type": "array" + }, + { + "name": "279", + "meta-type": "enum", + "values": [ + "quorum", + "fifo" + ] + }, + { + "name": "280", + "meta-type": "enum", + "values": [ + "primary", + "secondary" + ] + }, + { + "name": "281", + "members": [ + { + "name": "host", + "type": "str" + }, + { + "name": "port", + "type": "str" + }, + { + "name": "numeric", + "default": null, + "type": "bool" + }, + { + "name": "to", + "default": null, + "type": "int" + }, + { + "name": "ipv4", + "default": null, + "type": "bool" + }, + { + "name": "ipv6", + "default": null, + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "282", + "meta-type": "enum", + "values": [ + "file", + "serial", + "parallel", + "pipe", + "socket", + "udp", + "pty", + "null", + "mux", + "msmouse", + "braille", + "testdev", + "stdio", + "console", + "spicevmc", + "spiceport", + "vc", + "ringbuf", + "memory" + ] + }, + { + "name": "283", + "members": [ + { + "name": "data", + "type": "337" + } + ], + "meta-type": "object" + }, + { + "name": "284", + "members": [ + { + "name": "data", + "type": "338" + } + ], + "meta-type": "object" + }, + { + "name": "285", + "members": [ + { + "name": "data", + "type": "339" + } + ], + "meta-type": "object" + }, + { + "name": "286", + "members": [ + { + "name": "data", + "type": "340" + } + ], + "meta-type": "object" + }, + { + "name": "287", + "members": [ + { + "name": "data", + "type": "341" + } + ], + "meta-type": "object" + }, + { + "name": "288", + "members": [ + { + "name": "data", + "type": "342" + } + ], + "meta-type": "object" + }, + { + "name": "289", + "members": [ + { + "name": "data", + "type": "343" + } + ], + "meta-type": "object" + }, + { + "name": "290", + "members": [ + { + "name": "data", + "type": "344" + } + ], + "meta-type": "object" + }, + { + "name": "291", + "members": [ + { + "name": "data", + "type": "345" + } + ], + "meta-type": "object" + }, + { + "name": "292", + "members": [ + { + "name": "data", + "type": "346" + } + ], + "meta-type": "object" + }, + { + "name": "293", + "members": [ + { + "name": "data", + "type": "347" + } + ], + "meta-type": "object" + }, + { + "name": "294", + "meta-type": "enum", + "values": [ + "key", + "btn", + "rel", + "abs" + ] + }, + { + "name": "295", + "members": [ + { + "name": "data", + "type": "348" + } + ], + "meta-type": "object" + }, + { + "name": "296", + "members": [ + { + "name": "data", + "type": "349" + } + ], + "meta-type": "object" + }, + { + "name": "297", + "members": [ + { + "name": "data", + "type": "350" + } + ], + "meta-type": "object" + }, + { + "name": "298", + "meta-type": "enum", + "values": [ + "inet", + "unix", + "vsock", + "fd" + ] + }, + { + "name": "299", + "members": [ + { + "name": "data", + "type": "281" + } + ], + "meta-type": "object" + }, + { + "name": "300", + "members": [ + { + "name": "data", + "type": "333" + } + ], + "meta-type": "object" + }, + { + "name": "301", + "members": [ + { + "name": "data", + "type": "351" + } + ], + "meta-type": "object" + }, + { + "name": "302", + "members": [ + { + "name": "data", + "type": "352" + } + ], + "meta-type": "object" + }, + { + "name": "303", + "meta-type": "enum", + "values": [ + "active", + "disabled", + "frozen" + ] + }, + { + "name": "[304]", + "element-type": "304", + "meta-type": "array" + }, + { + "name": "304", + "members": [ + { + "name": "interval_length", + "type": "int" + }, + { + "name": "min_rd_latency_ns", + "type": "int" + }, + { + "name": "max_rd_latency_ns", + "type": "int" + }, + { + "name": "avg_rd_latency_ns", + "type": "int" + }, + { + "name": "min_wr_latency_ns", + "type": "int" + }, + { + "name": "max_wr_latency_ns", + "type": "int" + }, + { + "name": "avg_wr_latency_ns", + "type": "int" + }, + { + "name": "min_flush_latency_ns", + "type": "int" + }, + { + "name": "max_flush_latency_ns", + "type": "int" + }, + { + "name": "avg_flush_latency_ns", + "type": "int" + }, + { + "name": "avg_rd_queue_depth", + "type": "number" + }, + { + "name": "avg_wr_queue_depth", + "type": "number" + } + ], + "meta-type": "object" + }, + { + "name": "305", + "meta-type": "enum", + "values": [ + "string", + "boolean", + "number", + "size" + ] + }, + { + "name": "306", + "members": [ + { + "name": "id", + "default": null, + "type": "str" + }, + { + "name": "addr", + "type": "int" + }, + { + "name": "size", + "type": "int" + }, + { + "name": "slot", + "type": "int" + }, + { + "name": "node", + "type": "int" + }, + { + "name": "memdev", + "type": "str" + }, + { + "name": "hotplugged", + "type": "bool" + }, + { + "name": "hotpluggable", + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "[54]", + "element-type": "54", + "meta-type": "array" + }, + { + "name": "307", + "tag": "type", + "variants": [ + { + "case": "qcow2", + "type": "354" + }, + { + "case": "vmdk", + "type": "355" + }, + { + "case": "luks", + "type": "356" + } + ], + "members": [ + { + "name": "type", + "type": "353" + } + ], + "meta-type": "object" + }, + { + "name": "308", + "members": [ + { + "name": "desc", + "default": null, + "type": "str" + }, + { + "name": "class", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "309", + "members": [ + { + "name": "device", + "type": "int" + }, + { + "name": "vendor", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "310", + "members": [ + { + "name": "bus", + "type": "357" + }, + { + "name": "devices", + "default": null, + "type": "[245]" + } + ], + "meta-type": "object" + }, + { + "name": "[311]", + "element-type": "311", + "meta-type": "array" + }, + { + "name": "311", + "members": [ + { + "name": "bar", + "type": "int" + }, + { + "name": "type", + "type": "str" + }, + { + "name": "address", + "type": "int" + }, + { + "name": "size", + "type": "int" + }, + { + "name": "prefetch", + "default": null, + "type": "bool" + }, + { + "name": "mem_type_64", + "default": null, + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "312", + "meta-type": "enum", + "values": [ + "string", + "number", + "int", + "boolean", + "null", + "object", + "array", + "value" + ] + }, + { + "name": "[313]", + "element-type": "313", + "meta-type": "array" + }, + { + "name": "313", + "members": [ + { + "name": "name", + "type": "str" + }, + { + "name": "type", + "type": "str" + }, + { + "name": "default", + "default": null, + "type": "any" + } + ], + "meta-type": "object" + }, + { + "name": "[314]", + "element-type": "314", + "meta-type": "array" + }, + { + "name": "314", + "members": [ + { + "name": "case", + "type": "str" + }, + { + "name": "type", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "[315]", + "element-type": "315", + "meta-type": "array" + }, + { + "name": "315", + "members": [ + { + "name": "type", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "316", + "meta-type": "enum", + "values": [ + "passthrough" + ] + }, + { + "name": "317", + "members": [ + { + "name": "data", + "type": "358" + } + ], + "meta-type": "object" + }, + { + "name": "318", + "meta-type": "enum", + "values": [ + "number", + "qcode" + ] + }, + { + "name": "319", + "members": [ + { + "name": "data", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "320", + "members": [ + { + "name": "data", + "type": "359" + } + ], + "meta-type": "object" + }, + { + "name": "321", + "meta-type": "enum", + "values": [ + "abort", + "block-dirty-bitmap-add", + "block-dirty-bitmap-clear", + "blockdev-backup", + "blockdev-snapshot", + "blockdev-snapshot-internal-sync", + "blockdev-snapshot-sync", + "drive-backup" + ] + }, + { + "name": "322", + "members": [ + { + "name": "data", + "type": "360" + } + ], + "meta-type": "object" + }, + { + "name": "323", + "members": [ + { + "name": "data", + "type": "34" + } + ], + "meta-type": "object" + }, + { + "name": "324", + "members": [ + { + "name": "data", + "type": "35" + } + ], + "meta-type": "object" + }, + { + "name": "325", + "members": [ + { + "name": "data", + "type": "47" + } + ], + "meta-type": "object" + }, + { + "name": "326", + "members": [ + { + "name": "data", + "type": "52" + } + ], + "meta-type": "object" + }, + { + "name": "327", + "members": [ + { + "name": "data", + "type": "55" + } + ], + "meta-type": "object" + }, + { + "name": "328", + "members": [ + { + "name": "data", + "type": "56" + } + ], + "meta-type": "object" + }, + { + "name": "329", + "members": [ + { + "name": "data", + "type": "71" + } + ], + "meta-type": "object" + }, + { + "name": "330", + "meta-type": "enum", + "values": [ + "individual", + "grouped" + ] + }, + { + "name": "331", + "meta-type": "enum", + "values": [ + "l1_update", + "l1_grow_alloc_table", + "l1_grow_write_table", + "l1_grow_activate_table", + "l2_load", + "l2_update", + "l2_update_compressed", + "l2_alloc_cow_read", + "l2_alloc_write", + "read_aio", + "read_backing_aio", + "read_compressed", + "write_aio", + "write_compressed", + "vmstate_load", + "vmstate_save", + "cow_read", + "cow_write", + "reftable_load", + "reftable_grow", + "reftable_update", + "refblock_load", + "refblock_update", + "refblock_update_part", + "refblock_alloc", + "refblock_alloc_hookup", + "refblock_alloc_write", + "refblock_alloc_write_blocks", + "refblock_alloc_write_table", + "refblock_alloc_switch_table", + "cluster_alloc", + "cluster_alloc_bytes", + "cluster_free", + "flush_to_os", + "flush_to_disk", + "pwritev_rmw_head", + "pwritev_rmw_after_head", + "pwritev_rmw_tail", + "pwritev_rmw_after_tail", + "pwritev", + "pwritev_zero", + "pwritev_done", + "empty_image_prepare" + ] + }, + { + "name": "332", + "meta-type": "enum", + "values": [ + "unix", + "tcp" + ] + }, + { + "name": "333", + "members": [ + { + "name": "path", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "334", + "meta-type": "enum", + "values": [ + "inet" + ] + }, + { + "name": "335", + "members": [ + { + "name": "template", + "default": null, + "type": "336" + }, + { + "name": "main-header", + "default": null, + "type": "bool" + }, + { + "name": "active-l1", + "default": null, + "type": "bool" + }, + { + "name": "active-l2", + "default": null, + "type": "bool" + }, + { + "name": "refcount-table", + "default": null, + "type": "bool" + }, + { + "name": "refcount-block", + "default": null, + "type": "bool" + }, + { + "name": "snapshot-table", + "default": null, + "type": "bool" + }, + { + "name": "inactive-l1", + "default": null, + "type": "bool" + }, + { + "name": "inactive-l2", + "default": null, + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "336", + "meta-type": "enum", + "values": [ + "none", + "constant", + "cached", + "all" + ] + }, + { + "name": "337", + "members": [ + { + "name": "logfile", + "default": null, + "type": "str" + }, + { + "name": "logappend", + "default": null, + "type": "bool" + }, + { + "name": "in", + "default": null, + "type": "str" + }, + { + "name": "out", + "type": "str" + }, + { + "name": "append", + "default": null, + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "338", + "members": [ + { + "name": "logfile", + "default": null, + "type": "str" + }, + { + "name": "logappend", + "default": null, + "type": "bool" + }, + { + "name": "device", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "339", + "members": [ + { + "name": "logfile", + "default": null, + "type": "str" + }, + { + "name": "logappend", + "default": null, + "type": "bool" + }, + { + "name": "addr", + "type": "218" + }, + { + "name": "tls-creds", + "default": null, + "type": "str" + }, + { + "name": "server", + "default": null, + "type": "bool" + }, + { + "name": "wait", + "default": null, + "type": "bool" + }, + { + "name": "nodelay", + "default": null, + "type": "bool" + }, + { + "name": "telnet", + "default": null, + "type": "bool" + }, + { + "name": "reconnect", + "default": null, + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "340", + "members": [ + { + "name": "logfile", + "default": null, + "type": "str" + }, + { + "name": "logappend", + "default": null, + "type": "bool" + }, + { + "name": "remote", + "type": "218" + }, + { + "name": "local", + "default": null, + "type": "218" + } + ], + "meta-type": "object" + }, + { + "name": "341", + "members": [ + { + "name": "logfile", + "default": null, + "type": "str" + }, + { + "name": "logappend", + "default": null, + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "342", + "members": [ + { + "name": "logfile", + "default": null, + "type": "str" + }, + { + "name": "logappend", + "default": null, + "type": "bool" + }, + { + "name": "chardev", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "343", + "members": [ + { + "name": "logfile", + "default": null, + "type": "str" + }, + { + "name": "logappend", + "default": null, + "type": "bool" + }, + { + "name": "signal", + "default": null, + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "344", + "members": [ + { + "name": "logfile", + "default": null, + "type": "str" + }, + { + "name": "logappend", + "default": null, + "type": "bool" + }, + { + "name": "type", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "345", + "members": [ + { + "name": "logfile", + "default": null, + "type": "str" + }, + { + "name": "logappend", + "default": null, + "type": "bool" + }, + { + "name": "fqdn", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "346", + "members": [ + { + "name": "logfile", + "default": null, + "type": "str" + }, + { + "name": "logappend", + "default": null, + "type": "bool" + }, + { + "name": "width", + "default": null, + "type": "int" + }, + { + "name": "height", + "default": null, + "type": "int" + }, + { + "name": "cols", + "default": null, + "type": "int" + }, + { + "name": "rows", + "default": null, + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "347", + "members": [ + { + "name": "logfile", + "default": null, + "type": "str" + }, + { + "name": "logappend", + "default": null, + "type": "bool" + }, + { + "name": "size", + "default": null, + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "348", + "members": [ + { + "name": "key", + "type": "268" + }, + { + "name": "down", + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "349", + "members": [ + { + "name": "button", + "type": "361" + }, + { + "name": "down", + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "350", + "members": [ + { + "name": "axis", + "type": "362" + }, + { + "name": "value", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "351", + "members": [ + { + "name": "cid", + "type": "str" + }, + { + "name": "port", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "352", + "members": [ + { + "name": "str", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "353", + "meta-type": "enum", + "values": [ + "qcow2", + "vmdk", + "luks" + ] + }, + { + "name": "354", + "members": [ + { + "name": "data", + "type": "363" + } + ], + "meta-type": "object" + }, + { + "name": "355", + "members": [ + { + "name": "data", + "type": "364" + } + ], + "meta-type": "object" + }, + { + "name": "356", + "members": [ + { + "name": "data", + "type": "365" + } + ], + "meta-type": "object" + }, + { + "name": "357", + "members": [ + { + "name": "number", + "type": "int" + }, + { + "name": "secondary", + "type": "int" + }, + { + "name": "subordinate", + "type": "int" + }, + { + "name": "io_range", + "type": "366" + }, + { + "name": "memory_range", + "type": "366" + }, + { + "name": "prefetchable_range", + "type": "366" + } + ], + "meta-type": "object" + }, + { + "name": "358", + "members": [ + { + "name": "path", + "default": null, + "type": "str" + }, + { + "name": "cancel-path", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "359", + "meta-type": "enum", + "values": [ + "unmapped", + "shift", + "shift_r", + "alt", + "alt_r", + "altgr", + "altgr_r", + "ctrl", + "ctrl_r", + "menu", + "esc", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "0", + "minus", + "equal", + "backspace", + "tab", + "q", + "w", + "e", + "r", + "t", + "y", + "u", + "i", + "o", + "p", + "bracket_left", + "bracket_right", + "ret", + "a", + "s", + "d", + "f", + "g", + "h", + "j", + "k", + "l", + "semicolon", + "apostrophe", + "grave_accent", + "backslash", + "z", + "x", + "c", + "v", + "b", + "n", + "m", + "comma", + "dot", + "slash", + "asterisk", + "spc", + "caps_lock", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9", + "f10", + "num_lock", + "scroll_lock", + "kp_divide", + "kp_multiply", + "kp_subtract", + "kp_add", + "kp_enter", + "kp_decimal", + "sysrq", + "kp_0", + "kp_1", + "kp_2", + "kp_3", + "kp_4", + "kp_5", + "kp_6", + "kp_7", + "kp_8", + "kp_9", + "less", + "f11", + "f12", + "print", + "home", + "pgup", + "pgdn", + "end", + "left", + "up", + "down", + "right", + "insert", + "delete", + "stop", + "again", + "props", + "undo", + "front", + "copy", + "open", + "paste", + "find", + "cut", + "lf", + "help", + "meta_l", + "meta_r", + "compose", + "pause", + "ro", + "hiragana", + "henkan", + "yen", + "kp_comma", + "kp_equals", + "power" + ] + }, + { + "name": "360", + "members": [ + ], + "meta-type": "object" + }, + { + "name": "361", + "meta-type": "enum", + "values": [ + "left", + "middle", + "right", + "wheel-up", + "wheel-down" + ] + }, + { + "name": "362", + "meta-type": "enum", + "values": [ + "x", + "y" + ] + }, + { + "name": "363", + "members": [ + { + "name": "compat", + "type": "str" + }, + { + "name": "lazy-refcounts", + "default": null, + "type": "bool" + }, + { + "name": "corrupt", + "default": null, + "type": "bool" + }, + { + "name": "refcount-bits", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "364", + "members": [ + { + "name": "create-type", + "type": "str" + }, + { + "name": "cid", + "type": "int" + }, + { + "name": "parent-cid", + "type": "int" + }, + { + "name": "extents", + "type": "[243]" + } + ], + "meta-type": "object" + }, + { + "name": "365", + "members": [ + { + "name": "cipher-alg", + "type": "367" + }, + { + "name": "cipher-mode", + "type": "368" + }, + { + "name": "ivgen-alg", + "type": "369" + }, + { + "name": "ivgen-hash-alg", + "default": null, + "type": "370" + }, + { + "name": "hash-alg", + "type": "370" + }, + { + "name": "payload-offset", + "type": "int" + }, + { + "name": "master-key-iters", + "type": "int" + }, + { + "name": "uuid", + "type": "str" + }, + { + "name": "slots", + "type": "[371]" + } + ], + "meta-type": "object" + }, + { + "name": "366", + "members": [ + { + "name": "base", + "type": "int" + }, + { + "name": "limit", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "[243]", + "element-type": "243", + "meta-type": "array" + }, + { + "name": "367", + "meta-type": "enum", + "values": [ + "aes-128", + "aes-192", + "aes-256", + "des-rfb", + "3des", + "cast5-128", + "serpent-128", + "serpent-192", + "serpent-256", + "twofish-128", + "twofish-192", + "twofish-256" + ] + }, + { + "name": "368", + "meta-type": "enum", + "values": [ + "ecb", + "cbc", + "xts", + "ctr" + ] + }, + { + "name": "369", + "meta-type": "enum", + "values": [ + "plain", + "plain64", + "essiv" + ] + }, + { + "name": "370", + "meta-type": "enum", + "values": [ + "md5", + "sha1", + "sha224", + "sha256", + "sha384", + "sha512", + "ripemd160" + ] + }, + { + "name": "[371]", + "element-type": "371", + "meta-type": "array" + }, + { + "name": "371", + "members": [ + { + "name": "active", + "type": "bool" + }, + { + "name": "iters", + "default": null, + "type": "int" + }, + { + "name": "stripes", + "default": null, + "type": "int" + }, + { + "name": "key-offset", + "type": "int" + } + ], + "meta-type": "object" + } + ], + "id": "libvirt-47" +} + +{ + "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": false, + "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-48" +} + +{ + "return": { + }, + "id": "libvirt-1" +} + +{ + "return": [ + { + "name": "max", + "typename": "max-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": false + }, + { + "name": "host", + "typename": "host-x86_64-cpu", + "unavailable-features": [ + "kvm" + ], + "static": false, + "migration-safe": false + }, + { + "name": "base", + "typename": "base-x86_64-cpu", + "unavailable-features": [ + ], + "static": true, + "migration-safe": true + }, + { + "name": "qemu64", + "typename": "qemu64-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "qemu32", + "typename": "qemu32-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "phenom", + "typename": "phenom-x86_64-cpu", + "unavailable-features": [ + "fxsr-opt", + "npt" + ], + "static": false, + "migration-safe": true + }, + { + "name": "pentium3", + "typename": "pentium3-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "pentium2", + "typename": "pentium2-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "pentium", + "typename": "pentium-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "n270", + "typename": "n270-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "kvm64", + "typename": "kvm64-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "kvm32", + "typename": "kvm32-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "coreduo", + "typename": "coreduo-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "core2duo", + "typename": "core2duo-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "athlon", + "typename": "athlon-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "Westmere", + "typename": "Westmere-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "Skylake-Client", + "typename": "Skylake-Client-x86_64-cpu", + "unavailable-features": [ + "fma", + "pcid", + "x2apic", + "tsc-deadline", + "avx", + "f16c", + "rdrand", + "hle", + "avx2", + "invpcid", + "rtm", + "rdseed", + "3dnowprefetch", + "xsavec" + ], + "static": false, + "migration-safe": true + }, + { + "name": "SandyBridge", + "typename": "SandyBridge-x86_64-cpu", + "unavailable-features": [ + "x2apic", + "tsc-deadline", + "avx" + ], + "static": false, + "migration-safe": true + }, + { + "name": "Penryn", + "typename": "Penryn-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "Opteron_G5", + "typename": "Opteron_G5-x86_64-cpu", + "unavailable-features": [ + "fma", + "avx", + "f16c", + "misalignsse", + "3dnowprefetch", + "xop", + "fma4", + "tbm" + ], + "static": false, + "migration-safe": true + }, + { + "name": "Opteron_G4", + "typename": "Opteron_G4-x86_64-cpu", + "unavailable-features": [ + "avx", + "misalignsse", + "3dnowprefetch", + "xop", + "fma4" + ], + "static": false, + "migration-safe": true + }, + { + "name": "Opteron_G3", + "typename": "Opteron_G3-x86_64-cpu", + "unavailable-features": [ + "misalignsse" + ], + "static": false, + "migration-safe": true + }, + { + "name": "Opteron_G2", + "typename": "Opteron_G2-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "Opteron_G1", + "typename": "Opteron_G1-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "Nehalem", + "typename": "Nehalem-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "IvyBridge", + "typename": "IvyBridge-x86_64-cpu", + "unavailable-features": [ + "x2apic", + "tsc-deadline", + "avx", + "f16c", + "rdrand" + ], + "static": false, + "migration-safe": true + }, + { + "name": "Haswell", + "typename": "Haswell-x86_64-cpu", + "unavailable-features": [ + "fma", + "pcid", + "x2apic", + "tsc-deadline", + "avx", + "f16c", + "rdrand", + "hle", + "avx2", + "invpcid", + "rtm" + ], + "static": false, + "migration-safe": true + }, + { + "name": "Haswell-noTSX", + "typename": "Haswell-noTSX-x86_64-cpu", + "unavailable-features": [ + "fma", + "pcid", + "x2apic", + "tsc-deadline", + "avx", + "f16c", + "rdrand", + "avx2", + "invpcid" + ], + "static": false, + "migration-safe": true + }, + { + "name": "Conroe", + "typename": "Conroe-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + }, + { + "name": "Broadwell", + "typename": "Broadwell-x86_64-cpu", + "unavailable-features": [ + "fma", + "pcid", + "x2apic", + "tsc-deadline", + "avx", + "f16c", + "rdrand", + "hle", + "avx2", + "invpcid", + "rtm", + "rdseed", + "3dnowprefetch" + ], + "static": false, + "migration-safe": true + }, + { + "name": "Broadwell-noTSX", + "typename": "Broadwell-noTSX-x86_64-cpu", + "unavailable-features": [ + "fma", + "pcid", + "x2apic", + "tsc-deadline", + "avx", + "f16c", + "rdrand", + "avx2", + "invpcid", + "rdseed", + "3dnowprefetch" + ], + "static": false, + "migration-safe": true + }, + { + "name": "486", + "typename": "486-x86_64-cpu", + "unavailable-features": [ + ], + "static": false, + "migration-safe": true + } + ], + "id": "libvirt-2" +} diff --git a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml new file mode 100644 index 000000000..ab7906175 --- /dev/null +++ b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml @@ -0,0 +1,468 @@ +<qemuCaps> + <qemuctime>0</qemuctime> + <selfctime>0</selfctime> + <selfvers>0</selfvers> + <usedQMP/> + <flag name='kvm'/> + <flag name='mem-path'/> + <flag name='drive-serial'/> + <flag name='chardev'/> + <flag name='monitor-json'/> + <flag name='sdl'/> + <flag name='netdev'/> + <flag name='rtc'/> + <flag name='vhost-net'/> + <flag name='no-hpet'/> + <flag name='no-kvm-pit'/> + <flag name='pci-configfd'/> + <flag name='nodefconfig'/> + <flag name='boot-menu'/> + <flag name='fsdev'/> + <flag name='name-process'/> + <flag name='smbios-type'/> + <flag name='spice'/> + <flag name='vga-none'/> + <flag name='boot-index'/> + <flag name='hda-duplex'/> + <flag name='drive-aio'/> + <flag name='pci-multibus'/> + <flag name='pci-bootindex'/> + <flag name='chardev-spicevmc'/> + <flag name='virtio-tx-alg'/> + <flag name='pci-multifunction'/> + <flag name='virtio-blk-pci.ioeventfd'/> + <flag name='sga'/> + <flag name='virtio-blk-pci.event_idx'/> + <flag name='virtio-net-pci.event_idx'/> + <flag name='cache-directsync'/> + <flag name='piix3-usb-uhci'/> + <flag name='piix4-usb-uhci'/> + <flag name='usb-ehci'/> + <flag name='ich9-usb-ehci1'/> + <flag name='vt82c686b-usb-uhci'/> + <flag name='pci-ohci'/> + <flag name='usb-redir'/> + <flag name='usb-hub'/> + <flag name='no-shutdown'/> + <flag name='cache-unsafe'/> + <flag name='ich9-ahci'/> + <flag name='no-acpi'/> + <flag name='fsdev-readonly'/> + <flag name='virtio-blk-pci.scsi'/> + <flag name='drive-copy-on-read'/> + <flag name='fsdev-writeout'/> + <flag name='drive-iotune'/> + <flag name='system_wakeup'/> + <flag name='scsi-disk.channel'/> + <flag name='scsi-block'/> + <flag name='transaction'/> + <flag name='block-job-async'/> + <flag name='scsi-cd'/> + <flag name='ide-cd'/> + <flag name='no-user-config'/> + <flag name='hda-micro'/> + <flag name='dump-guest-memory'/> + <flag name='nec-usb-xhci'/> + <flag name='balloon-event'/> + <flag name='bridge'/> + <flag name='lsi'/> + <flag name='virtio-scsi-pci'/> + <flag name='blockio'/> + <flag name='disable-s3'/> + <flag name='disable-s4'/> + <flag name='usb-redir.filter'/> + <flag name='ide-drive.wwn'/> + <flag name='scsi-disk.wwn'/> + <flag name='seccomp-sandbox'/> + <flag name='reboot-timeout'/> + <flag name='dump-guest-core'/> + <flag name='seamless-migration'/> + <flag name='block-commit'/> + <flag name='vnc'/> + <flag name='drive-mirror'/> + <flag name='usb-redir.bootindex'/> + <flag name='usb-host.bootindex'/> + <flag name='blockdev-snapshot-sync'/> + <flag name='qxl'/> + <flag name='VGA'/> + <flag name='cirrus-vga'/> + <flag name='vmware-svga'/> + <flag name='device-video-primary'/> + <flag name='usb-serial'/> + <flag name='usb-net'/> + <flag name='add-fd'/> + <flag name='nbd-server'/> + <flag name='virtio-rng'/> + <flag name='rng-random'/> + <flag name='rng-egd'/> + <flag name='dtb'/> + <flag name='megasas'/> + <flag name='ipv6-migration'/> + <flag name='machine-opt'/> + <flag name='machine-usb-opt'/> + <flag name='tpm-passthrough'/> + <flag name='tpm-tis'/> + <flag name='pci-bridge'/> + <flag name='vfio-pci'/> + <flag name='vfio-pci.bootindex'/> + <flag name='scsi-generic'/> + <flag name='scsi-generic.bootindex'/> + <flag name='mem-merge'/> + <flag name='vnc-websocket'/> + <flag name='drive-discard'/> + <flag name='mlock'/> + <flag name='vnc-share-policy'/> + <flag name='device-del-event'/> + <flag name='dmi-to-pci-bridge'/> + <flag name='i440fx-pci-hole64-size'/> + <flag name='q35-pci-hole64-size'/> + <flag name='usb-storage'/> + <flag name='usb-storage.removable'/> + <flag name='virtio-mmio'/> + <flag name='ich9-intel-hda'/> + <flag name='kvm-pit-lost-tick-policy'/> + <flag name='boot-strict'/> + <flag name='pvpanic'/> + <flag name='spice-file-xfer-disable'/> + <flag name='spiceport'/> + <flag name='usb-kbd'/> + <flag name='host-pci-multidomain'/> + <flag name='msg-timestamp'/> + <flag name='active-commit'/> + <flag name='change-backing-file'/> + <flag name='memory-backend-ram'/> + <flag name='numa'/> + <flag name='memory-backend-file'/> + <flag name='usb-audio'/> + <flag name='rtc-reset-reinjection'/> + <flag name='splash-timeout'/> + <flag name='iothread'/> + <flag name='migrate-rdma'/> + <flag name='ivshmem'/> + <flag name='drive-iotune-max'/> + <flag name='VGA.vgamem_mb'/> + <flag name='vmware-svga.vgamem_mb'/> + <flag name='qxl.vgamem_mb'/> + <flag name='pc-dimm'/> + <flag name='machine-vmport-opt'/> + <flag name='aes-key-wrap'/> + <flag name='dea-key-wrap'/> + <flag name='pci-serial'/> + <flag name='vhost-user-multiqueue'/> + <flag name='migration-event'/> + <flag name='ioh3420'/> + <flag name='x3130-upstream'/> + <flag name='xio3130-downstream'/> + <flag name='rtl8139'/> + <flag name='e1000'/> + <flag name='virtio-net'/> + <flag name='gic-version'/> + <flag name='incoming-defer'/> + <flag name='virtio-gpu'/> + <flag name='virtio-gpu.virgl'/> + <flag name='virtio-keyboard'/> + <flag name='virtio-mouse'/> + <flag name='virtio-tablet'/> + <flag name='virtio-input-host'/> + <flag name='chardev-file-append'/> + <flag name='ich9-disable-s3'/> + <flag name='ich9-disable-s4'/> + <flag name='vserport-change-event'/> + <flag name='virtio-balloon-pci.deflate-on-oom'/> + <flag name='mptsas1068'/> + <flag name='spice-gl'/> + <flag name='qxl.vram64_size_mb'/> + <flag name='chardev-logfile'/> + <flag name='debug-threads'/> + <flag name='secret'/> + <flag name='pxb'/> + <flag name='pxb-pcie'/> + <flag name='device-tray-moved-event'/> + <flag name='nec-usb-xhci-ports'/> + <flag name='virtio-scsi-pci.iothread'/> + <flag name='name-guest'/> + <flag name='qxl.max_outputs'/> + <flag name='spice-unix'/> + <flag name='drive-detect-zeroes'/> + <flag name='tls-creds-x509'/> + <flag name='display'/> + <flag name='intel-iommu'/> + <flag name='smm'/> + <flag name='virtio-pci-disable-legacy'/> + <flag name='query-hotpluggable-cpus'/> + <flag name='virtio-net.rx_queue_size'/> + <flag name='virtio-vga'/> + <flag name='drive-iotune-max-length'/> + <flag name='ivshmem-plain'/> + <flag name='ivshmem-doorbell'/> + <flag name='query-qmp-schema'/> + <flag name='gluster.debug_level'/> + <flag name='vhost-scsi'/> + <flag name='drive-iotune-group'/> + <flag name='query-cpu-model-expansion'/> + <flag name='virtio-net.host_mtu'/> + <version>2008050</version> + <kvmVersion>0</kvmVersion> + <package> (v2.8.0-877-g38e4b757b4)</package> + <arch>x86_64</arch> + <hostCPU model='base'> + <feature name='cmov' supported='yes'/> + <feature name='ia64' supported='no'/> + <feature name='aes' supported='yes'/> + <feature name='mmx' supported='yes'/> + <feature name='rdpid' supported='no'/> + <feature name='arat' supported='yes'/> + <feature name='pause-filter' supported='no'/> + <feature name='xsavec' supported='yes'/> + <feature name='osxsave' supported='no'/> + <feature name='kvm-asyncpf' supported='yes'/> + <feature name='perfctr-core' supported='no'/> + <feature name='mpx' supported='yes'/> + <feature name='pbe' supported='no'/> + <feature name='avx512cd' supported='no'/> + <feature name='decodeassists' supported='no'/> + <feature name='sse4.1' supported='yes'/> + <feature name='avx512f' supported='no'/> + <feature name='msr' supported='yes'/> + <feature name='mce' supported='yes'/> + <feature name='mca' supported='yes'/> + <feature name='xcrypt' supported='no'/> + <feature name='xgetbv1' supported='yes'/> + <feature name='cid' supported='no'/> + <feature name='ds' supported='no'/> + <feature name='fxsr' supported='yes'/> + <feature name='xsaveopt' supported='yes'/> + <feature name='xtpr' supported='no'/> + <feature name='avx512vl' supported='no'/> + <feature name='avx512-vpopcntdq' supported='no'/> + <feature name='phe' supported='no'/> + <feature name='extapic' supported='no'/> + <feature name='3dnowprefetch' supported='yes'/> + <feature name='cr8legacy' supported='no'/> + <feature name='xcrypt-en' supported='no'/> + <feature name='pn' supported='no'/> + <feature name='dca' supported='no'/> + <feature name='pku' supported='no'/> + <feature name='smx' supported='no'/> + <feature name='cmp-legacy' supported='no'/> + <feature name='avx512-4fmaps' supported='no'/> + <feature name='vmcb-clean' supported='no'/> + <feature name='hle' supported='yes'/> + <feature name='3dnowext' supported='no'/> + <feature name='npt' supported='no'/> + <feature name='clwb' supported='no'/> + <feature name='lbrv' supported='no'/> + <feature name='adx' supported='yes'/> + <feature name='ss' supported='yes'/> + <feature name='pni' supported='yes'/> + <feature name='svm-lock' supported='no'/> + <feature name='smep' supported='yes'/> + <feature name='smap' supported='yes'/> + <feature name='pfthreshold' supported='no'/> + <feature name='x2apic' supported='yes'/> + <feature name='avx512vbmi' supported='no'/> + <feature name='flushbyasid' supported='no'/> + <feature name='f16c' supported='yes'/> + <feature name='ace2-en' supported='no'/> + <feature name='pae' supported='yes'/> + <feature name='pat' supported='yes'/> + <feature name='sse' supported='yes'/> + <feature name='phe-en' supported='no'/> + <feature name='kvm-nopiodelay' supported='yes'/> + <feature name='tm' supported='no'/> + <feature name='kvmclock-stable-bit' supported='yes'/> + <feature name='hypervisor' supported='yes'/> + <feature name='pcommit' supported='no'/> + <feature name='syscall' supported='yes'/> + <feature name='avx512dq' supported='no'/> + <feature name='svm' supported='no'/> + <feature name='invtsc' supported='no'/> + <feature name='sse2' supported='yes'/> + <feature name='est' supported='no'/> + <feature name='avx512ifma' supported='no'/> + <feature name='tm2' supported='no'/> + <feature name='kvm-pv-eoi' supported='yes'/> + <feature name='cx8' supported='yes'/> + <feature name='kvm-mmu' supported='no'/> + <feature name='sse4.2' supported='yes'/> + <feature name='pge' supported='yes'/> + <feature name='pdcm' supported='no'/> + <feature name='movbe' supported='yes'/> + <feature name='nrip-save' supported='no'/> + <feature name='ssse3' supported='yes'/> + <feature name='sse4a' supported='no'/> + <feature name='invpcid' supported='yes'/> + <feature name='pdpe1gb' supported='yes'/> + <feature name='tsc-deadline' supported='yes'/> + <feature name='fma' supported='yes'/> + <feature name='cx16' supported='yes'/> + <feature name='de' supported='yes'/> + <feature name='xsave' supported='yes'/> + <feature name='clflush' supported='yes'/> + <feature name='skinit' supported='no'/> + <feature name='tsc' supported='yes'/> + <feature name='tce' supported='no'/> + <feature name='fpu' supported='yes'/> + <feature name='ds-cpl' supported='no'/> + <feature name='ibs' supported='no'/> + <feature name='fma4' supported='no'/> + <feature name='la57' supported='no'/> + <feature name='osvw' supported='no'/> + <feature name='apic' supported='yes'/> + <feature name='pmm' supported='no'/> + <feature name='tsc-adjust' supported='yes'/> + <feature name='kvm-steal-time' supported='yes'/> + <feature name='kvmclock' supported='yes'/> + <feature name='lwp' supported='no'/> + <feature name='xop' supported='no'/> + <feature name='avx' supported='yes'/> + <feature name='ospke' supported='no'/> + <feature name='acpi' supported='no'/> + <feature name='avx512bw' supported='no'/> + <feature name='ace2' supported='no'/> + <feature name='fsgsbase' supported='yes'/> + <feature name='ht' supported='no'/> + <feature name='nx' supported='yes'/> + <feature name='pclmulqdq' supported='yes'/> + <feature name='mmxext' supported='no'/> + <feature name='popcnt' supported='yes'/> + <feature name='xsaves' supported='yes'/> + <feature name='lm' supported='yes'/> + <feature name='umip' supported='no'/> + <feature name='pse' supported='yes'/> + <feature name='avx2' supported='yes'/> + <feature name='sep' supported='yes'/> + <feature name='nodeid-msr' supported='no'/> + <feature name='misalignsse' supported='no'/> + <feature name='bmi1' supported='yes'/> + <feature name='bmi2' supported='yes'/> + <feature name='kvm-pv-unhalt' supported='yes'/> + <feature name='tsc-scale' supported='no'/> + <feature name='topoext' supported='no'/> + <feature name='clflushopt' supported='yes'/> + <feature name='monitor' supported='no'/> + <feature name='avx512er' supported='no'/> + <feature name='pmm-en' supported='no'/> + <feature name='pcid' supported='yes'/> + <feature name='3dnow' supported='no'/> + <feature name='erms' supported='yes'/> + <feature name='lahf-lm' supported='yes'/> + <feature name='fxsr-opt' supported='no'/> + <feature name='xstore' supported='no'/> + <feature name='rtm' supported='yes'/> + <feature name='lmce' supported='yes'/> + <feature name='perfctr-nb' supported='no'/> + <feature name='rdrand' supported='yes'/> + <feature name='rdseed' supported='yes'/> + <feature name='avx512-4vnniw' supported='no'/> + <feature name='vme' supported='yes'/> + <feature name='vmx' supported='yes'/> + <feature name='dtes64' supported='no'/> + <feature name='mtrr' supported='yes'/> + <feature name='rdtscp' supported='yes'/> + <feature name='pse36' supported='yes'/> + <feature name='tbm' supported='no'/> + <feature name='wdt' supported='no'/> + <feature name='sha-ni' supported='no'/> + <feature name='abm' supported='yes'/> + <feature name='avx512pf' supported='no'/> + <feature name='xstore-en' supported='no'/> + </hostCPU> + <cpu type='kvm' name='max' usable='yes'/> + <cpu type='kvm' name='host' usable='yes'/> + <cpu type='kvm' name='base' usable='yes'/> + <cpu type='kvm' name='qemu64' usable='yes'/> + <cpu type='kvm' name='qemu32' usable='yes'/> + <cpu type='kvm' name='phenom' usable='no'/> + <cpu type='kvm' name='pentium3' usable='yes'/> + <cpu type='kvm' name='pentium2' usable='yes'/> + <cpu type='kvm' name='pentium' usable='yes'/> + <cpu type='kvm' name='n270' usable='yes'/> + <cpu type='kvm' name='kvm64' usable='yes'/> + <cpu type='kvm' name='kvm32' usable='yes'/> + <cpu type='kvm' name='coreduo' usable='yes'/> + <cpu type='kvm' name='core2duo' usable='yes'/> + <cpu type='kvm' name='athlon' usable='no'/> + <cpu type='kvm' name='Westmere' usable='yes'/> + <cpu type='kvm' name='Skylake-Client' usable='yes'/> + <cpu type='kvm' name='SandyBridge' usable='yes'/> + <cpu type='kvm' name='Penryn' usable='yes'/> + <cpu type='kvm' name='Opteron_G5' usable='no'/> + <cpu type='kvm' name='Opteron_G4' usable='no'/> + <cpu type='kvm' name='Opteron_G3' usable='no'/> + <cpu type='kvm' name='Opteron_G2' usable='yes'/> + <cpu type='kvm' name='Opteron_G1' usable='yes'/> + <cpu type='kvm' name='Nehalem' usable='yes'/> + <cpu type='kvm' name='IvyBridge' usable='yes'/> + <cpu type='kvm' name='Haswell' usable='yes'/> + <cpu type='kvm' name='Haswell-noTSX' usable='yes'/> + <cpu type='kvm' name='Conroe' usable='yes'/> + <cpu type='kvm' name='Broadwell' usable='yes'/> + <cpu type='kvm' name='Broadwell-noTSX' usable='yes'/> + <cpu type='kvm' name='486' usable='yes'/> + <cpu type='tcg' name='max' usable='yes'/> + <cpu type='tcg' name='host' usable='no'/> + <cpu type='tcg' name='base' usable='yes'/> + <cpu type='tcg' name='qemu64' usable='yes'/> + <cpu type='tcg' name='qemu32' usable='yes'/> + <cpu type='tcg' name='phenom' usable='no'/> + <cpu type='tcg' name='pentium3' usable='yes'/> + <cpu type='tcg' name='pentium2' usable='yes'/> + <cpu type='tcg' name='pentium' usable='yes'/> + <cpu type='tcg' name='n270' usable='yes'/> + <cpu type='tcg' name='kvm64' usable='yes'/> + <cpu type='tcg' name='kvm32' usable='yes'/> + <cpu type='tcg' name='coreduo' usable='yes'/> + <cpu type='tcg' name='core2duo' usable='yes'/> + <cpu type='tcg' name='athlon' usable='yes'/> + <cpu type='tcg' name='Westmere' usable='yes'/> + <cpu type='tcg' name='Skylake-Client' usable='no'/> + <cpu type='tcg' name='SandyBridge' usable='no'/> + <cpu type='tcg' name='Penryn' usable='yes'/> + <cpu type='tcg' name='Opteron_G5' usable='no'/> + <cpu type='tcg' name='Opteron_G4' usable='no'/> + <cpu type='tcg' name='Opteron_G3' usable='no'/> + <cpu type='tcg' name='Opteron_G2' usable='yes'/> + <cpu type='tcg' name='Opteron_G1' usable='yes'/> + <cpu type='tcg' name='Nehalem' usable='yes'/> + <cpu type='tcg' name='IvyBridge' usable='no'/> + <cpu type='tcg' name='Haswell' usable='no'/> + <cpu type='tcg' name='Haswell-noTSX' usable='no'/> + <cpu type='tcg' name='Conroe' usable='yes'/> + <cpu type='tcg' name='Broadwell' usable='no'/> + <cpu type='tcg' name='Broadwell-noTSX' usable='no'/> + <cpu type='tcg' name='486' usable='yes'/> + <machine name='pc-i440fx-2.9' alias='pc' hotplugCpus='yes' maxCpus='255'/> + <machine name='pc-0.12' hotplugCpus='yes' maxCpus='255'/> + <machine name='pc-i440fx-2.4' hotplugCpus='yes' maxCpus='255'/> + <machine name='pc-1.3' hotplugCpus='yes' maxCpus='255'/> + <machine name='pc-q35-2.7' hotplugCpus='yes' maxCpus='255'/> + <machine name='pc-q35-2.6' hotplugCpus='yes' maxCpus='255'/> + <machine name='xenpv' maxCpus='1'/> + <machine name='pc-i440fx-1.7' hotplugCpus='yes' maxCpus='255'/> + <machine name='pc-i440fx-2.8' hotplugCpus='yes' maxCpus='255'/> + <machine name='pc-i440fx-1.6' hotplugCpus='yes' maxCpus='255'/> + <machine name='pc-i440fx-2.7' hotplugCpus='yes' maxCpus='255'/> + <machine name='pc-0.11' hotplugCpus='yes' maxCpus='255'/> + <machine name='pc-i440fx-2.3' hotplugCpus='yes' maxCpus='255'/> + <machine name='pc-0.10' hotplugCpus='yes' maxCpus='255'/> + <machine name='pc-1.2' hotplugCpus='yes' maxCpus='255'/> + <machine name='pc-i440fx-2.2' hotplugCpus='yes' maxCpus='255'/> + <machine name='isapc' hotplugCpus='yes' maxCpus='1'/> + <machine name='pc-q35-2.5' hotplugCpus='yes' maxCpus='255'/> + <machine name='xenfv' hotplugCpus='yes' maxCpus='128'/> + <machine name='pc-0.15' hotplugCpus='yes' maxCpus='255'/> + <machine name='pc-0.14' hotplugCpus='yes' maxCpus='255'/> + <machine name='pc-i440fx-1.5' hotplugCpus='yes' maxCpus='255'/> + <machine name='pc-i440fx-2.6' hotplugCpus='yes' maxCpus='255'/> + <machine name='pc-i440fx-1.4' hotplugCpus='yes' maxCpus='255'/> + <machine name='pc-i440fx-2.5' hotplugCpus='yes' maxCpus='255'/> + <machine name='pc-q35-2.9' alias='q35' hotplugCpus='yes' maxCpus='288'/> + <machine name='pc-1.1' hotplugCpus='yes' maxCpus='255'/> + <machine name='pc-i440fx-2.1' hotplugCpus='yes' maxCpus='255'/> + <machine name='pc-q35-2.8' hotplugCpus='yes' maxCpus='288'/> + <machine name='pc-1.0' hotplugCpus='yes' maxCpus='255'/> + <machine name='pc-i440fx-2.0' hotplugCpus='yes' maxCpus='255'/> + <machine name='pc-q35-2.4' hotplugCpus='yes' maxCpus='255'/> + <machine name='pc-0.13' hotplugCpus='yes' maxCpus='255'/> +</qemuCaps> diff --git a/tests/qemucapabilitiestest.c b/tests/qemucapabilitiestest.c index f9c3456f0..2152e80bf 100644 --- a/tests/qemucapabilitiestest.c +++ b/tests/qemucapabilitiestest.c @@ -169,6 +169,7 @@ mymain(void) DO_TEST("x86_64", "caps_2.6.0"); DO_TEST("x86_64", "caps_2.7.0"); DO_TEST("x86_64", "caps_2.8.0"); + DO_TEST("x86_64", "caps_2.9.0"); DO_TEST("aarch64", "caps_2.6.0-gicv2"); DO_TEST("aarch64", "caps_2.6.0-gicv3"); DO_TEST("ppc64le", "caps_2.6.0"); -- 2.11.1

On 02/15/2017 11:44 AM, Jiri Denemark wrote:
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Generated from Eduardo's work/x86-query-cpu-expansion-full branch.
Version 2: - no change
.../qemucapabilitiesdata/caps_2.9.0.x86_64.replies | 14710 +++++++++++++++++++ tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml | 468 + tests/qemucapabilitiestest.c | 1 + 3 files changed, 15179 insertions(+) create mode 100644 tests/qemucapabilitiesdata/caps_2.9.0.x86_64.replies create mode 100644 tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml
I'm sure you're aware, this conflicts w/ Pavel's commit id '579fc9a2'. I didn't compare this vs. that, but I did find out if I updated w/ Pavel's changes, then patch 10 failed to apply; otherwise, without his changes I was able to get through patch 27 without 'git am -3' failures... Patch 28 failed with: Applying: cputest: Switch host CPU data scripts to model expansion fatal: sha1 information is lacking or useless (tests/cputestdata/cpu-parse.sh). error: could not build fake ancestor Patch failed at 0028 cputest: Switch host CPU data scripts to model expansion The copy of the patch that failed is found in: .git/rebase-apply/patch When you have resolved this problem, run "git am --continue". But I figure some review is better than none - so I'll move on to the next patch... John

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - no change .../domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml | 116 +++++++++++++++++++++ tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml | 116 +++++++++++++++++++++ tests/domaincapstest.c | 8 ++ 3 files changed, 240 insertions(+) create mode 100644 tests/domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml create mode 100644 tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml diff --git a/tests/domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml b/tests/domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml new file mode 100644 index 000000000..9b9dfec09 --- /dev/null +++ b/tests/domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml @@ -0,0 +1,116 @@ +<domainCapabilities> + <path>/usr/bin/qemu-system-x86_64</path> + <domain>qemu</domain> + <machine>pc-i440fx-2.9</machine> + <arch>x86_64</arch> + <vcpu max='255'/> + <os supported='yes'> + <loader supported='yes'> + <value>/usr/share/AAVMF/AAVMF_CODE.fd</value> + <value>/usr/share/OVMF/OVMF_CODE.fd</value> + <enum name='type'> + <value>rom</value> + <value>pflash</value> + </enum> + <enum name='readonly'> + <value>yes</value> + <value>no</value> + </enum> + </loader> + </os> + <cpu> + <mode name='host-passthrough' supported='no'/> + <mode name='host-model' supported='yes'> + <model fallback='allow'>Broadwell</model> + </mode> + <mode name='custom' supported='yes'> + <model usable='yes'>qemu64</model> + <model usable='yes'>qemu32</model> + <model usable='no'>phenom</model> + <model usable='yes'>pentium3</model> + <model usable='yes'>pentium2</model> + <model usable='yes'>pentium</model> + <model usable='yes'>n270</model> + <model usable='yes'>kvm64</model> + <model usable='yes'>kvm32</model> + <model usable='yes'>coreduo</model> + <model usable='yes'>core2duo</model> + <model usable='yes'>athlon</model> + <model usable='yes'>Westmere</model> + <model usable='no'>Skylake-Client</model> + <model usable='no'>SandyBridge</model> + <model usable='yes'>Penryn</model> + <model usable='no'>Opteron_G5</model> + <model usable='no'>Opteron_G4</model> + <model usable='no'>Opteron_G3</model> + <model usable='yes'>Opteron_G2</model> + <model usable='yes'>Opteron_G1</model> + <model usable='yes'>Nehalem</model> + <model usable='no'>IvyBridge</model> + <model usable='no'>Haswell</model> + <model usable='no'>Haswell-noTSX</model> + <model usable='yes'>Conroe</model> + <model usable='no'>Broadwell</model> + <model usable='no'>Broadwell-noTSX</model> + <model usable='yes'>486</model> + </mode> + </cpu> + <devices> + <disk supported='yes'> + <enum name='diskDevice'> + <value>disk</value> + <value>cdrom</value> + <value>floppy</value> + <value>lun</value> + </enum> + <enum name='bus'> + <value>ide</value> + <value>fdc</value> + <value>scsi</value> + <value>virtio</value> + <value>usb</value> + </enum> + </disk> + <graphics supported='yes'> + <enum name='type'> + <value>sdl</value> + <value>vnc</value> + <value>spice</value> + </enum> + </graphics> + <video supported='yes'> + <enum name='modelType'> + <value>vga</value> + <value>cirrus</value> + <value>vmvga</value> + <value>qxl</value> + <value>virtio</value> + </enum> + </video> + <hostdev supported='yes'> + <enum name='mode'> + <value>subsystem</value> + </enum> + <enum name='startupPolicy'> + <value>default</value> + <value>mandatory</value> + <value>requisite</value> + <value>optional</value> + </enum> + <enum name='subsysType'> + <value>usb</value> + <value>pci</value> + <value>scsi</value> + </enum> + <enum name='capsType'/> + <enum name='pciBackend'> + <value>default</value> + <value>kvm</value> + <value>vfio</value> + </enum> + </hostdev> + </devices> + <features> + <gic supported='no'/> + </features> +</domainCapabilities> diff --git a/tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml b/tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml new file mode 100644 index 000000000..49722f91f --- /dev/null +++ b/tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml @@ -0,0 +1,116 @@ +<domainCapabilities> + <path>/usr/bin/qemu-system-x86_64</path> + <domain>kvm</domain> + <machine>pc-i440fx-2.9</machine> + <arch>x86_64</arch> + <vcpu max='255'/> + <os supported='yes'> + <loader supported='yes'> + <value>/usr/share/AAVMF/AAVMF_CODE.fd</value> + <value>/usr/share/OVMF/OVMF_CODE.fd</value> + <enum name='type'> + <value>rom</value> + <value>pflash</value> + </enum> + <enum name='readonly'> + <value>yes</value> + <value>no</value> + </enum> + </loader> + </os> + <cpu> + <mode name='host-passthrough' supported='yes'/> + <mode name='host-model' supported='yes'> + <model fallback='allow'>Broadwell</model> + </mode> + <mode name='custom' supported='yes'> + <model usable='yes'>qemu64</model> + <model usable='yes'>qemu32</model> + <model usable='no'>phenom</model> + <model usable='yes'>pentium3</model> + <model usable='yes'>pentium2</model> + <model usable='yes'>pentium</model> + <model usable='yes'>n270</model> + <model usable='yes'>kvm64</model> + <model usable='yes'>kvm32</model> + <model usable='yes'>coreduo</model> + <model usable='yes'>core2duo</model> + <model usable='no'>athlon</model> + <model usable='yes'>Westmere</model> + <model usable='yes'>Skylake-Client</model> + <model usable='yes'>SandyBridge</model> + <model usable='yes'>Penryn</model> + <model usable='no'>Opteron_G5</model> + <model usable='no'>Opteron_G4</model> + <model usable='no'>Opteron_G3</model> + <model usable='yes'>Opteron_G2</model> + <model usable='yes'>Opteron_G1</model> + <model usable='yes'>Nehalem</model> + <model usable='yes'>IvyBridge</model> + <model usable='yes'>Haswell</model> + <model usable='yes'>Haswell-noTSX</model> + <model usable='yes'>Conroe</model> + <model usable='yes'>Broadwell</model> + <model usable='yes'>Broadwell-noTSX</model> + <model usable='yes'>486</model> + </mode> + </cpu> + <devices> + <disk supported='yes'> + <enum name='diskDevice'> + <value>disk</value> + <value>cdrom</value> + <value>floppy</value> + <value>lun</value> + </enum> + <enum name='bus'> + <value>ide</value> + <value>fdc</value> + <value>scsi</value> + <value>virtio</value> + <value>usb</value> + </enum> + </disk> + <graphics supported='yes'> + <enum name='type'> + <value>sdl</value> + <value>vnc</value> + <value>spice</value> + </enum> + </graphics> + <video supported='yes'> + <enum name='modelType'> + <value>vga</value> + <value>cirrus</value> + <value>vmvga</value> + <value>qxl</value> + <value>virtio</value> + </enum> + </video> + <hostdev supported='yes'> + <enum name='mode'> + <value>subsystem</value> + </enum> + <enum name='startupPolicy'> + <value>default</value> + <value>mandatory</value> + <value>requisite</value> + <value>optional</value> + </enum> + <enum name='subsysType'> + <value>usb</value> + <value>pci</value> + <value>scsi</value> + </enum> + <enum name='capsType'/> + <enum name='pciBackend'> + <value>default</value> + <value>kvm</value> + <value>vfio</value> + </enum> + </hostdev> + </devices> + <features> + <gic supported='no'/> + </features> +</domainCapabilities> diff --git a/tests/domaincapstest.c b/tests/domaincapstest.c index 28d8609ac..9b64f2c18 100644 --- a/tests/domaincapstest.c +++ b/tests/domaincapstest.c @@ -453,6 +453,14 @@ mymain(void) "/usr/bin/qemu-system-x86_64", NULL, "x86_64", VIR_DOMAIN_VIRT_QEMU); + DO_TEST_QEMU("2.9.0", "caps_2.9.0", + "/usr/bin/qemu-system-x86_64", NULL, + "x86_64", VIR_DOMAIN_VIRT_KVM); + + DO_TEST_QEMU("2.9.0-tcg", "caps_2.9.0", + "/usr/bin/qemu-system-x86_64", NULL, + "x86_64", VIR_DOMAIN_VIRT_QEMU); + DO_TEST_QEMU("2.7.0", "caps_2.7.0", "/usr/bin/qemu-system-s390x", NULL, "s390x", VIR_DOMAIN_VIRT_KVM); -- 2.11.1

On 02/15/2017 11:44 AM, Jiri Denemark wrote:
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
.../domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml | 116 +++++++++++++++++++++ tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml | 116 +++++++++++++++++++++ tests/domaincapstest.c | 8 ++ 3 files changed, 240 insertions(+) create mode 100644 tests/domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml create mode 100644 tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml
Will this "eventually" need an updated when qemu 2.9 is complete? Or is it "close enough"?
diff --git a/tests/domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml b/tests/domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml new file mode 100644 index 000000000..9b9dfec09
[...]
diff --git a/tests/domaincapstest.c b/tests/domaincapstest.c index 28d8609ac..9b64f2c18 100644 --- a/tests/domaincapstest.c +++ b/tests/domaincapstest.c @@ -453,6 +453,14 @@ mymain(void) "/usr/bin/qemu-system-x86_64", NULL, "x86_64", VIR_DOMAIN_VIRT_QEMU);
+ DO_TEST_QEMU("2.9.0", "caps_2.9.0", + "/usr/bin/qemu-system-x86_64", NULL, + "x86_64", VIR_DOMAIN_VIRT_KVM); + + DO_TEST_QEMU("2.9.0-tcg", "caps_2.9.0", + "/usr/bin/qemu-system-x86_64", NULL, + "x86_64", VIR_DOMAIN_VIRT_QEMU); + DO_TEST_QEMU("2.7.0", "caps_2.7.0", "/usr/bin/qemu-system-s390x", NULL, "s390x", VIR_DOMAIN_VIRT_KVM);
What about "s390x" for 2.9.0? Since later patches seem to make some alterations for s390... Unrelated to this patch question - should these always be updated for each cpu type for each release? John

On Tue, Feb 21, 2017 at 09:23:34 -0500, John Ferlan wrote:
On 02/15/2017 11:44 AM, Jiri Denemark wrote:
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
.../domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml | 116 +++++++++++++++++++++ tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml | 116 +++++++++++++++++++++ tests/domaincapstest.c | 8 ++ 3 files changed, 240 insertions(+) create mode 100644 tests/domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml create mode 100644 tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml
Will this "eventually" need an updated when qemu 2.9 is complete? Or is it "close enough"?
Probably not, but we can't tell until 2.9 is complete :-)
diff --git a/tests/domaincapstest.c b/tests/domaincapstest.c index 28d8609ac..9b64f2c18 100644 --- a/tests/domaincapstest.c +++ b/tests/domaincapstest.c @@ -453,6 +453,14 @@ mymain(void) "/usr/bin/qemu-system-x86_64", NULL, "x86_64", VIR_DOMAIN_VIRT_QEMU);
+ DO_TEST_QEMU("2.9.0", "caps_2.9.0", + "/usr/bin/qemu-system-x86_64", NULL, + "x86_64", VIR_DOMAIN_VIRT_KVM); + + DO_TEST_QEMU("2.9.0-tcg", "caps_2.9.0", + "/usr/bin/qemu-system-x86_64", NULL, + "x86_64", VIR_DOMAIN_VIRT_QEMU); + DO_TEST_QEMU("2.7.0", "caps_2.7.0", "/usr/bin/qemu-system-s390x", NULL, "s390x", VIR_DOMAIN_VIRT_KVM);
What about "s390x" for 2.9.0? Since later patches seem to make some alterations for s390...
s390 provides the required functionality since 2.8.0, thus we already have the test data in place.
Unrelated to this patch question - should these always be updated for each cpu type for each release?
I don't think we need to always update all of them at once. I tend to add test data for things we want to test which are not present in existing data sets. Jirka

On 02/22/2017 04:06 AM, Jiri Denemark wrote:
On Tue, Feb 21, 2017 at 09:23:34 -0500, John Ferlan wrote:
On 02/15/2017 11:44 AM, Jiri Denemark wrote:
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
.../domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml | 116 +++++++++++++++++++++ tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml | 116 +++++++++++++++++++++ tests/domaincapstest.c | 8 ++ 3 files changed, 240 insertions(+) create mode 100644 tests/domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml create mode 100644 tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml
Will this "eventually" need an updated when qemu 2.9 is complete? Or is it "close enough"?
Probably not, but we can't tell until 2.9 is complete :-)
diff --git a/tests/domaincapstest.c b/tests/domaincapstest.c index 28d8609ac..9b64f2c18 100644 --- a/tests/domaincapstest.c +++ b/tests/domaincapstest.c @@ -453,6 +453,14 @@ mymain(void) "/usr/bin/qemu-system-x86_64", NULL, "x86_64", VIR_DOMAIN_VIRT_QEMU);
+ DO_TEST_QEMU("2.9.0", "caps_2.9.0", + "/usr/bin/qemu-system-x86_64", NULL, + "x86_64", VIR_DOMAIN_VIRT_KVM); + + DO_TEST_QEMU("2.9.0-tcg", "caps_2.9.0", + "/usr/bin/qemu-system-x86_64", NULL, + "x86_64", VIR_DOMAIN_VIRT_QEMU); + DO_TEST_QEMU("2.7.0", "caps_2.7.0", "/usr/bin/qemu-system-s390x", NULL, "s390x", VIR_DOMAIN_VIRT_KVM);
What about "s390x" for 2.9.0? Since later patches seem to make some alterations for s390...
s390 provides the required functionality since 2.8.0, thus we already have the test data in place.
Unrelated to this patch question - should these always be updated for each cpu type for each release?
I don't think we need to always update all of them at once. I tend to add test data for things we want to test which are not present in existing data sets.
Jirka
OK - ACK for this one too then. John

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - no change src/qemu/qemu_capabilities.c | 109 ++++++++++++++++++++++--------------------- 1 file changed, 55 insertions(+), 54 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 399e31447..c5e57b4ab 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -3041,37 +3041,36 @@ virQEMUCapsCPUFilterFeatures(const char *name, } -static void -virQEMUCapsCopyCPUModelFromQEMU(virQEMUCapsPtr qemuCaps) +/** + * Returns 0 when host CPU model provided by QEMU was filled in qemuCaps, + * 1 when the caller should fall back to using virCapsPtr->host.cpu, + * -1 on error. + */ +static int +virQEMUCapsInitCPUModelS390(virQEMUCapsPtr qemuCaps, + virCPUDefPtr cpu) { - virCPUDefPtr cpu = NULL; - qemuMonitorCPUModelInfoPtr modelInfo = NULL; + qemuMonitorCPUModelInfoPtr modelInfo = qemuCaps->hostCPUModelInfo; size_t i; - if (!(modelInfo = qemuCaps->hostCPUModelInfo)) { + if (!modelInfo) { virReportError(VIR_ERR_INTERNAL_ERROR, - _("missing host CPU model info from QEMU capabilities" - " for binary %s"), qemuCaps->binary); - goto error; + _("missing host CPU model info from QEMU capabilities " + "for binary %s"), + qemuCaps->binary); + return -1; } - if (VIR_ALLOC(cpu) < 0) - goto error; - if (VIR_STRDUP(cpu->model, modelInfo->name) < 0 || VIR_ALLOC_N(cpu->features, modelInfo->nprops) < 0) - goto error; + return -1; cpu->nfeatures_max = modelInfo->nprops; cpu->nfeatures = 0; - cpu->sockets = cpu->cores = cpu->threads = 0; - cpu->type = VIR_CPU_TYPE_GUEST; - cpu->mode = VIR_CPU_MODE_CUSTOM; - cpu->match = VIR_CPU_MATCH_EXACT; for (i = 0; i < modelInfo->nprops; i++) { if (VIR_STRDUP(cpu->features[i].name, modelInfo->props[i].name) < 0) - goto error; + return -1; if (modelInfo->props[i].supported) cpu->features[i].policy = VIR_CPU_FEATURE_REQUIRE; @@ -3081,31 +3080,53 @@ virQEMUCapsCopyCPUModelFromQEMU(virQEMUCapsPtr qemuCaps) cpu->nfeatures++; } - qemuCaps->hostCPUModel = cpu; - return; - - error: - virCPUDefFree(cpu); - qemuCaps->hostCPUModel = NULL; - virResetLastError(); + return 0; } -static void -virQEMUCapsCopyCPUModelFromHost(virQEMUCapsPtr qemuCaps, - virCapsPtr caps) +/** + * Returns 0 when host CPU model provided by QEMU was filled in qemuCaps, + * 1 when the caller should fall back to using virCapsPtr->host.cpu, + * -1 on error. + */ +static int +virQEMUCapsInitCPUModel(virQEMUCapsPtr qemuCaps, + virCPUDefPtr cpu) +{ + int ret = 1; + + if (ARCH_IS_S390(qemuCaps->arch)) + ret = virQEMUCapsInitCPUModelS390(qemuCaps, cpu); + + return ret; +} + + +void +virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, + virCapsPtr caps) { virCPUDefPtr cpu = NULL; + int rc; - if (caps->host.cpu && caps->host.cpu->model) { - if (VIR_ALLOC(cpu) < 0) + if (!caps || !virQEMUCapsGuestIsNative(caps->host.arch, qemuCaps->arch)) + return; + + if (VIR_ALLOC(cpu) < 0) + goto error; + + cpu->type = VIR_CPU_TYPE_GUEST; + cpu->mode = VIR_CPU_MODE_CUSTOM; + cpu->match = VIR_CPU_MATCH_EXACT; + cpu->fallback = VIR_CPU_FALLBACK_ALLOW; + + if ((rc = virQEMUCapsInitCPUModel(qemuCaps, cpu)) < 0) { + goto error; + } else if (rc == 1) { + VIR_DEBUG("No host CPU model info from QEMU; using host capabilities"); + if (!caps->host.cpu || !caps->host.cpu->model) goto error; - cpu->sockets = cpu->cores = cpu->threads = 0; - cpu->type = VIR_CPU_TYPE_GUEST; - cpu->mode = VIR_CPU_MODE_CUSTOM; - cpu->match = VIR_CPU_MATCH_EXACT; - if (virCPUDefCopyModelFilter(cpu, caps->host.cpu, true, virQEMUCapsCPUFilterFeatures, NULL) < 0) goto error; @@ -3116,30 +3137,10 @@ virQEMUCapsCopyCPUModelFromHost(virQEMUCapsPtr qemuCaps, error: virCPUDefFree(cpu); - qemuCaps->hostCPUModel = NULL; virResetLastError(); } -void -virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, - virCapsPtr caps) -{ - if (!caps || !virQEMUCapsGuestIsNative(caps->host.arch, qemuCaps->arch)) - return; - - switch (qemuCaps->arch) { - case VIR_ARCH_S390: - case VIR_ARCH_S390X: - virQEMUCapsCopyCPUModelFromQEMU(qemuCaps); - break; - - default: - virQEMUCapsCopyCPUModelFromHost(qemuCaps, caps); - } -} - - static int virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, xmlXPathContextPtr ctxt) -- 2.11.1

On 02/15/2017 11:44 AM, Jiri Denemark wrote:
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
src/qemu/qemu_capabilities.c | 109 ++++++++++++++++++++++--------------------- 1 file changed, 55 insertions(+), 54 deletions(-)
This is "visually" more than a refactor since you've specified an initialization of cpu->fallback... That initialization gets essentially the same value of 0 (ALLOW == 0) as would any VIR_ALLOC field, so it's not a problem per se. Still makes me wonder if there should have been an "UNDEFINED" category... My only other comment here is whether there is a concern that your error path doesn't clear the qemuCaps->hostCPUModel. It wasn't clear to me whether this path can be called after libvirtd restart and if failure would mean anything or not (perhaps the one reason I could think of setting NULL previously). ACK in principal - might be nice to mention why clearing hostCPUModel on failure isn't required anymore. John
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 399e31447..c5e57b4ab 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -3041,37 +3041,36 @@ virQEMUCapsCPUFilterFeatures(const char *name, }
-static void -virQEMUCapsCopyCPUModelFromQEMU(virQEMUCapsPtr qemuCaps) +/** + * Returns 0 when host CPU model provided by QEMU was filled in qemuCaps, + * 1 when the caller should fall back to using virCapsPtr->host.cpu, + * -1 on error. + */ +static int +virQEMUCapsInitCPUModelS390(virQEMUCapsPtr qemuCaps, + virCPUDefPtr cpu) { - virCPUDefPtr cpu = NULL; - qemuMonitorCPUModelInfoPtr modelInfo = NULL; + qemuMonitorCPUModelInfoPtr modelInfo = qemuCaps->hostCPUModelInfo; size_t i;
- if (!(modelInfo = qemuCaps->hostCPUModelInfo)) { + if (!modelInfo) { virReportError(VIR_ERR_INTERNAL_ERROR, - _("missing host CPU model info from QEMU capabilities" - " for binary %s"), qemuCaps->binary); - goto error; + _("missing host CPU model info from QEMU capabilities " + "for binary %s"), + qemuCaps->binary); + return -1; }
- if (VIR_ALLOC(cpu) < 0) - goto error; - if (VIR_STRDUP(cpu->model, modelInfo->name) < 0 || VIR_ALLOC_N(cpu->features, modelInfo->nprops) < 0) - goto error; + return -1;
cpu->nfeatures_max = modelInfo->nprops; cpu->nfeatures = 0; - cpu->sockets = cpu->cores = cpu->threads = 0; - cpu->type = VIR_CPU_TYPE_GUEST; - cpu->mode = VIR_CPU_MODE_CUSTOM; - cpu->match = VIR_CPU_MATCH_EXACT;
for (i = 0; i < modelInfo->nprops; i++) { if (VIR_STRDUP(cpu->features[i].name, modelInfo->props[i].name) < 0) - goto error; + return -1;
if (modelInfo->props[i].supported) cpu->features[i].policy = VIR_CPU_FEATURE_REQUIRE; @@ -3081,31 +3080,53 @@ virQEMUCapsCopyCPUModelFromQEMU(virQEMUCapsPtr qemuCaps) cpu->nfeatures++; }
- qemuCaps->hostCPUModel = cpu; - return; - - error: - virCPUDefFree(cpu); - qemuCaps->hostCPUModel = NULL; - virResetLastError(); + return 0; }
-static void -virQEMUCapsCopyCPUModelFromHost(virQEMUCapsPtr qemuCaps, - virCapsPtr caps) +/** + * Returns 0 when host CPU model provided by QEMU was filled in qemuCaps, + * 1 when the caller should fall back to using virCapsPtr->host.cpu, + * -1 on error. + */ +static int +virQEMUCapsInitCPUModel(virQEMUCapsPtr qemuCaps, + virCPUDefPtr cpu) +{ + int ret = 1; + + if (ARCH_IS_S390(qemuCaps->arch)) + ret = virQEMUCapsInitCPUModelS390(qemuCaps, cpu); + + return ret; +} + + +void +virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, + virCapsPtr caps) { virCPUDefPtr cpu = NULL; + int rc;
- if (caps->host.cpu && caps->host.cpu->model) { - if (VIR_ALLOC(cpu) < 0) + if (!caps || !virQEMUCapsGuestIsNative(caps->host.arch, qemuCaps->arch)) + return; + + if (VIR_ALLOC(cpu) < 0) + goto error; + + cpu->type = VIR_CPU_TYPE_GUEST; + cpu->mode = VIR_CPU_MODE_CUSTOM; + cpu->match = VIR_CPU_MATCH_EXACT; + cpu->fallback = VIR_CPU_FALLBACK_ALLOW; + + if ((rc = virQEMUCapsInitCPUModel(qemuCaps, cpu)) < 0) { + goto error; + } else if (rc == 1) { + VIR_DEBUG("No host CPU model info from QEMU; using host capabilities"); + if (!caps->host.cpu || !caps->host.cpu->model) goto error;
- cpu->sockets = cpu->cores = cpu->threads = 0; - cpu->type = VIR_CPU_TYPE_GUEST; - cpu->mode = VIR_CPU_MODE_CUSTOM; - cpu->match = VIR_CPU_MATCH_EXACT; - if (virCPUDefCopyModelFilter(cpu, caps->host.cpu, true, virQEMUCapsCPUFilterFeatures, NULL) < 0) goto error; @@ -3116,30 +3137,10 @@ virQEMUCapsCopyCPUModelFromHost(virQEMUCapsPtr qemuCaps,
error: virCPUDefFree(cpu); - qemuCaps->hostCPUModel = NULL;
^^^
virResetLastError(); }
-void -virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, - virCapsPtr caps) -{ - if (!caps || !virQEMUCapsGuestIsNative(caps->host.arch, qemuCaps->arch)) - return; - - switch (qemuCaps->arch) { - case VIR_ARCH_S390: - case VIR_ARCH_S390X: - virQEMUCapsCopyCPUModelFromQEMU(qemuCaps); - break; - - default: - virQEMUCapsCopyCPUModelFromHost(qemuCaps, caps); - } -} - - static int virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, xmlXPathContextPtr ctxt)

On Tue, Feb 21, 2017 at 09:24:13 -0500, John Ferlan wrote:
On 02/15/2017 11:44 AM, Jiri Denemark wrote:
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
src/qemu/qemu_capabilities.c | 109 ++++++++++++++++++++++--------------------- 1 file changed, 55 insertions(+), 54 deletions(-)
This is "visually" more than a refactor since you've specified an initialization of cpu->fallback... That initialization gets essentially the same value of 0 (ALLOW == 0) as would any VIR_ALLOC field, so it's not a problem per se.
It's just to make the value more visible. We use VIR_CPU_FALLBACK_ALLOW by default and change it to VIR_CPU_FALLBACK_FORBID when we get the CPU model from QEMU (rather than by querying the host CPU ourselves).
Still makes me wonder if there should have been an "UNDEFINED" category...
No. Originally there was no fallback attribute and the functionality was equivalent to fallback="allow". That is the attribute was added just to be able to turn fallback off.
My only other comment here is whether there is a concern that your error path doesn't clear the qemuCaps->hostCPUModel. It wasn't clear to me whether this path can be called after libvirtd restart and if failure would mean anything or not (perhaps the one reason I could think of setting NULL previously).
ACK in principal - might be nice to mention why clearing hostCPUModel on failure isn't required anymore.
It didn't make sense even in the original code (if it did, setting it to NULL would be a clear memory leak). The initial value of qemuCaps->hostCPUModel is NULL and the code doesn't touch it until we know everything is OK. Jirka

All features the function is currently supposed to filter out are specific to x86_64. We should avoid removing them on other architectures. It seems to be quite unlikely other achitectures would use the same names, but one can never be sure. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - no change src/qemu/qemu_capabilities.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index c5e57b4ab..0be2301cb 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -3030,8 +3030,13 @@ virQEMUCapsProbeQMPGICCapabilities(virQEMUCapsPtr qemuCaps, static bool virQEMUCapsCPUFilterFeatures(const char *name, - void *opaque ATTRIBUTE_UNUSED) + void *opaque) { + virQEMUCapsPtr qemuCaps = opaque; + + if (!ARCH_IS_X86(qemuCaps->arch)) + return true; + if (STREQ(name, "cmt") || STREQ(name, "mbm_total") || STREQ(name, "mbm_local")) @@ -3128,7 +3133,8 @@ virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, goto error; if (virCPUDefCopyModelFilter(cpu, caps->host.cpu, true, - virQEMUCapsCPUFilterFeatures, NULL) < 0) + virQEMUCapsCPUFilterFeatures, + qemuCaps) < 0) goto error; } -- 2.11.1

On 02/15/2017 11:44 AM, Jiri Denemark wrote:
All features the function is currently supposed to filter out are specific to x86_64. We should avoid removing them on other architectures. It seems to be quite unlikely other achitectures would use the same names, but one can never be sure.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
src/qemu/qemu_capabilities.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
This works since the only filtered features happen to be X86 features, right? If so, then that assumption could eventually change and someone would have to know to dig into virQEMUCapsCPUFilterFeatures to change... Just thinking while typing... ACK to what's here John

On Tue, Feb 21, 2017 at 09:24:33 -0500, John Ferlan wrote:
On 02/15/2017 11:44 AM, Jiri Denemark wrote:
All features the function is currently supposed to filter out are specific to x86_64. We should avoid removing them on other architectures. It seems to be quite unlikely other achitectures would use the same names, but one can never be sure.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
src/qemu/qemu_capabilities.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
This works since the only filtered features happen to be X86 features, right? If so, then that assumption could eventually change and someone would have to know to dig into virQEMUCapsCPUFilterFeatures to change...
Just thinking while typing...
ACK to what's here
Thanks. I pushed it since it didn't have any dependencies on the other patches in this series. Jirka

Our documentation of the domain capabilities XML says that the fallback attribute of a CPU model is used to indicate whether the CPU model was detected by libvirt itself (fallback="allow") or by asking the hypervisor (fallback="forbid"). We need to properly set fallback="forbid" when CPU model comes from QEMU to match the documentation. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - no change src/qemu/qemu_capabilities.c | 3 +++ tests/domaincapsschemadata/qemu_2.8.0.s390x.xml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 0be2301cb..c511248bd 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -3103,6 +3103,9 @@ virQEMUCapsInitCPUModel(virQEMUCapsPtr qemuCaps, if (ARCH_IS_S390(qemuCaps->arch)) ret = virQEMUCapsInitCPUModelS390(qemuCaps, cpu); + if (ret == 0) + cpu->fallback = VIR_CPU_FALLBACK_FORBID; + return ret; } diff --git a/tests/domaincapsschemadata/qemu_2.8.0.s390x.xml b/tests/domaincapsschemadata/qemu_2.8.0.s390x.xml index efe345962..0b8135bc5 100644 --- a/tests/domaincapsschemadata/qemu_2.8.0.s390x.xml +++ b/tests/domaincapsschemadata/qemu_2.8.0.s390x.xml @@ -21,7 +21,7 @@ <cpu> <mode name='host-passthrough' supported='yes'/> <mode name='host-model' supported='yes'> - <model fallback='allow'>zEC12.2-base</model> + <model fallback='forbid'>zEC12.2-base</model> <feature policy='require' name='aefsi'/> <feature policy='require' name='msa5'/> <feature policy='require' name='msa4'/> -- 2.11.1

On 02/15/2017 11:44 AM, Jiri Denemark wrote:
Our documentation of the domain capabilities XML says that the fallback attribute of a CPU model is used to indicate whether the CPU model was detected by libvirt itself (fallback="allow") or by asking the hypervisor (fallback="forbid"). We need to properly set fallback="forbid" when CPU model comes from QEMU to match the documentation.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
src/qemu/qemu_capabilities.c | 3 +++ tests/domaincapsschemadata/qemu_2.8.0.s390x.xml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 0be2301cb..c511248bd 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -3103,6 +3103,9 @@ virQEMUCapsInitCPUModel(virQEMUCapsPtr qemuCaps, if (ARCH_IS_S390(qemuCaps->arch)) ret = virQEMUCapsInitCPUModelS390(qemuCaps, cpu);
The following can "at this point in the series" only affect S390 since 'ret' is initialized to 1 beforehand. So other arch's won't get this - is that expected? When patch 22 is applied X86 will get this, but it doesn't seem arm or ppc64 would likewise (from my quick read and less than knowledgeable view that assumes host-model fallback is supported for those). ACK for what's here since it does alter the fallback value based on the doc description. John
+ if (ret == 0) + cpu->fallback = VIR_CPU_FALLBACK_FORBID; + return ret; }
diff --git a/tests/domaincapsschemadata/qemu_2.8.0.s390x.xml b/tests/domaincapsschemadata/qemu_2.8.0.s390x.xml index efe345962..0b8135bc5 100644 --- a/tests/domaincapsschemadata/qemu_2.8.0.s390x.xml +++ b/tests/domaincapsschemadata/qemu_2.8.0.s390x.xml @@ -21,7 +21,7 @@ <cpu> <mode name='host-passthrough' supported='yes'/> <mode name='host-model' supported='yes'> - <model fallback='allow'>zEC12.2-base</model> + <model fallback='forbid'>zEC12.2-base</model> <feature policy='require' name='aefsi'/> <feature policy='require' name='msa5'/> <feature policy='require' name='msa4'/>

On Tue, Feb 21, 2017 at 09:25:20 -0500, John Ferlan wrote:
On 02/15/2017 11:44 AM, Jiri Denemark wrote:
Our documentation of the domain capabilities XML says that the fallback attribute of a CPU model is used to indicate whether the CPU model was detected by libvirt itself (fallback="allow") or by asking the hypervisor (fallback="forbid"). We need to properly set fallback="forbid" when CPU model comes from QEMU to match the documentation.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
src/qemu/qemu_capabilities.c | 3 +++ tests/domaincapsschemadata/qemu_2.8.0.s390x.xml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 0be2301cb..c511248bd 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -3103,6 +3103,9 @@ virQEMUCapsInitCPUModel(virQEMUCapsPtr qemuCaps, if (ARCH_IS_S390(qemuCaps->arch)) ret = virQEMUCapsInitCPUModelS390(qemuCaps, cpu);
The following can "at this point in the series" only affect S390 since 'ret' is initialized to 1 beforehand. So other arch's won't get this - is that expected?
Yes. We don't get the host CPU model from QEMU for any other arch yet (at this point in the series).
When patch 22 is applied X86 will get this, but it doesn't seem arm or ppc64 would likewise (from my quick read and less than knowledgeable view that assumes host-model fallback is supported for those).
Right. Jirka

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - no change docs/formatdomain.html.in | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 294d3c467..9e7f7804e 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -1272,16 +1272,15 @@ model even if the destination host contains more capable CPUs for the running instance of the guest; but shutting down and restarting the guest may present different hardware to the guest according to - the capabilities of the new host. <strong>Beware</strong>, due to the - way libvirt detects host CPU and due to the fact libvirt does not - talk to QEMU/KVM when creating the CPU model, CPU configuration - created using <code>host-model</code> may not work as expected. The - guest CPU may differ from the configuration and it may also confuse - guest OS by using a combination of CPU features and other parameters - (such as CPUID level) that don't work. Until these issues are fixed, - it's a good idea to avoid using <code>host-model</code> and use - <code>custom</code> mode with just the CPU model from host - capabilities XML. + the capabilities of the new host. Libvirt older than 3.1.0 or QEMU + older than 2.9.0 do not support detection of the host CPU model via + QEMU and thus the CPU configuration created using + <code>host-model</code> may not work as expected. + <span class="since">3.1.0 and QEMU 2.9.0</span> this mode works the + way it was designed and it is indicated by the <code>fallback</code> + attribute set to <code>forbid</code> in the host-model CPU + definition advertised in <a href="formatdomaincaps.html#elementsCPU" + >domain capabilities XML</a>. <span class="since">Since 1.2.11</span> PowerISA allows processors to run VMs in binary compatibility mode supporting an older version of ISA. Libvirt on PowerPC architecture uses the @@ -1307,6 +1306,15 @@ a migration is attempted then the guest may hang or crash upon resuming execution on the destination host.</dd> </dl> + + Both <code>host-model</code> and <code>host-passthrough</code> modes + make sense when a domain can run directly on the host CPUs without + (for example, domains with type <code>kvm</code>). The actual host CPU + is irrelevant for domains with emulated virtual CPUs (such as domains + with type <code>qemu</code>). However, for backward compatibility + <code>host-model</code> may be implemented even for domains running on + emulated CPUs in which case the best CPU the hypervisor is able to + emulate may be used rather then trying to mimic the host CPU model. </dd> <dt><code>model</code></dt> -- 2.11.1

On 02/15/2017 11:44 AM, Jiri Denemark wrote:
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
docs/formatdomain.html.in | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-)
I would think this should be merged with the previous patch, but it's not necessary...
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 294d3c467..9e7f7804e 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -1272,16 +1272,15 @@ model even if the destination host contains more capable CPUs for the running instance of the guest; but shutting down and restarting the guest may present different hardware to the guest according to - the capabilities of the new host. <strong>Beware</strong>, due to the - way libvirt detects host CPU and due to the fact libvirt does not - talk to QEMU/KVM when creating the CPU model, CPU configuration - created using <code>host-model</code> may not work as expected. The - guest CPU may differ from the configuration and it may also confuse - guest OS by using a combination of CPU features and other parameters - (such as CPUID level) that don't work. Until these issues are fixed, - it's a good idea to avoid using <code>host-model</code> and use - <code>custom</code> mode with just the CPU model from host - capabilities XML. + the capabilities of the new host. Libvirt older than 3.1.0 or QEMU + older than 2.9.0 do not support detection of the host CPU model via
How about: Prior to libvirt 3.1.0 and QEMU 2.9.0 detection of the host CPU model via QEMU is not supported. Thus the CPU...
+ QEMU and thus the CPU configuration created using + <code>host-model</code> may not work as expected. + <span class="since">3.1.0 and QEMU 2.9.0</span> this mode works the
s/3.1.0/Since 3.1.0/
+ way it was designed and it is indicated by the <code>fallback</code> + attribute set to <code>forbid</code> in the host-model CPU + definition advertised in <a href="formatdomaincaps.html#elementsCPU" + >domain capabilities XML</a>.
You may want to keep some simple text to describe what to do for releases prior to 3.1.0/2.9.0... e.g. "Without the proper support, it's recommended to use <code>custom</code> mode with just the CPU model from the host capabilities XML." Your call on this part - it's just me thinking of those who read this documentation that do not have 3.1.0 and 2.9.0...
<span class="since">Since 1.2.11</span> PowerISA allows processors to run VMs in binary compatibility mode supporting an older version of ISA. Libvirt on PowerPC architecture uses the @@ -1307,6 +1306,15 @@ a migration is attempted then the guest may hang or crash upon resuming execution on the destination host.</dd> </dl> + + Both <code>host-model</code> and <code>host-passthrough</code> modes + make sense when a domain can run directly on the host CPUs without
without what? ACK with a couple of tweaks John
+ (for example, domains with type <code>kvm</code>). The actual host CPU + is irrelevant for domains with emulated virtual CPUs (such as domains + with type <code>qemu</code>). However, for backward compatibility + <code>host-model</code> may be implemented even for domains running on + emulated CPUs in which case the best CPU the hypervisor is able to + emulate may be used rather then trying to mimic the host CPU model. </dd>
<dt><code>model</code></dt>

On Tue, Feb 21, 2017 at 09:25:28 -0500, John Ferlan wrote:
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 294d3c467..9e7f7804e 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -1272,16 +1272,15 @@ model even if the destination host contains more capable CPUs for the running instance of the guest; but shutting down and restarting the guest may present different hardware to the guest according to - the capabilities of the new host. <strong>Beware</strong>, due to the - way libvirt detects host CPU and due to the fact libvirt does not - talk to QEMU/KVM when creating the CPU model, CPU configuration - created using <code>host-model</code> may not work as expected. The - guest CPU may differ from the configuration and it may also confuse - guest OS by using a combination of CPU features and other parameters - (such as CPUID level) that don't work. Until these issues are fixed, - it's a good idea to avoid using <code>host-model</code> and use - <code>custom</code> mode with just the CPU model from host - capabilities XML. + the capabilities of the new host. Libvirt older than 3.1.0 or QEMU + older than 2.9.0 do not support detection of the host CPU model via
How about:
Prior to libvirt 3.1.0 and QEMU 2.9.0 detection of the host CPU model via QEMU is not supported. Thus the CPU...
Yeah, this is better.
+ QEMU and thus the CPU configuration created using + <code>host-model</code> may not work as expected. + <span class="since">3.1.0 and QEMU 2.9.0</span> this mode works the
s/3.1.0/Since 3.1.0/
Oops.
+ way it was designed and it is indicated by the <code>fallback</code> + attribute set to <code>forbid</code> in the host-model CPU + definition advertised in <a href="formatdomaincaps.html#elementsCPU" + >domain capabilities XML</a>.
You may want to keep some simple text to describe what to do for releases prior to 3.1.0/2.9.0... e.g. "Without the proper support, it's recommended to use <code>custom</code> mode with just the CPU model from the host capabilities XML."
Sure. Good idea.
Your call on this part - it's just me thinking of those who read this documentation that do not have 3.1.0 and 2.9.0...
<span class="since">Since 1.2.11</span> PowerISA allows processors to run VMs in binary compatibility mode supporting an older version of ISA. Libvirt on PowerPC architecture uses the @@ -1307,6 +1306,15 @@ a migration is attempted then the guest may hang or crash upon resuming execution on the destination host.</dd> </dl> + + Both <code>host-model</code> and <code>host-passthrough</code> modes + make sense when a domain can run directly on the host CPUs without
without what?
Without "without" :-) s/without// Jirka

The CPU model info formating code in virQEMUCapsFormatCache will get more complicated soon. Separating the code in virQEMUCapsFormatHostCPUModelInfo will make the result easier to read. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - no change src/qemu/qemu_capabilities.c | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index c511248bd..688d19504 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -3542,6 +3542,27 @@ virQEMUCapsLoadCache(virCapsPtr caps, static void +virQEMUCapsFormatHostCPUModelInfo(virQEMUCapsPtr qemuCaps, + virBufferPtr buf) +{ + qemuMonitorCPUModelInfoPtr model = qemuCaps->hostCPUModelInfo; + size_t i; + + virBufferAsprintf(buf, "<hostCPU model='%s'>\n", model->name); + virBufferAdjustIndent(buf, 2); + + for (i = 0; i < model->nprops; i++) { + virBufferAsprintf(buf, "<feature name='%s' supported='%s'/>\n", + model->props[i].name, + model->props[i].supported ? "yes" : "no"); + } + + virBufferAdjustIndent(buf, -2); + virBufferAddLit(buf, "</hostCPU>\n"); +} + + +static void virQEMUCapsFormatCPUModels(virQEMUCapsPtr qemuCaps, virBufferPtr buf, virDomainVirtType type) @@ -3617,19 +3638,8 @@ virQEMUCapsFormatCache(virQEMUCapsPtr qemuCaps, virBufferAsprintf(&buf, "<arch>%s</arch>\n", virArchToString(qemuCaps->arch)); - if (qemuCaps->hostCPUModelInfo) { - virBufferAsprintf(&buf, "<hostCPU model='%s'>\n", - qemuCaps->hostCPUModelInfo->name); - virBufferAdjustIndent(&buf, 2); - for (i = 0; i < qemuCaps->hostCPUModelInfo->nprops; i++) { - virBufferAsprintf(&buf, "<feature name='%s' supported='%s'/>\n", - qemuCaps->hostCPUModelInfo->props[i].name, - qemuCaps->hostCPUModelInfo->props[i].supported ? - "yes" : "no"); - } - virBufferAdjustIndent(&buf, -2); - virBufferAddLit(&buf, "</hostCPU>\n"); - } + if (qemuCaps->hostCPUModelInfo) + virQEMUCapsFormatHostCPUModelInfo(qemuCaps, &buf); virQEMUCapsFormatCPUModels(qemuCaps, &buf, VIR_DOMAIN_VIRT_KVM); virQEMUCapsFormatCPUModels(qemuCaps, &buf, VIR_DOMAIN_VIRT_QEMU); -- 2.11.1

On 02/15/2017 11:44 AM, Jiri Denemark wrote:
The CPU model info formating code in virQEMUCapsFormatCache will get more complicated soon. Separating the code in virQEMUCapsFormatHostCPUModelInfo will make the result easier to read.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
src/qemu/qemu_capabilities.c | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-)
ACK John

On Tue, Feb 21, 2017 at 09:25:38 -0500, John Ferlan wrote:
On 02/15/2017 11:44 AM, Jiri Denemark wrote:
The CPU model info formating code in virQEMUCapsFormatCache will get more complicated soon. Separating the code in virQEMUCapsFormatHostCPUModelInfo will make the result easier to read.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
src/qemu/qemu_capabilities.c | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-)
Thanks. I pushed it since it didn't have any dependencies on the other patches in this series. Jirka

The element will be generalized in the following commit. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - no change src/qemu/qemu_capabilities.c | 14 +- tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml | 30 +-- tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml | 322 +++++++++++------------ 3 files changed, 183 insertions(+), 183 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 688d19504..aab336954 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -3180,7 +3180,7 @@ virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, ctxt->node = hostCPUNode; - if ((n = virXPathNodeSet("./feature", ctxt, &featureNodes)) > 0) { + if ((n = virXPathNodeSet("./property", ctxt, &featureNodes)) > 0) { if (VIR_ALLOC_N(hostCPU->props, n) < 0) goto cleanup; @@ -3191,14 +3191,14 @@ virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, if (!hostCPU->props[i].name) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("missing 'name' attribute for a host CPU" - " model feature in QEMU capabilities cache")); + " model property in QEMU capabilities cache")); goto cleanup; } - if (!(str = virXMLPropString(featureNodes[i], "supported"))) { + if (!(str = virXMLPropString(featureNodes[i], "boolean"))) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("missing 'supported' attribute for a host CPU" - " model feature in QEMU capabilities cache")); + _("missing 'boolean' attribute for a host CPU" + " model property in QEMU capabilities cache")); goto cleanup; } if (STREQ(str, "yes")) { @@ -3207,7 +3207,7 @@ virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, hostCPU->props[i].supported = false; } else { virReportError(VIR_ERR_INTERNAL_ERROR, - _("invalid supported value: '%s'"), str); + _("invalid boolean value: '%s'"), str); goto cleanup; } VIR_FREE(str); @@ -3552,7 +3552,7 @@ virQEMUCapsFormatHostCPUModelInfo(virQEMUCapsPtr qemuCaps, virBufferAdjustIndent(buf, 2); for (i = 0; i < model->nprops; i++) { - virBufferAsprintf(buf, "<feature name='%s' supported='%s'/>\n", + virBufferAsprintf(buf, "<property name='%s' boolean='%s'/>\n", model->props[i].name, model->props[i].supported ? "yes" : "no"); } diff --git a/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml index c4c9bf9d5..1f652bdc2 100644 --- a/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml +++ b/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml @@ -134,21 +134,21 @@ <package></package> <arch>s390x</arch> <hostCPU model='zEC12.2-base'> - <feature name='aefsi' supported='yes'/> - <feature name='msa5' supported='yes'/> - <feature name='msa4' supported='yes'/> - <feature name='msa3' supported='yes'/> - <feature name='msa2' supported='yes'/> - <feature name='msa1' supported='yes'/> - <feature name='sthyi' supported='yes'/> - <feature name='edat' supported='yes'/> - <feature name='ri' supported='yes'/> - <feature name='edat2' supported='yes'/> - <feature name='ipter' supported='yes'/> - <feature name='esop' supported='yes'/> - <feature name='cte' supported='yes'/> - <feature name='te' supported='yes'/> - <feature name='cmm' supported='yes'/> + <property name='aefsi' boolean='yes'/> + <property name='msa5' boolean='yes'/> + <property name='msa4' boolean='yes'/> + <property name='msa3' boolean='yes'/> + <property name='msa2' boolean='yes'/> + <property name='msa1' boolean='yes'/> + <property name='sthyi' boolean='yes'/> + <property name='edat' boolean='yes'/> + <property name='ri' boolean='yes'/> + <property name='edat2' boolean='yes'/> + <property name='ipter' boolean='yes'/> + <property name='esop' boolean='yes'/> + <property name='cte' boolean='yes'/> + <property name='te' boolean='yes'/> + <property name='cmm' boolean='yes'/> </hostCPU> <cpu type='kvm' name='z10EC-base'/> <cpu type='kvm' name='z9EC-base'/> diff --git a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml index ab7906175..c13e8318f 100644 --- a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml @@ -206,167 +206,167 @@ <package> (v2.8.0-877-g38e4b757b4)</package> <arch>x86_64</arch> <hostCPU model='base'> - <feature name='cmov' supported='yes'/> - <feature name='ia64' supported='no'/> - <feature name='aes' supported='yes'/> - <feature name='mmx' supported='yes'/> - <feature name='rdpid' supported='no'/> - <feature name='arat' supported='yes'/> - <feature name='pause-filter' supported='no'/> - <feature name='xsavec' supported='yes'/> - <feature name='osxsave' supported='no'/> - <feature name='kvm-asyncpf' supported='yes'/> - <feature name='perfctr-core' supported='no'/> - <feature name='mpx' supported='yes'/> - <feature name='pbe' supported='no'/> - <feature name='avx512cd' supported='no'/> - <feature name='decodeassists' supported='no'/> - <feature name='sse4.1' supported='yes'/> - <feature name='avx512f' supported='no'/> - <feature name='msr' supported='yes'/> - <feature name='mce' supported='yes'/> - <feature name='mca' supported='yes'/> - <feature name='xcrypt' supported='no'/> - <feature name='xgetbv1' supported='yes'/> - <feature name='cid' supported='no'/> - <feature name='ds' supported='no'/> - <feature name='fxsr' supported='yes'/> - <feature name='xsaveopt' supported='yes'/> - <feature name='xtpr' supported='no'/> - <feature name='avx512vl' supported='no'/> - <feature name='avx512-vpopcntdq' supported='no'/> - <feature name='phe' supported='no'/> - <feature name='extapic' supported='no'/> - <feature name='3dnowprefetch' supported='yes'/> - <feature name='cr8legacy' supported='no'/> - <feature name='xcrypt-en' supported='no'/> - <feature name='pn' supported='no'/> - <feature name='dca' supported='no'/> - <feature name='pku' supported='no'/> - <feature name='smx' supported='no'/> - <feature name='cmp-legacy' supported='no'/> - <feature name='avx512-4fmaps' supported='no'/> - <feature name='vmcb-clean' supported='no'/> - <feature name='hle' supported='yes'/> - <feature name='3dnowext' supported='no'/> - <feature name='npt' supported='no'/> - <feature name='clwb' supported='no'/> - <feature name='lbrv' supported='no'/> - <feature name='adx' supported='yes'/> - <feature name='ss' supported='yes'/> - <feature name='pni' supported='yes'/> - <feature name='svm-lock' supported='no'/> - <feature name='smep' supported='yes'/> - <feature name='smap' supported='yes'/> - <feature name='pfthreshold' supported='no'/> - <feature name='x2apic' supported='yes'/> - <feature name='avx512vbmi' supported='no'/> - <feature name='flushbyasid' supported='no'/> - <feature name='f16c' supported='yes'/> - <feature name='ace2-en' supported='no'/> - <feature name='pae' supported='yes'/> - <feature name='pat' supported='yes'/> - <feature name='sse' supported='yes'/> - <feature name='phe-en' supported='no'/> - <feature name='kvm-nopiodelay' supported='yes'/> - <feature name='tm' supported='no'/> - <feature name='kvmclock-stable-bit' supported='yes'/> - <feature name='hypervisor' supported='yes'/> - <feature name='pcommit' supported='no'/> - <feature name='syscall' supported='yes'/> - <feature name='avx512dq' supported='no'/> - <feature name='svm' supported='no'/> - <feature name='invtsc' supported='no'/> - <feature name='sse2' supported='yes'/> - <feature name='est' supported='no'/> - <feature name='avx512ifma' supported='no'/> - <feature name='tm2' supported='no'/> - <feature name='kvm-pv-eoi' supported='yes'/> - <feature name='cx8' supported='yes'/> - <feature name='kvm-mmu' supported='no'/> - <feature name='sse4.2' supported='yes'/> - <feature name='pge' supported='yes'/> - <feature name='pdcm' supported='no'/> - <feature name='movbe' supported='yes'/> - <feature name='nrip-save' supported='no'/> - <feature name='ssse3' supported='yes'/> - <feature name='sse4a' supported='no'/> - <feature name='invpcid' supported='yes'/> - <feature name='pdpe1gb' supported='yes'/> - <feature name='tsc-deadline' supported='yes'/> - <feature name='fma' supported='yes'/> - <feature name='cx16' supported='yes'/> - <feature name='de' supported='yes'/> - <feature name='xsave' supported='yes'/> - <feature name='clflush' supported='yes'/> - <feature name='skinit' supported='no'/> - <feature name='tsc' supported='yes'/> - <feature name='tce' supported='no'/> - <feature name='fpu' supported='yes'/> - <feature name='ds-cpl' supported='no'/> - <feature name='ibs' supported='no'/> - <feature name='fma4' supported='no'/> - <feature name='la57' supported='no'/> - <feature name='osvw' supported='no'/> - <feature name='apic' supported='yes'/> - <feature name='pmm' supported='no'/> - <feature name='tsc-adjust' supported='yes'/> - <feature name='kvm-steal-time' supported='yes'/> - <feature name='kvmclock' supported='yes'/> - <feature name='lwp' supported='no'/> - <feature name='xop' supported='no'/> - <feature name='avx' supported='yes'/> - <feature name='ospke' supported='no'/> - <feature name='acpi' supported='no'/> - <feature name='avx512bw' supported='no'/> - <feature name='ace2' supported='no'/> - <feature name='fsgsbase' supported='yes'/> - <feature name='ht' supported='no'/> - <feature name='nx' supported='yes'/> - <feature name='pclmulqdq' supported='yes'/> - <feature name='mmxext' supported='no'/> - <feature name='popcnt' supported='yes'/> - <feature name='xsaves' supported='yes'/> - <feature name='lm' supported='yes'/> - <feature name='umip' supported='no'/> - <feature name='pse' supported='yes'/> - <feature name='avx2' supported='yes'/> - <feature name='sep' supported='yes'/> - <feature name='nodeid-msr' supported='no'/> - <feature name='misalignsse' supported='no'/> - <feature name='bmi1' supported='yes'/> - <feature name='bmi2' supported='yes'/> - <feature name='kvm-pv-unhalt' supported='yes'/> - <feature name='tsc-scale' supported='no'/> - <feature name='topoext' supported='no'/> - <feature name='clflushopt' supported='yes'/> - <feature name='monitor' supported='no'/> - <feature name='avx512er' supported='no'/> - <feature name='pmm-en' supported='no'/> - <feature name='pcid' supported='yes'/> - <feature name='3dnow' supported='no'/> - <feature name='erms' supported='yes'/> - <feature name='lahf-lm' supported='yes'/> - <feature name='fxsr-opt' supported='no'/> - <feature name='xstore' supported='no'/> - <feature name='rtm' supported='yes'/> - <feature name='lmce' supported='yes'/> - <feature name='perfctr-nb' supported='no'/> - <feature name='rdrand' supported='yes'/> - <feature name='rdseed' supported='yes'/> - <feature name='avx512-4vnniw' supported='no'/> - <feature name='vme' supported='yes'/> - <feature name='vmx' supported='yes'/> - <feature name='dtes64' supported='no'/> - <feature name='mtrr' supported='yes'/> - <feature name='rdtscp' supported='yes'/> - <feature name='pse36' supported='yes'/> - <feature name='tbm' supported='no'/> - <feature name='wdt' supported='no'/> - <feature name='sha-ni' supported='no'/> - <feature name='abm' supported='yes'/> - <feature name='avx512pf' supported='no'/> - <feature name='xstore-en' supported='no'/> + <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='pause-filter' boolean='no'/> + <property name='xsavec' boolean='yes'/> + <property name='osxsave' boolean='no'/> + <property name='kvm-asyncpf' boolean='yes'/> + <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='sse4.1' boolean='yes'/> + <property name='avx512f' boolean='no'/> + <property name='msr' boolean='yes'/> + <property name='mce' boolean='yes'/> + <property name='mca' boolean='yes'/> + <property name='xcrypt' boolean='no'/> + <property name='xgetbv1' boolean='yes'/> + <property name='cid' boolean='no'/> + <property name='ds' boolean='no'/> + <property name='fxsr' boolean='yes'/> + <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='extapic' boolean='no'/> + <property name='3dnowprefetch' boolean='yes'/> + <property name='cr8legacy' boolean='no'/> + <property name='xcrypt-en' boolean='no'/> + <property name='pn' boolean='no'/> + <property name='dca' boolean='no'/> + <property name='pku' boolean='no'/> + <property name='smx' 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='3dnowext' boolean='no'/> + <property name='npt' boolean='no'/> + <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='smep' boolean='yes'/> + <property name='smap' boolean='yes'/> + <property name='pfthreshold' boolean='no'/> + <property name='x2apic' boolean='yes'/> + <property name='avx512vbmi' boolean='no'/> + <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='sse' boolean='yes'/> + <property name='phe-en' boolean='no'/> + <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='pcommit' boolean='no'/> + <property name='syscall' boolean='yes'/> + <property name='avx512dq' boolean='no'/> + <property name='svm' boolean='no'/> + <property name='invtsc' boolean='no'/> + <property name='sse2' boolean='yes'/> + <property name='est' boolean='no'/> + <property name='avx512ifma' boolean='no'/> + <property name='tm2' boolean='no'/> + <property name='kvm-pv-eoi' boolean='yes'/> + <property name='cx8' boolean='yes'/> + <property name='kvm-mmu' boolean='no'/> + <property name='sse4.2' boolean='yes'/> + <property name='pge' boolean='yes'/> + <property name='pdcm' boolean='no'/> + <property name='movbe' boolean='yes'/> + <property name='nrip-save' boolean='no'/> + <property name='ssse3' boolean='yes'/> + <property name='sse4a' boolean='no'/> + <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='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='fpu' boolean='yes'/> + <property name='ds-cpl' boolean='no'/> + <property name='ibs' boolean='no'/> + <property name='fma4' boolean='no'/> + <property name='la57' boolean='no'/> + <property name='osvw' boolean='no'/> + <property name='apic' boolean='yes'/> + <property name='pmm' boolean='no'/> + <property name='tsc-adjust' boolean='yes'/> + <property name='kvm-steal-time' boolean='yes'/> + <property name='kvmclock' boolean='yes'/> + <property name='lwp' boolean='no'/> + <property name='xop' boolean='no'/> + <property name='avx' boolean='yes'/> + <property name='ospke' boolean='no'/> + <property name='acpi' boolean='no'/> + <property name='avx512bw' boolean='no'/> + <property name='ace2' boolean='no'/> + <property name='fsgsbase' boolean='yes'/> + <property name='ht' boolean='no'/> + <property name='nx' boolean='yes'/> + <property name='pclmulqdq' boolean='yes'/> + <property name='mmxext' boolean='no'/> + <property name='popcnt' boolean='yes'/> + <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='sep' boolean='yes'/> + <property name='nodeid-msr' boolean='no'/> + <property name='misalignsse' boolean='no'/> + <property name='bmi1' boolean='yes'/> + <property name='bmi2' boolean='yes'/> + <property name='kvm-pv-unhalt' boolean='yes'/> + <property name='tsc-scale' boolean='no'/> + <property name='topoext' boolean='no'/> + <property name='clflushopt' boolean='yes'/> + <property name='monitor' boolean='no'/> + <property name='avx512er' boolean='no'/> + <property name='pmm-en' boolean='no'/> + <property name='pcid' boolean='yes'/> + <property name='3dnow' boolean='no'/> + <property name='erms' boolean='yes'/> + <property name='lahf-lm' boolean='yes'/> + <property name='fxsr-opt' boolean='no'/> + <property name='xstore' boolean='no'/> + <property name='rtm' boolean='yes'/> + <property name='lmce' boolean='yes'/> + <property name='perfctr-nb' boolean='no'/> + <property name='rdrand' boolean='yes'/> + <property name='rdseed' boolean='yes'/> + <property name='avx512-4vnniw' boolean='no'/> + <property name='vme' boolean='yes'/> + <property name='vmx' boolean='yes'/> + <property name='dtes64' boolean='no'/> + <property name='mtrr' boolean='yes'/> + <property name='rdtscp' boolean='yes'/> + <property name='pse36' boolean='yes'/> + <property name='tbm' boolean='no'/> + <property name='wdt' boolean='no'/> + <property name='sha-ni' boolean='no'/> + <property name='abm' boolean='yes'/> + <property name='avx512pf' boolean='no'/> + <property name='xstore-en' boolean='no'/> </hostCPU> <cpu type='kvm' name='max' usable='yes'/> <cpu type='kvm' name='host' usable='yes'/> -- 2.11.1

On 02/15/2017 11:44 AM, Jiri Denemark wrote:
The element will be generalized in the following commit.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
src/qemu/qemu_capabilities.c | 14 +- tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml | 30 +-- tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml | 322 +++++++++++------------ 3 files changed, 183 insertions(+), 183 deletions(-)
This is essentially assuming the capabilities cache is being re-created and not re-read... Hopefully that works correctly... It was the change of an element name without some sort of pseudonym added or failure returned if "feature" was found. I didn't check callers - but if something here failed would it *ensure* that the capabilities cache was re-created?
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 688d19504..aab336954 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -3180,7 +3180,7 @@ virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps,
ctxt->node = hostCPUNode;
- if ((n = virXPathNodeSet("./feature", ctxt, &featureNodes)) > 0) { + if ((n = virXPathNodeSet("./property", ctxt, &featureNodes)) > 0) {
featureNodes should be renamed to propertyNodes too...
if (VIR_ALLOC_N(hostCPU->props, n) < 0) goto cleanup;
@@ -3191,14 +3191,14 @@ virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, if (!hostCPU->props[i].name) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("missing 'name' attribute for a host CPU" - " model feature in QEMU capabilities cache")); + " model property in QEMU capabilities cache")); goto cleanup; }
- if (!(str = virXMLPropString(featureNodes[i], "supported"))) { + if (!(str = virXMLPropString(featureNodes[i], "boolean"))) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("missing 'supported' attribute for a host CPU" - " model feature in QEMU capabilities cache")); + _("missing 'boolean' attribute for a host CPU" + " model property in QEMU capabilities cache")); goto cleanup; } if (STREQ(str, "yes")) { @@ -3207,7 +3207,7 @@ virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, hostCPU->props[i].supported = false; } else { virReportError(VIR_ERR_INTERNAL_ERROR, - _("invalid supported value: '%s'"), str); + _("invalid boolean value: '%s'"), str);
boolean's are typically true/false - so if "boolean='no'", then does that mean it's something else ;-) I'm not sure boolean is the best name, but I see from the next patch it's used because of the "type" being read from monitor/json. Perhaps rather than "boolean" go with "value"... That way when you implement more types in the next patch you get: property name='%s' value='yes|no' property name='%s' type='string' value='%s' property name='%s' type='ull' value=%ull If "type" isn't found, then value is assumed to be a boolean... In the following patch qemuMonitorCPUPropertyType alters BOOLEAN to DEFAULT. Not a fan of 'ull' either - I think it should just be 'number' and the implementation details is that the number is a ULL. John
goto cleanup; } VIR_FREE(str); @@ -3552,7 +3552,7 @@ virQEMUCapsFormatHostCPUModelInfo(virQEMUCapsPtr qemuCaps, virBufferAdjustIndent(buf, 2);
for (i = 0; i < model->nprops; i++) { - virBufferAsprintf(buf, "<feature name='%s' supported='%s'/>\n", + virBufferAsprintf(buf, "<property name='%s' boolean='%s'/>\n", model->props[i].name, model->props[i].supported ? "yes" : "no"); }
naturally adjustments here... [...]

On Tue, Feb 21, 2017 at 09:27:17 -0500, John Ferlan wrote:
On 02/15/2017 11:44 AM, Jiri Denemark wrote:
The element will be generalized in the following commit.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
src/qemu/qemu_capabilities.c | 14 +- tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml | 30 +-- tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml | 322 +++++++++++------------ 3 files changed, 183 insertions(+), 183 deletions(-)
This is essentially assuming the capabilities cache is being re-created and not re-read... Hopefully that works correctly... It was the change of an element name without some sort of pseudonym added or failure returned if "feature" was found. I didn't check callers - but if something here failed would it *ensure* that the capabilities cache was re-created?
Well, libvirt doesn't use cached capabilities generated by older libvirt as they are considered invalid whenever libvirtd's ctime changes. We don't need to worry about compatibility here. And yes, if parsing the XML fails, the cache is re-created.
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 688d19504..aab336954 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -3180,7 +3180,7 @@ virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps,
ctxt->node = hostCPUNode;
- if ((n = virXPathNodeSet("./feature", ctxt, &featureNodes)) > 0) { + if ((n = virXPathNodeSet("./property", ctxt, &featureNodes)) > 0) {
featureNodes should be renamed to propertyNodes too...
or to just "nodes".
if (VIR_ALLOC_N(hostCPU->props, n) < 0) goto cleanup;
@@ -3191,14 +3191,14 @@ virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, if (!hostCPU->props[i].name) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("missing 'name' attribute for a host CPU" - " model feature in QEMU capabilities cache")); + " model property in QEMU capabilities cache")); goto cleanup; }
- if (!(str = virXMLPropString(featureNodes[i], "supported"))) { + if (!(str = virXMLPropString(featureNodes[i], "boolean"))) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("missing 'supported' attribute for a host CPU" - " model feature in QEMU capabilities cache")); + _("missing 'boolean' attribute for a host CPU" + " model property in QEMU capabilities cache")); goto cleanup; } if (STREQ(str, "yes")) { @@ -3207,7 +3207,7 @@ virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, hostCPU->props[i].supported = false; } else { virReportError(VIR_ERR_INTERNAL_ERROR, - _("invalid supported value: '%s'"), str); + _("invalid boolean value: '%s'"), str);
boolean's are typically true/false - so if "boolean='no'", then does that mean it's something else ;-)
Hmm, the s/supported/boolean/ change should not even be part of this patch.
I'm not sure boolean is the best name, but I see from the next patch it's used because of the "type" being read from monitor/json.
Perhaps rather than "boolean" go with "value"... That way when you implement more types in the next patch you get:
property name='%s' value='yes|no'
There's no need to support missing type attribute, though.
property name='%s' type='string' value='%s' property name='%s' type='ull' value=%ull
I was thinking about going this route but I chose the other one. But I agree this looks cleaner so I'll rework the following patch.
Not a fan of 'ull' either - I think it should just be 'number' and the implementation details is that the number is a ULL.
The whole capabilities XML is an implementation detail :-) Anyway, "ull" is an important detail since we need to know how to parse the number. But since "ull" is the only type we currently support I agree with renaming the type to number. We can always change it if we need more types of numbers. Jirka

While query-cpu-model-expansion returns only boolean features on s390, but x86_64 reports some integer and string properties which we are interested in. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - no change src/qemu/qemu_capabilities.c | 84 ++++++++++++++++-------- src/qemu/qemu_monitor.c | 22 ++++++- src/qemu/qemu_monitor.h | 23 +++++-- src/qemu/qemu_monitor_json.c | 37 ++++++++--- tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml | 7 ++ 5 files changed, 133 insertions(+), 40 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index aab336954..466852d13 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -3074,14 +3074,16 @@ virQEMUCapsInitCPUModelS390(virQEMUCapsPtr qemuCaps, cpu->nfeatures = 0; for (i = 0; i < modelInfo->nprops; i++) { - if (VIR_STRDUP(cpu->features[i].name, modelInfo->props[i].name) < 0) + virCPUFeatureDefPtr feature = cpu->features + cpu->nfeatures; + qemuMonitorCPUPropertyPtr prop = modelInfo->props + i; + + if (prop->type != QEMU_MONITOR_CPU_PROPERTY_BOOLEAN) + continue; + + if (VIR_STRDUP(feature->name, prop->name) < 0) return -1; - - if (modelInfo->props[i].supported) - cpu->features[i].policy = VIR_CPU_FEATURE_REQUIRE; - else - cpu->features[i].policy = VIR_CPU_FEATURE_DISABLE; - + feature->policy = prop->value.boolean ? VIR_CPU_FEATURE_REQUIRE + : VIR_CPU_FEATURE_DISABLE; cpu->nfeatures++; } @@ -3154,7 +3156,6 @@ static int virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, xmlXPathContextPtr ctxt) { - char *str = NULL; xmlNodePtr hostCPUNode; xmlNodePtr *featureNodes = NULL; xmlNodePtr oldnode = ctxt->node; @@ -3187,30 +3188,47 @@ virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, hostCPU->nprops = n; for (i = 0; i < n; i++) { - hostCPU->props[i].name = virXMLPropString(featureNodes[i], "name"); - if (!hostCPU->props[i].name) { + qemuMonitorCPUPropertyPtr prop = hostCPU->props + i; + ctxt->node = featureNodes[i]; + + if (!(prop->name = virXMLPropString(ctxt->node, "name"))) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("missing 'name' attribute for a host CPU" " model property in QEMU capabilities cache")); goto cleanup; } - if (!(str = virXMLPropString(featureNodes[i], "boolean"))) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("missing 'boolean' attribute for a host CPU" - " model property in QEMU capabilities cache")); - goto cleanup; - } - if (STREQ(str, "yes")) { - hostCPU->props[i].supported = true; - } else if (STREQ(str, "no")) { - hostCPU->props[i].supported = false; + if (virXPathBoolean("boolean(./@boolean)", ctxt)) { + if (virXPathBoolean("./@boolean='yes'", ctxt)) + prop->value.boolean = true; + prop->type = QEMU_MONITOR_CPU_PROPERTY_BOOLEAN; + } else if (virXPathBoolean("boolean(./@string)", ctxt)) { + prop->value.string = virXMLPropString(ctxt->node, "string"); + if (!prop->value.string) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("invalid string value for '%s' host CPU " + "model property in QEMU capabilities cache"), + prop->name); + goto cleanup; + } + prop->type = QEMU_MONITOR_CPU_PROPERTY_STRING; + } else if (virXPathBoolean("boolean(./@ull)", ctxt)) { + if (virXPathULongLong("string(./@ull)", ctxt, + &prop->value.ull) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("invalid integer value for '%s' host CPU " + "model property in QEMU capabilities cache"), + prop->name); + goto cleanup; + } + prop->type = QEMU_MONITOR_CPU_PROPERTY_ULL; } else { virReportError(VIR_ERR_INTERNAL_ERROR, - _("invalid boolean value: '%s'"), str); + _("missing value for '%s' host CPU model " + "property in QEMU capabilities cache"), + prop->name); goto cleanup; } - VIR_FREE(str); } } @@ -3220,7 +3238,6 @@ virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, cleanup: ctxt->node = oldnode; - VIR_FREE(str); VIR_FREE(featureNodes); qemuMonitorCPUModelInfoFree(hostCPU); return ret; @@ -3552,9 +3569,24 @@ virQEMUCapsFormatHostCPUModelInfo(virQEMUCapsPtr qemuCaps, virBufferAdjustIndent(buf, 2); for (i = 0; i < model->nprops; i++) { - virBufferAsprintf(buf, "<property name='%s' boolean='%s'/>\n", - model->props[i].name, - model->props[i].supported ? "yes" : "no"); + qemuMonitorCPUPropertyPtr prop = model->props + i; + + switch (prop->type) { + case QEMU_MONITOR_CPU_PROPERTY_BOOLEAN: + virBufferAsprintf(buf, "<property name='%s' boolean='%s'/>\n", + prop->name, prop->value.boolean ? "yes" : "no"); + break; + + case QEMU_MONITOR_CPU_PROPERTY_STRING: + virBufferAsprintf(buf, "<property name='%s' ", prop->name); + virBufferEscapeString(buf, "string='%s'/>\n", prop->value.string); + break; + + case QEMU_MONITOR_CPU_PROPERTY_ULL: + virBufferAsprintf(buf, "<property name='%s' ull='%llu'/>\n", + prop->name, prop->value.ull); + break; + } } virBufferAdjustIndent(buf, -2); diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index b15207a69..a434b234b 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -3661,8 +3661,11 @@ qemuMonitorCPUModelInfoFree(qemuMonitorCPUModelInfoPtr model_info) if (!model_info) return; - for (i = 0; i < model_info->nprops; i++) + for (i = 0; i < model_info->nprops; i++) { VIR_FREE(model_info->props[i].name); + if (model_info->props[i].type == QEMU_MONITOR_CPU_PROPERTY_STRING) + VIR_FREE(model_info->props[i].value.string); + } VIR_FREE(model_info->props); VIR_FREE(model_info->name); @@ -3691,7 +3694,22 @@ qemuMonitorCPUModelInfoCopy(const qemuMonitorCPUModelInfo *orig) if (VIR_STRDUP(copy->props[i].name, orig->props[i].name) < 0) goto error; - copy->props[i].supported = orig->props[i].supported; + copy->props[i].type = orig->props[i].type; + switch (orig->props[i].type) { + case QEMU_MONITOR_CPU_PROPERTY_BOOLEAN: + copy->props[i].value.boolean = orig->props[i].value.boolean; + break; + + case QEMU_MONITOR_CPU_PROPERTY_STRING: + if (VIR_STRDUP(copy->props[i].value.string, + orig->props[i].value.string) < 0) + goto error; + break; + + case QEMU_MONITOR_CPU_PROPERTY_ULL: + copy->props[i].value.ull = orig->props[i].value.ull; + break; + } } return copy; diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 8811d8501..112f041f1 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -921,16 +921,31 @@ int qemuMonitorGetCPUDefinitions(qemuMonitorPtr mon, qemuMonitorCPUDefInfoPtr **cpus); void qemuMonitorCPUDefInfoFree(qemuMonitorCPUDefInfoPtr cpu); +typedef enum { + QEMU_MONITOR_CPU_PROPERTY_BOOLEAN, + QEMU_MONITOR_CPU_PROPERTY_STRING, + QEMU_MONITOR_CPU_PROPERTY_ULL, +} qemuMonitorCPUPropertyType; + +typedef struct _qemuMonitorCPUProperty qemuMonitorCPUProperty; +typedef qemuMonitorCPUProperty *qemuMonitorCPUPropertyPtr; +struct _qemuMonitorCPUProperty { + char *name; + qemuMonitorCPUPropertyType type; + union { + bool boolean; + char *string; + unsigned long long ull; + } value; +}; + typedef struct _qemuMonitorCPUModelInfo qemuMonitorCPUModelInfo; typedef qemuMonitorCPUModelInfo *qemuMonitorCPUModelInfoPtr; struct _qemuMonitorCPUModelInfo { char *name; size_t nprops; - struct { - char *name; - bool supported; - } *props; + qemuMonitorCPUPropertyPtr props; }; int qemuMonitorGetCPUModelExpansion(qemuMonitorPtr mon, diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 1d281af48..415761525 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -4983,18 +4983,39 @@ qemuMonitorJSONParseCPUModelProperty(const char *key, void *opaque) { qemuMonitorCPUModelInfoPtr machine_model = opaque; - size_t n = machine_model->nprops; - bool supported; + qemuMonitorCPUPropertyPtr prop; - if (virJSONValueGetBoolean(value, &supported) < 0) + prop = machine_model->props + machine_model->nprops; + + switch ((virJSONType) value->type) { + case VIR_JSON_TYPE_STRING: + if (VIR_STRDUP(prop->value.string, virJSONValueGetString(value)) < 0) + return -1; + prop->type = QEMU_MONITOR_CPU_PROPERTY_STRING; + break; + + case VIR_JSON_TYPE_NUMBER: + /* Ignore numbers which cannot be parsed as unsigned long long */ + if (virJSONValueGetNumberUlong(value, &prop->value.ull) < 0) + return 0; + prop->type = QEMU_MONITOR_CPU_PROPERTY_ULL; + break; + + case VIR_JSON_TYPE_BOOLEAN: + virJSONValueGetBoolean(value, &prop->value.boolean); + prop->type = QEMU_MONITOR_CPU_PROPERTY_BOOLEAN; + break; + + case VIR_JSON_TYPE_OBJECT: + case VIR_JSON_TYPE_ARRAY: + case VIR_JSON_TYPE_NULL: return 0; - - if (VIR_STRDUP(machine_model->props[n].name, key) < 0) - return -1; - - machine_model->props[n].supported = supported; + } machine_model->nprops++; + if (VIR_STRDUP(prop->name, key) < 0) + return -1; + return 0; } diff --git a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml index c13e8318f..32368e648 100644 --- a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml @@ -222,11 +222,13 @@ <property name='avx512cd' boolean='no'/> <property name='decodeassists' boolean='no'/> <property name='sse4.1' boolean='yes'/> + <property name='family' ull='6'/> <property name='avx512f' boolean='no'/> <property name='msr' boolean='yes'/> <property name='mce' boolean='yes'/> <property name='mca' boolean='yes'/> <property name='xcrypt' boolean='no'/> + <property name='min-level' ull='13'/> <property name='xgetbv1' boolean='yes'/> <property name='cid' boolean='no'/> <property name='ds' boolean='no'/> @@ -242,6 +244,7 @@ <property name='xcrypt-en' boolean='no'/> <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'/> @@ -287,6 +290,7 @@ <property name='sse4.2' boolean='yes'/> <property name='pge' boolean='yes'/> <property name='pdcm' boolean='no'/> + <property name='model' ull='94'/> <property name='movbe' boolean='yes'/> <property name='nrip-save' boolean='no'/> <property name='ssse3' boolean='yes'/> @@ -297,6 +301,7 @@ <property name='fma' boolean='yes'/> <property name='cx16' boolean='yes'/> <property name='de' boolean='yes'/> + <property name='stepping' ull='3'/> <property name='xsave' boolean='yes'/> <property name='clflush' boolean='yes'/> <property name='skinit' boolean='no'/> @@ -334,6 +339,7 @@ <property name='sep' boolean='yes'/> <property name='nodeid-msr' boolean='no'/> <property name='misalignsse' boolean='no'/> + <property name='min-xlevel' ull='2147483656'/> <property name='bmi1' boolean='yes'/> <property name='bmi2' boolean='yes'/> <property name='kvm-pv-unhalt' boolean='yes'/> @@ -363,6 +369,7 @@ <property name='pse36' boolean='yes'/> <property name='tbm' boolean='no'/> <property name='wdt' 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'/> <property name='avx512pf' boolean='no'/> -- 2.11.1

On 02/15/2017 11:44 AM, Jiri Denemark wrote:
While query-cpu-model-expansion returns only boolean features on s390, but x86_64 reports some integer and string properties which we are interested in.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
src/qemu/qemu_capabilities.c | 84 ++++++++++++++++-------- src/qemu/qemu_monitor.c | 22 ++++++- src/qemu/qemu_monitor.h | 23 +++++-- src/qemu/qemu_monitor_json.c | 37 ++++++++--- tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml | 7 ++ 5 files changed, 133 insertions(+), 40 deletions(-)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index aab336954..466852d13 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -3074,14 +3074,16 @@ virQEMUCapsInitCPUModelS390(virQEMUCapsPtr qemuCaps, cpu->nfeatures = 0;
for (i = 0; i < modelInfo->nprops; i++) { - if (VIR_STRDUP(cpu->features[i].name, modelInfo->props[i].name) < 0) + virCPUFeatureDefPtr feature = cpu->features + cpu->nfeatures; + qemuMonitorCPUPropertyPtr prop = modelInfo->props + i; + + if (prop->type != QEMU_MONITOR_CPU_PROPERTY_BOOLEAN) + continue;
So s390 only supports "boolean" or "default" types?
+ + if (VIR_STRDUP(feature->name, prop->name) < 0) return -1; - - if (modelInfo->props[i].supported) - cpu->features[i].policy = VIR_CPU_FEATURE_REQUIRE; - else - cpu->features[i].policy = VIR_CPU_FEATURE_DISABLE; - + feature->policy = prop->value.boolean ? VIR_CPU_FEATURE_REQUIRE + : VIR_CPU_FEATURE_DISABLE; cpu->nfeatures++; }
@@ -3154,7 +3156,6 @@ static int virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, xmlXPathContextPtr ctxt) { - char *str = NULL; xmlNodePtr hostCPUNode; xmlNodePtr *featureNodes = NULL; xmlNodePtr oldnode = ctxt->node; @@ -3187,30 +3188,47 @@ virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, hostCPU->nprops = n;
for (i = 0; i < n; i++) { - hostCPU->props[i].name = virXMLPropString(featureNodes[i], "name"); - if (!hostCPU->props[i].name) { + qemuMonitorCPUPropertyPtr prop = hostCPU->props + i; + ctxt->node = featureNodes[i]; + + if (!(prop->name = virXMLPropString(ctxt->node, "name"))) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("missing 'name' attribute for a host CPU" " model property in QEMU capabilities cache")); goto cleanup; }
If you follow the suggestion I have in the previous patch, then if you don't find the property named "type", then you know the 'value' is either "yes" or "no" If there is a type then the "value" property is either "string" or "number"
- if (!(str = virXMLPropString(featureNodes[i], "boolean"))) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("missing 'boolean' attribute for a host CPU" - " model property in QEMU capabilities cache")); - goto cleanup; - } - if (STREQ(str, "yes")) { - hostCPU->props[i].supported = true; - } else if (STREQ(str, "no")) { - hostCPU->props[i].supported = false; + if (virXPathBoolean("boolean(./@boolean)", ctxt)) { + if (virXPathBoolean("./@boolean='yes'", ctxt)) + prop->value.boolean = true; + prop->type = QEMU_MONITOR_CPU_PROPERTY_BOOLEAN; + } else if (virXPathBoolean("boolean(./@string)", ctxt)) { + prop->value.string = virXMLPropString(ctxt->node, "string"); + if (!prop->value.string) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("invalid string value for '%s' host CPU " + "model property in QEMU capabilities cache"), + prop->name); + goto cleanup; + } + prop->type = QEMU_MONITOR_CPU_PROPERTY_STRING; + } else if (virXPathBoolean("boolean(./@ull)", ctxt)) {
ull is just an implementation detail. I think it should be number
+ if (virXPathULongLong("string(./@ull)", ctxt, + &prop->value.ull) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("invalid integer value for '%s' host CPU "
in this context 'integer' isn't necessarily correct since the desire is an unsigned long long
+ "model property in QEMU capabilities cache"), + prop->name); + goto cleanup; + } + prop->type = QEMU_MONITOR_CPU_PROPERTY_ULL;
} else { virReportError(VIR_ERR_INTERNAL_ERROR, - _("invalid boolean value: '%s'"), str); + _("missing value for '%s' host CPU model " + "property in QEMU capabilities cache"), + prop->name);
One would think that if you use 'type=%s', then this would be simplified to be if the "value" property doesn't exist, then you have a failure. What that value property eventually gets "read" as matters only for what the 'type' is (or the default of boolean)
goto cleanup; } - VIR_FREE(str); } }
@@ -3220,7 +3238,6 @@ virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps,
cleanup: ctxt->node = oldnode; - VIR_FREE(str); VIR_FREE(featureNodes); qemuMonitorCPUModelInfoFree(hostCPU); return ret; @@ -3552,9 +3569,24 @@ virQEMUCapsFormatHostCPUModelInfo(virQEMUCapsPtr qemuCaps, virBufferAdjustIndent(buf, 2);
for (i = 0; i < model->nprops; i++) { - virBufferAsprintf(buf, "<property name='%s' boolean='%s'/>\n", - model->props[i].name, - model->props[i].supported ? "yes" : "no"); + qemuMonitorCPUPropertyPtr prop = model->props + i; + + switch (prop->type) { + case QEMU_MONITOR_CPU_PROPERTY_BOOLEAN: + virBufferAsprintf(buf, "<property name='%s' boolean='%s'/>\n", + prop->name, prop->value.boolean ? "yes" : "no"); + break; + + case QEMU_MONITOR_CPU_PROPERTY_STRING: + virBufferAsprintf(buf, "<property name='%s' ", prop->name); + virBufferEscapeString(buf, "string='%s'/>\n", prop->value.string); + break; + + case QEMU_MONITOR_CPU_PROPERTY_ULL: + virBufferAsprintf(buf, "<property name='%s' ull='%llu'/>\n", + prop->name, prop->value.ull); + break; + }
obviously easy adjustments here especially if there's a VIR_ENUM_IMPL for qemuMonitorCPUPropertyType that only writes out the "type" if 'string' or 'number'
}
virBufferAdjustIndent(buf, -2); diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index b15207a69..a434b234b 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -3661,8 +3661,11 @@ qemuMonitorCPUModelInfoFree(qemuMonitorCPUModelInfoPtr model_info) if (!model_info) return;
- for (i = 0; i < model_info->nprops; i++) + for (i = 0; i < model_info->nprops; i++) { VIR_FREE(model_info->props[i].name); + if (model_info->props[i].type == QEMU_MONITOR_CPU_PROPERTY_STRING) + VIR_FREE(model_info->props[i].value.string); + }
VIR_FREE(model_info->props); VIR_FREE(model_info->name); @@ -3691,7 +3694,22 @@ qemuMonitorCPUModelInfoCopy(const qemuMonitorCPUModelInfo *orig) if (VIR_STRDUP(copy->props[i].name, orig->props[i].name) < 0) goto error;
- copy->props[i].supported = orig->props[i].supported; + copy->props[i].type = orig->props[i].type; + switch (orig->props[i].type) { + case QEMU_MONITOR_CPU_PROPERTY_BOOLEAN: + copy->props[i].value.boolean = orig->props[i].value.boolean; + break; + + case QEMU_MONITOR_CPU_PROPERTY_STRING: + if (VIR_STRDUP(copy->props[i].value.string, + orig->props[i].value.string) < 0) + goto error; + break; + + case QEMU_MONITOR_CPU_PROPERTY_ULL: + copy->props[i].value.ull = orig->props[i].value.ull; + break; + } }
return copy; diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 8811d8501..112f041f1 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -921,16 +921,31 @@ int qemuMonitorGetCPUDefinitions(qemuMonitorPtr mon, qemuMonitorCPUDefInfoPtr **cpus); void qemuMonitorCPUDefInfoFree(qemuMonitorCPUDefInfoPtr cpu);
+typedef enum { + QEMU_MONITOR_CPU_PROPERTY_BOOLEAN,
As stated in previous patch, I think should should be "DEFAULT"
+ QEMU_MONITOR_CPU_PROPERTY_STRING, + QEMU_MONITOR_CPU_PROPERTY_ULL,
likewise, "NUMBER" not "ULL" John
+} qemuMonitorCPUPropertyType; + +typedef struct _qemuMonitorCPUProperty qemuMonitorCPUProperty; +typedef qemuMonitorCPUProperty *qemuMonitorCPUPropertyPtr; +struct _qemuMonitorCPUProperty { + char *name; + qemuMonitorCPUPropertyType type; + union { + bool boolean; + char *string; + unsigned long long ull; + } value; +}; + typedef struct _qemuMonitorCPUModelInfo qemuMonitorCPUModelInfo; typedef qemuMonitorCPUModelInfo *qemuMonitorCPUModelInfoPtr;
struct _qemuMonitorCPUModelInfo { char *name; size_t nprops; - struct { - char *name; - bool supported; - } *props; + qemuMonitorCPUPropertyPtr props; };
int qemuMonitorGetCPUModelExpansion(qemuMonitorPtr mon, diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 1d281af48..415761525 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -4983,18 +4983,39 @@ qemuMonitorJSONParseCPUModelProperty(const char *key, void *opaque) { qemuMonitorCPUModelInfoPtr machine_model = opaque; - size_t n = machine_model->nprops; - bool supported; + qemuMonitorCPUPropertyPtr prop;
- if (virJSONValueGetBoolean(value, &supported) < 0) + prop = machine_model->props + machine_model->nprops; + + switch ((virJSONType) value->type) { + case VIR_JSON_TYPE_STRING: + if (VIR_STRDUP(prop->value.string, virJSONValueGetString(value)) < 0) + return -1; + prop->type = QEMU_MONITOR_CPU_PROPERTY_STRING; + break; + + case VIR_JSON_TYPE_NUMBER: + /* Ignore numbers which cannot be parsed as unsigned long long */ + if (virJSONValueGetNumberUlong(value, &prop->value.ull) < 0) + return 0; + prop->type = QEMU_MONITOR_CPU_PROPERTY_ULL; + break; + + case VIR_JSON_TYPE_BOOLEAN: + virJSONValueGetBoolean(value, &prop->value.boolean); + prop->type = QEMU_MONITOR_CPU_PROPERTY_BOOLEAN; + break; + + case VIR_JSON_TYPE_OBJECT: + case VIR_JSON_TYPE_ARRAY: + case VIR_JSON_TYPE_NULL: return 0; - - if (VIR_STRDUP(machine_model->props[n].name, key) < 0) - return -1; - - machine_model->props[n].supported = supported; + }
machine_model->nprops++; + if (VIR_STRDUP(prop->name, key) < 0) + return -1; + return 0; }
diff --git a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml index c13e8318f..32368e648 100644 --- a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml @@ -222,11 +222,13 @@ <property name='avx512cd' boolean='no'/> <property name='decodeassists' boolean='no'/> <property name='sse4.1' boolean='yes'/> + <property name='family' ull='6'/> <property name='avx512f' boolean='no'/> <property name='msr' boolean='yes'/> <property name='mce' boolean='yes'/> <property name='mca' boolean='yes'/> <property name='xcrypt' boolean='no'/> + <property name='min-level' ull='13'/> <property name='xgetbv1' boolean='yes'/> <property name='cid' boolean='no'/> <property name='ds' boolean='no'/> @@ -242,6 +244,7 @@ <property name='xcrypt-en' boolean='no'/> <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'/> @@ -287,6 +290,7 @@ <property name='sse4.2' boolean='yes'/> <property name='pge' boolean='yes'/> <property name='pdcm' boolean='no'/> + <property name='model' ull='94'/> <property name='movbe' boolean='yes'/> <property name='nrip-save' boolean='no'/> <property name='ssse3' boolean='yes'/> @@ -297,6 +301,7 @@ <property name='fma' boolean='yes'/> <property name='cx16' boolean='yes'/> <property name='de' boolean='yes'/> + <property name='stepping' ull='3'/> <property name='xsave' boolean='yes'/> <property name='clflush' boolean='yes'/> <property name='skinit' boolean='no'/> @@ -334,6 +339,7 @@ <property name='sep' boolean='yes'/> <property name='nodeid-msr' boolean='no'/> <property name='misalignsse' boolean='no'/> + <property name='min-xlevel' ull='2147483656'/> <property name='bmi1' boolean='yes'/> <property name='bmi2' boolean='yes'/> <property name='kvm-pv-unhalt' boolean='yes'/> @@ -363,6 +369,7 @@ <property name='pse36' boolean='yes'/> <property name='tbm' boolean='no'/> <property name='wdt' 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'/> <property name='avx512pf' boolean='no'/>

On Tue, Feb 21, 2017 at 09:27:45 -0500, John Ferlan wrote:
On 02/15/2017 11:44 AM, Jiri Denemark wrote:
While query-cpu-model-expansion returns only boolean features on s390, but x86_64 reports some integer and string properties which we are interested in.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
src/qemu/qemu_capabilities.c | 84 ++++++++++++++++-------- src/qemu/qemu_monitor.c | 22 ++++++- src/qemu/qemu_monitor.h | 23 +++++-- src/qemu/qemu_monitor_json.c | 37 ++++++++--- tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml | 7 ++ 5 files changed, 133 insertions(+), 40 deletions(-)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index aab336954..466852d13 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -3074,14 +3074,16 @@ virQEMUCapsInitCPUModelS390(virQEMUCapsPtr qemuCaps, cpu->nfeatures = 0;
for (i = 0; i < modelInfo->nprops; i++) { - if (VIR_STRDUP(cpu->features[i].name, modelInfo->props[i].name) < 0) + virCPUFeatureDefPtr feature = cpu->features + cpu->nfeatures; + qemuMonitorCPUPropertyPtr prop = modelInfo->props + i; + + if (prop->type != QEMU_MONITOR_CPU_PROPERTY_BOOLEAN) + continue;
So s390 only supports "boolean" or "default" types?
S390 only supports boolean properties; there's no "default" type. ...
@@ -3187,30 +3188,47 @@ virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, hostCPU->nprops = n;
for (i = 0; i < n; i++) { - hostCPU->props[i].name = virXMLPropString(featureNodes[i], "name"); - if (!hostCPU->props[i].name) { + qemuMonitorCPUPropertyPtr prop = hostCPU->props + i; + ctxt->node = featureNodes[i]; + + if (!(prop->name = virXMLPropString(ctxt->node, "name"))) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("missing 'name' attribute for a host CPU" " model property in QEMU capabilities cache")); goto cleanup; }
If you follow the suggestion I have in the previous patch, then if you don't find the property named "type", then you know the 'value' is either "yes" or "no"
If there is a type then the "value" property is either "string" or "number"
As explained in my previous reply, there's no need to support missing type attribute. ...
diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 8811d8501..112f041f1 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -921,16 +921,31 @@ int qemuMonitorGetCPUDefinitions(qemuMonitorPtr mon, qemuMonitorCPUDefInfoPtr **cpus); void qemuMonitorCPUDefInfoFree(qemuMonitorCPUDefInfoPtr cpu);
+typedef enum { + QEMU_MONITOR_CPU_PROPERTY_BOOLEAN,
As stated in previous patch, I think should should be "DEFAULT"
No.
+ QEMU_MONITOR_CPU_PROPERTY_STRING, + QEMU_MONITOR_CPU_PROPERTY_ULL,
likewise, "NUMBER" not "ULL"
Yes. Jirka

Querying "host" CPU model expansion only makes sense for KVM. QEMU 2.9.0 introduces a new "max" CPU model which can be used to ask QEMU what the best CPU it can provide to a TCG domain is. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - no change src/qemu/qemu_capabilities.c | 151 ++++++++++++----- src/qemu/qemu_capabilities.h | 3 +- src/qemu/qemu_capspriv.h | 3 +- src/qemu/qemu_command.c | 2 +- src/qemu/qemu_process.c | 5 +- .../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 | 179 +++++++++++++++++++++ tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml | 172 +++++++++++++++++++- tests/qemuxml2argvtest.c | 3 +- 10 files changed, 480 insertions(+), 48 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 466852d13..2ba82456e 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -400,13 +400,15 @@ struct _virQEMUCaps { size_t ngicCapabilities; virGICCapability *gicCapabilities; - qemuMonitorCPUModelInfoPtr hostCPUModelInfo; + qemuMonitorCPUModelInfoPtr kvmCPUModelInfo; + qemuMonitorCPUModelInfoPtr tcgCPUModelInfo; /* Anything below is not stored in the cache since the values are * re-computed from the other fields or external data sources every * time we probe QEMU or load the results from the cache. */ - virCPUDefPtr hostCPUModel; + virCPUDefPtr kvmCPUModel; + virCPUDefPtr tcgCPUModel; }; struct virQEMUCapsSearchData { @@ -2163,12 +2165,20 @@ virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qemuCaps) goto error; } - if (qemuCaps->hostCPUModel && - !(ret->hostCPUModel = virCPUDefCopy(qemuCaps->hostCPUModel))) + if (qemuCaps->kvmCPUModel && + !(ret->kvmCPUModel = virCPUDefCopy(qemuCaps->kvmCPUModel))) goto error; - if (qemuCaps->hostCPUModelInfo && - !(ret->hostCPUModelInfo = qemuMonitorCPUModelInfoCopy(qemuCaps->hostCPUModelInfo))) + if (qemuCaps->tcgCPUModel && + !(ret->tcgCPUModel = virCPUDefCopy(qemuCaps->tcgCPUModel))) + goto error; + + if (qemuCaps->kvmCPUModelInfo && + !(ret->kvmCPUModelInfo = qemuMonitorCPUModelInfoCopy(qemuCaps->kvmCPUModelInfo))) + goto error; + + if (qemuCaps->tcgCPUModelInfo && + !(ret->tcgCPUModelInfo = qemuMonitorCPUModelInfoCopy(qemuCaps->tcgCPUModelInfo))) goto error; if (VIR_ALLOC_N(ret->machineTypes, qemuCaps->nmachineTypes) < 0) @@ -2217,8 +2227,10 @@ void virQEMUCapsDispose(void *obj) VIR_FREE(qemuCaps->gicCapabilities); - qemuMonitorCPUModelInfoFree(qemuCaps->hostCPUModelInfo); - virCPUDefFree(qemuCaps->hostCPUModel); + qemuMonitorCPUModelInfoFree(qemuCaps->kvmCPUModelInfo); + qemuMonitorCPUModelInfoFree(qemuCaps->tcgCPUModelInfo); + virCPUDefFree(qemuCaps->kvmCPUModel); + virCPUDefFree(qemuCaps->tcgCPUModel); } void @@ -2435,9 +2447,13 @@ virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemuCaps, virCPUDefPtr -virQEMUCapsGetHostModel(virQEMUCapsPtr qemuCaps) +virQEMUCapsGetHostModel(virQEMUCapsPtr qemuCaps, + virDomainVirtType type) { - return qemuCaps->hostCPUModel; + if (type == VIR_DOMAIN_VIRT_KVM) + return qemuCaps->kvmCPUModel; + else + return qemuCaps->tcgCPUModel; } @@ -2455,7 +2471,7 @@ virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps, virQEMUCapsGuestIsNative(caps->host.arch, qemuCaps->arch); case VIR_CPU_MODE_HOST_MODEL: - return !!qemuCaps->hostCPUModel; + return !!virQEMUCapsGetHostModel(qemuCaps, type); case VIR_CPU_MODE_CUSTOM: if (type == VIR_DOMAIN_VIRT_KVM) @@ -2822,14 +2838,24 @@ virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qemuCaps, static int virQEMUCapsProbeQMPHostCPU(virQEMUCapsPtr qemuCaps, - qemuMonitorPtr mon) + qemuMonitorPtr mon, + bool tcg) { - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION) || - !virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) + qemuMonitorCPUModelInfoPtr *modelInfo; + const char *model; + + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION)) return 0; - return qemuMonitorGetCPUModelExpansion(mon, "static", "host", - &qemuCaps->hostCPUModelInfo); + if (tcg || !virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) { + modelInfo = &qemuCaps->tcgCPUModelInfo; + model = "max"; + } else { + modelInfo = &qemuCaps->kvmCPUModelInfo; + model = "host"; + } + + return qemuMonitorGetCPUModelExpansion(mon, "static", model, modelInfo); } struct tpmTypeToCaps { @@ -3053,12 +3079,16 @@ virQEMUCapsCPUFilterFeatures(const char *name, */ static int virQEMUCapsInitCPUModelS390(virQEMUCapsPtr qemuCaps, + virDomainVirtType type, virCPUDefPtr cpu) { - qemuMonitorCPUModelInfoPtr modelInfo = qemuCaps->hostCPUModelInfo; + qemuMonitorCPUModelInfoPtr modelInfo; size_t i; - if (!modelInfo) { + if (type != VIR_DOMAIN_VIRT_KVM) + return -1; + + if (!(modelInfo = qemuCaps->kvmCPUModelInfo)) { virReportError(VIR_ERR_INTERNAL_ERROR, _("missing host CPU model info from QEMU capabilities " "for binary %s"), @@ -3098,12 +3128,13 @@ virQEMUCapsInitCPUModelS390(virQEMUCapsPtr qemuCaps, */ static int virQEMUCapsInitCPUModel(virQEMUCapsPtr qemuCaps, + virDomainVirtType type, virCPUDefPtr cpu) { int ret = 1; if (ARCH_IS_S390(qemuCaps->arch)) - ret = virQEMUCapsInitCPUModelS390(qemuCaps, cpu); + ret = virQEMUCapsInitCPUModelS390(qemuCaps, type, cpu); if (ret == 0) cpu->fallback = VIR_CPU_FALLBACK_FORBID; @@ -3114,7 +3145,8 @@ virQEMUCapsInitCPUModel(virQEMUCapsPtr qemuCaps, void virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, - virCapsPtr caps) + virCapsPtr caps, + virDomainVirtType type) { virCPUDefPtr cpu = NULL; int rc; @@ -3130,7 +3162,7 @@ virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, cpu->match = VIR_CPU_MATCH_EXACT; cpu->fallback = VIR_CPU_FALLBACK_ALLOW; - if ((rc = virQEMUCapsInitCPUModel(qemuCaps, cpu)) < 0) { + if ((rc = virQEMUCapsInitCPUModel(qemuCaps, type, cpu)) < 0) { goto error; } else if (rc == 1) { VIR_DEBUG("No host CPU model info from QEMU; using host capabilities"); @@ -3143,7 +3175,11 @@ virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, goto error; } - qemuCaps->hostCPUModel = cpu; + if (type == VIR_DOMAIN_VIRT_KVM) + qemuCaps->kvmCPUModel = cpu; + else + qemuCaps->tcgCPUModel = cpu; + return; error: @@ -3154,7 +3190,8 @@ virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, static int virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, - xmlXPathContextPtr ctxt) + xmlXPathContextPtr ctxt, + virDomainVirtType type) { xmlNodePtr hostCPUNode; xmlNodePtr *featureNodes = NULL; @@ -3164,7 +3201,12 @@ virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, size_t i; int n; - if (!(hostCPUNode = virXPathNode("./hostCPU", ctxt))) { + if (type == VIR_DOMAIN_VIRT_KVM) + hostCPUNode = virXPathNode("./hostCPU[@type='kvm']", ctxt); + else + hostCPUNode = virXPathNode("./hostCPU[@type='tcg']", ctxt); + + if (!hostCPUNode) { ret = 0; goto cleanup; } @@ -3232,7 +3274,10 @@ virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, } } - qemuCaps->hostCPUModelInfo = hostCPU; + if (type == VIR_DOMAIN_VIRT_KVM) + qemuCaps->kvmCPUModelInfo = hostCPU; + else + qemuCaps->tcgCPUModelInfo = hostCPU; hostCPU = NULL; ret = 0; @@ -3438,7 +3483,8 @@ virQEMUCapsLoadCache(virCapsPtr caps, } VIR_FREE(str); - if (virQEMUCapsLoadHostCPUModelInfo(qemuCaps, ctxt) < 0) + if (virQEMUCapsLoadHostCPUModelInfo(qemuCaps, ctxt, VIR_DOMAIN_VIRT_KVM) < 0 || + virQEMUCapsLoadHostCPUModelInfo(qemuCaps, ctxt, VIR_DOMAIN_VIRT_QEMU) < 0) goto cleanup; if (virQEMUCapsLoadCPUModels(qemuCaps, ctxt, VIR_DOMAIN_VIRT_KVM) < 0 || @@ -3546,7 +3592,8 @@ virQEMUCapsLoadCache(virCapsPtr caps, } VIR_FREE(nodes); - virQEMUCapsInitHostCPUModel(qemuCaps, caps); + virQEMUCapsInitHostCPUModel(qemuCaps, caps, VIR_DOMAIN_VIRT_KVM); + virQEMUCapsInitHostCPUModel(qemuCaps, caps, VIR_DOMAIN_VIRT_QEMU); ret = 0; cleanup: @@ -3560,12 +3607,26 @@ virQEMUCapsLoadCache(virCapsPtr caps, static void virQEMUCapsFormatHostCPUModelInfo(virQEMUCapsPtr qemuCaps, - virBufferPtr buf) + virBufferPtr buf, + virDomainVirtType type) { - qemuMonitorCPUModelInfoPtr model = qemuCaps->hostCPUModelInfo; + qemuMonitorCPUModelInfoPtr model; + const char *typeStr; size_t i; - virBufferAsprintf(buf, "<hostCPU model='%s'>\n", model->name); + if (type == VIR_DOMAIN_VIRT_KVM) { + typeStr = "kvm"; + model = qemuCaps->kvmCPUModelInfo; + } else { + typeStr = "tcg"; + model = qemuCaps->tcgCPUModelInfo; + } + + if (!model) + return; + + virBufferAsprintf(buf, "<hostCPU type='%s' model='%s'>\n", + typeStr, model->name); virBufferAdjustIndent(buf, 2); for (i = 0; i < model->nprops; i++) { @@ -3670,8 +3731,8 @@ virQEMUCapsFormatCache(virQEMUCapsPtr qemuCaps, virBufferAsprintf(&buf, "<arch>%s</arch>\n", virArchToString(qemuCaps->arch)); - if (qemuCaps->hostCPUModelInfo) - virQEMUCapsFormatHostCPUModelInfo(qemuCaps, &buf); + virQEMUCapsFormatHostCPUModelInfo(qemuCaps, &buf, VIR_DOMAIN_VIRT_KVM); + virQEMUCapsFormatHostCPUModelInfo(qemuCaps, &buf, VIR_DOMAIN_VIRT_QEMU); virQEMUCapsFormatCPUModels(qemuCaps, &buf, VIR_DOMAIN_VIRT_KVM); virQEMUCapsFormatCPUModels(qemuCaps, &buf, VIR_DOMAIN_VIRT_QEMU); @@ -3806,11 +3867,15 @@ virQEMUCapsReset(virQEMUCapsPtr qemuCaps) VIR_FREE(qemuCaps->gicCapabilities); qemuCaps->ngicCapabilities = 0; - qemuMonitorCPUModelInfoFree(qemuCaps->hostCPUModelInfo); - qemuCaps->hostCPUModelInfo = NULL; + qemuMonitorCPUModelInfoFree(qemuCaps->kvmCPUModelInfo); + qemuMonitorCPUModelInfoFree(qemuCaps->tcgCPUModelInfo); + qemuCaps->kvmCPUModelInfo = NULL; + qemuCaps->tcgCPUModelInfo = NULL; - virCPUDefFree(qemuCaps->hostCPUModel); - qemuCaps->hostCPUModel = NULL; + virCPUDefFree(qemuCaps->kvmCPUModel); + virCPUDefFree(qemuCaps->tcgCPUModel); + qemuCaps->kvmCPUModel = NULL; + qemuCaps->tcgCPUModel = NULL; } @@ -4368,7 +4433,7 @@ virQEMUCapsInitQMPMonitor(virQEMUCapsPtr qemuCaps, if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_QMP_SCHEMA) && virQEMUCapsProbeQMPSchemaCapabilities(qemuCaps, mon) < 0) goto cleanup; - if (virQEMUCapsProbeQMPHostCPU(qemuCaps, mon) < 0) + if (virQEMUCapsProbeQMPHostCPU(qemuCaps, mon, false) < 0) goto cleanup; /* 'intel-iommu' shows up as a device since 2.2.0, but can @@ -4410,6 +4475,9 @@ virQEMUCapsInitQMPMonitorTCG(virQEMUCapsPtr qemuCaps ATTRIBUTE_UNUSED, if (virQEMUCapsProbeQMPCPUDefinitions(qemuCaps, mon, true) < 0) goto cleanup; + if (virQEMUCapsProbeQMPHostCPU(qemuCaps, mon, true) < 0) + goto cleanup; + ret = 0; cleanup: return ret; @@ -4754,7 +4822,8 @@ virQEMUCapsNewForBinaryInternal(virCapsPtr caps, virQEMUCapsRememberCached(qemuCaps, cacheDir) < 0) goto error; - virQEMUCapsInitHostCPUModel(qemuCaps, caps); + virQEMUCapsInitHostCPUModel(qemuCaps, caps, VIR_DOMAIN_VIRT_KVM); + virQEMUCapsInitHostCPUModel(qemuCaps, caps, VIR_DOMAIN_VIRT_QEMU); } cleanup: @@ -5200,8 +5269,10 @@ virQEMUCapsFillDomainCPUCaps(virCapsPtr caps, domCaps->cpu.hostPassthrough = true; if (virQEMUCapsIsCPUModeSupported(qemuCaps, caps, domCaps->virttype, - VIR_CPU_MODE_HOST_MODEL)) - domCaps->cpu.hostModel = virCPUDefCopy(qemuCaps->hostCPUModel); + VIR_CPU_MODE_HOST_MODEL)) { + virCPUDefPtr cpu = virQEMUCapsGetHostModel(qemuCaps, domCaps->virttype); + domCaps->cpu.hostModel = virCPUDefCopy(cpu); + } if (virQEMUCapsIsCPUModeSupported(qemuCaps, caps, domCaps->virttype, VIR_CPU_MODE_CUSTOM)) { diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 95bb67d44..3331142ea 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -441,7 +441,8 @@ int virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemuCaps, virDomainVirtType type, char ***names, size_t *count); -virCPUDefPtr virQEMUCapsGetHostModel(virQEMUCapsPtr qemuCaps); +virCPUDefPtr virQEMUCapsGetHostModel(virQEMUCapsPtr qemuCaps, + virDomainVirtType type); bool virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps, virCapsPtr caps, virDomainVirtType type, diff --git a/src/qemu/qemu_capspriv.h b/src/qemu/qemu_capspriv.h index 38b971e0e..75499d462 100644 --- a/src/qemu/qemu_capspriv.h +++ b/src/qemu/qemu_capspriv.h @@ -71,5 +71,6 @@ virQEMUCapsSetArch(virQEMUCapsPtr qemuCaps, void virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, - virCapsPtr caps); + virCapsPtr caps, + virDomainVirtType type); #endif diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index c00a47a91..4e83dee37 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -6782,7 +6782,7 @@ qemuBuildCpuCommandLine(virCommandPtr cmd, if (def->cpu->mode == VIR_CPU_MODE_CUSTOM) cpuDef = def->cpu; else if (def->cpu->mode == VIR_CPU_MODE_HOST_PASSTHROUGH) - cpuDef = virQEMUCapsGetHostModel(qemuCaps); + cpuDef = virQEMUCapsGetHostModel(qemuCaps, def->virtType); if (cpuDef) { int svm = virCPUCheckFeature(def->os.arch, cpuDef, "svm"); diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 92fa69b3c..b9df01da5 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -5147,13 +5147,14 @@ qemuProcessUpdateGuestCPU(virDomainDefPtr def, /* custom CPUs in TCG mode don't need to be compared to host CPU */ if (def->virtType != VIR_DOMAIN_VIRT_QEMU || def->cpu->mode != VIR_CPU_MODE_CUSTOM) { - if (virCPUCompare(caps->host.arch, virQEMUCapsGetHostModel(qemuCaps), + if (virCPUCompare(caps->host.arch, + virQEMUCapsGetHostModel(qemuCaps, def->virtType), def->cpu, true) < 0) return -1; } if (virCPUUpdate(def->os.arch, def->cpu, - virQEMUCapsGetHostModel(qemuCaps)) < 0) + virQEMUCapsGetHostModel(qemuCaps, def->virtType)) < 0) goto cleanup; if (virQEMUCapsGetCPUDefinitions(qemuCaps, def->virtType, diff --git a/tests/qemucapabilitiesdata/caps_2.8.0.s390x.replies b/tests/qemucapabilitiesdata/caps_2.8.0.s390x.replies index 0405d5d7b..c3cbeee0a 100644 --- a/tests/qemucapabilitiesdata/caps_2.8.0.s390x.replies +++ b/tests/qemucapabilitiesdata/caps_2.8.0.s390x.replies @@ -13378,3 +13378,11 @@ ], "id": "libvirt-2" } + +{ + "id": "libvirt-3", + "error": { + "class": "GenericError", + "desc": "The CPU definition 'max' is unknown." + } +} diff --git a/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml index 1f652bdc2..df7eb18f6 100644 --- a/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml +++ b/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml @@ -133,7 +133,7 @@ <kvmVersion>0</kvmVersion> <package></package> <arch>s390x</arch> - <hostCPU model='zEC12.2-base'> + <hostCPU type='kvm' model='zEC12.2-base'> <property name='aefsi' boolean='yes'/> <property name='msa5' boolean='yes'/> <property name='msa4' boolean='yes'/> diff --git a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.replies b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.replies index 8d54788df..390f40f9f 100644 --- a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.replies @@ -14708,3 +14708,182 @@ ], "id": "libvirt-2" } + +{ + "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-3" +} diff --git a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml index 32368e648..520bf80f4 100644 --- a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml @@ -205,7 +205,7 @@ <kvmVersion>0</kvmVersion> <package> (v2.8.0-877-g38e4b757b4)</package> <arch>x86_64</arch> - <hostCPU model='base'> + <hostCPU type='kvm' model='base'> <property name='cmov' boolean='yes'/> <property name='ia64' boolean='no'/> <property name='aes' boolean='yes'/> @@ -375,6 +375,176 @@ <property name='avx512pf' boolean='no'/> <property name='xstore-en' boolean='no'/> </hostCPU> + <hostCPU type='tcg' model='base'> + <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='pause-filter' boolean='no'/> + <property name='xsavec' boolean='no'/> + <property name='osxsave' boolean='no'/> + <property name='kvm-asyncpf' 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='sse4.1' boolean='yes'/> + <property name='family' ull='6'/> + <property name='avx512f' boolean='no'/> + <property name='msr' boolean='yes'/> + <property name='mce' boolean='yes'/> + <property name='mca' boolean='yes'/> + <property name='xcrypt' boolean='no'/> + <property name='min-level' ull='13'/> + <property name='xgetbv1' boolean='yes'/> + <property name='cid' boolean='no'/> + <property name='ds' boolean='no'/> + <property name='fxsr' boolean='yes'/> + <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='extapic' boolean='no'/> + <property name='3dnowprefetch' boolean='no'/> + <property name='cr8legacy' boolean='yes'/> + <property name='xcrypt-en' boolean='no'/> + <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='avx512-4fmaps' boolean='no'/> + <property name='vmcb-clean' boolean='no'/> + <property name='hle' boolean='no'/> + <property name='3dnowext' boolean='yes'/> + <property name='npt' boolean='no'/> + <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='smep' boolean='yes'/> + <property name='smap' boolean='yes'/> + <property name='pfthreshold' boolean='no'/> + <property name='x2apic' boolean='no'/> + <property name='avx512vbmi' boolean='no'/> + <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='sse' boolean='yes'/> + <property name='phe-en' 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='pcommit' boolean='yes'/> + <property name='syscall' boolean='yes'/> + <property name='avx512dq' boolean='no'/> + <property name='svm' boolean='yes'/> + <property name='invtsc' boolean='no'/> + <property name='sse2' boolean='yes'/> + <property name='est' boolean='no'/> + <property name='avx512ifma' boolean='no'/> + <property name='tm2' boolean='no'/> + <property name='kvm-pv-eoi' boolean='no'/> + <property name='cx8' boolean='yes'/> + <property name='kvm-mmu' boolean='no'/> + <property name='sse4.2' boolean='yes'/> + <property name='pge' boolean='yes'/> + <property name='pdcm' 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='sse4a' boolean='yes'/> + <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='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='fpu' boolean='yes'/> + <property name='ds-cpl' boolean='no'/> + <property name='ibs' boolean='no'/> + <property name='fma4' boolean='no'/> + <property name='la57' boolean='yes'/> + <property name='osvw' boolean='no'/> + <property name='apic' boolean='yes'/> + <property name='pmm' boolean='no'/> + <property name='tsc-adjust' boolean='no'/> + <property name='kvm-steal-time' boolean='no'/> + <property name='kvmclock' boolean='no'/> + <property name='lwp' boolean='no'/> + <property name='xop' boolean='no'/> + <property name='avx' boolean='no'/> + <property name='ospke' boolean='yes'/> + <property name='acpi' boolean='yes'/> + <property name='avx512bw' boolean='no'/> + <property name='ace2' boolean='no'/> + <property name='fsgsbase' boolean='yes'/> + <property name='ht' boolean='no'/> + <property name='nx' boolean='yes'/> + <property name='pclmulqdq' boolean='yes'/> + <property name='mmxext' boolean='yes'/> + <property name='popcnt' boolean='yes'/> + <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='sep' boolean='yes'/> + <property name='nodeid-msr' boolean='no'/> + <property name='misalignsse' boolean='no'/> + <property name='min-xlevel' ull='2147483658'/> + <property name='bmi1' boolean='yes'/> + <property name='bmi2' boolean='yes'/> + <property name='kvm-pv-unhalt' boolean='no'/> + <property name='tsc-scale' boolean='no'/> + <property name='topoext' boolean='no'/> + <property name='clflushopt' boolean='yes'/> + <property name='monitor' boolean='yes'/> + <property name='avx512er' boolean='no'/> + <property name='pmm-en' boolean='no'/> + <property name='pcid' boolean='no'/> + <property name='3dnow' boolean='yes'/> + <property name='erms' boolean='yes'/> + <property name='lahf-lm' boolean='yes'/> + <property name='fxsr-opt' boolean='no'/> + <property name='xstore' boolean='no'/> + <property name='rtm' boolean='no'/> + <property name='lmce' boolean='no'/> + <property name='perfctr-nb' boolean='no'/> + <property name='rdrand' boolean='no'/> + <property name='rdseed' boolean='no'/> + <property name='avx512-4vnniw' boolean='no'/> + <property name='vme' boolean='no'/> + <property name='vmx' boolean='no'/> + <property name='dtes64' boolean='no'/> + <property name='mtrr' boolean='yes'/> + <property name='rdtscp' boolean='yes'/> + <property name='pse36' boolean='yes'/> + <property name='tbm' boolean='no'/> + <property name='wdt' boolean='no'/> + <property name='model-id' string='QEMU TCG CPU version 2.5+'/> + <property name='sha-ni' boolean='no'/> + <property name='abm' boolean='yes'/> + <property name='avx512pf' boolean='no'/> + <property name='xstore-en' boolean='no'/> + </hostCPU> <cpu type='kvm' name='max' usable='yes'/> <cpu type='kvm' name='host' usable='yes'/> <cpu type='kvm' name='base' usable='yes'/> diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index faa99c64c..5ba2eeab9 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -384,7 +384,8 @@ testUpdateQEMUCaps(const struct testInfo *info, if (testAddCPUModels(info->qemuCaps, info->skipLegacyCPUs) < 0) goto cleanup; - virQEMUCapsInitHostCPUModel(info->qemuCaps, caps); + virQEMUCapsInitHostCPUModel(info->qemuCaps, caps, VIR_DOMAIN_VIRT_KVM); + virQEMUCapsInitHostCPUModel(info->qemuCaps, caps, VIR_DOMAIN_VIRT_QEMU); virQEMUCapsFilterByMachineType(info->qemuCaps, vm->def->os.machine); -- 2.11.1

On 02/15/2017 11:44 AM, Jiri Denemark wrote:
Querying "host" CPU model expansion only makes sense for KVM. QEMU 2.9.0 introduces a new "max" CPU model which can be used to ask QEMU what the best CPU it can provide to a TCG domain is.
But how do we know "max" is available to be used for TCG? It seems to me that virQEMUCapsProbeQMPHostCPU now is changed such that there's an assumption that "max" is available, but the above makes it appear as if it's a new paremter/attribute [1]. Every time I see TCG I think "Trusted Computing Group" and I certainly don't think VIR_DOMAIN_TYPE_QEMU. What gets "confusing" eventually is that virQEMUCapsInitHostCPUModel is called with VIR_DOMAIN_VIRT_KVM and VIR_DOMAIN_VIRT_QEMU, but qemuCaps->tcgCPUModel is filled in for VIR_DOMAIN_VIRT_QEMU. It's not overtly obvious to me from just reading the commit message, but it seems TCG now becomes a fallback position of sorts which I think is fine, it's just not described.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
src/qemu/qemu_capabilities.c | 151 ++++++++++++----- src/qemu/qemu_capabilities.h | 3 +- src/qemu/qemu_capspriv.h | 3 +- src/qemu/qemu_command.c | 2 +- src/qemu/qemu_process.c | 5 +- .../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 | 179 +++++++++++++++++++++ tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml | 172 +++++++++++++++++++- tests/qemuxml2argvtest.c | 3 +- 10 files changed, 480 insertions(+), 48 deletions(-)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 466852d13..2ba82456e 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -400,13 +400,15 @@ struct _virQEMUCaps { size_t ngicCapabilities; virGICCapability *gicCapabilities;
- qemuMonitorCPUModelInfoPtr hostCPUModelInfo; + qemuMonitorCPUModelInfoPtr kvmCPUModelInfo; + qemuMonitorCPUModelInfoPtr tcgCPUModelInfo;
/* Anything below is not stored in the cache since the values are * re-computed from the other fields or external data sources every * time we probe QEMU or load the results from the cache. */ - virCPUDefPtr hostCPUModel; + virCPUDefPtr kvmCPUModel; + virCPUDefPtr tcgCPUModel; };
struct virQEMUCapsSearchData { @@ -2163,12 +2165,20 @@ virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qemuCaps) goto error; }
- if (qemuCaps->hostCPUModel && - !(ret->hostCPUModel = virCPUDefCopy(qemuCaps->hostCPUModel))) + if (qemuCaps->kvmCPUModel && + !(ret->kvmCPUModel = virCPUDefCopy(qemuCaps->kvmCPUModel))) goto error;
- if (qemuCaps->hostCPUModelInfo && - !(ret->hostCPUModelInfo = qemuMonitorCPUModelInfoCopy(qemuCaps->hostCPUModelInfo))) + if (qemuCaps->tcgCPUModel && + !(ret->tcgCPUModel = virCPUDefCopy(qemuCaps->tcgCPUModel))) + goto error; + + if (qemuCaps->kvmCPUModelInfo && + !(ret->kvmCPUModelInfo = qemuMonitorCPUModelInfoCopy(qemuCaps->kvmCPUModelInfo))) + goto error; + + if (qemuCaps->tcgCPUModelInfo && + !(ret->tcgCPUModelInfo = qemuMonitorCPUModelInfoCopy(qemuCaps->tcgCPUModelInfo))) goto error;
if (VIR_ALLOC_N(ret->machineTypes, qemuCaps->nmachineTypes) < 0) @@ -2217,8 +2227,10 @@ void virQEMUCapsDispose(void *obj)
VIR_FREE(qemuCaps->gicCapabilities);
- qemuMonitorCPUModelInfoFree(qemuCaps->hostCPUModelInfo); - virCPUDefFree(qemuCaps->hostCPUModel); + qemuMonitorCPUModelInfoFree(qemuCaps->kvmCPUModelInfo); + qemuMonitorCPUModelInfoFree(qemuCaps->tcgCPUModelInfo); + virCPUDefFree(qemuCaps->kvmCPUModel); + virCPUDefFree(qemuCaps->tcgCPUModel); }
void @@ -2435,9 +2447,13 @@ virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemuCaps,
virCPUDefPtr -virQEMUCapsGetHostModel(virQEMUCapsPtr qemuCaps) +virQEMUCapsGetHostModel(virQEMUCapsPtr qemuCaps, + virDomainVirtType type) { - return qemuCaps->hostCPUModel; + if (type == VIR_DOMAIN_VIRT_KVM) + return qemuCaps->kvmCPUModel; + else + return qemuCaps->tcgCPUModel; }
@@ -2455,7 +2471,7 @@ virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps, virQEMUCapsGuestIsNative(caps->host.arch, qemuCaps->arch);
case VIR_CPU_MODE_HOST_MODEL: - return !!qemuCaps->hostCPUModel; + return !!virQEMUCapsGetHostModel(qemuCaps, type);
case VIR_CPU_MODE_CUSTOM: if (type == VIR_DOMAIN_VIRT_KVM) @@ -2822,14 +2838,24 @@ virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qemuCaps,
static int virQEMUCapsProbeQMPHostCPU(virQEMUCapsPtr qemuCaps, - qemuMonitorPtr mon) + qemuMonitorPtr mon, + bool tcg) { - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION) || - !virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) + qemuMonitorCPUModelInfoPtr *modelInfo; + const char *model; + + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION)) return 0;
So if no model expansion, then neither is filled in, but there are later checks which seem to assume one or the other is filled in. I didn't chase all the callers to check whether they would expect/require something to be filled in (too many patches, too little time).
- return qemuMonitorGetCPUModelExpansion(mon, "static", "host", - &qemuCaps->hostCPUModelInfo); + if (tcg || !virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) {
[1] It's noot clear to the casual reviewer when tcg and in particular the "max" parameter was supported. IOW: The first thought I had was why isn't there a capability being checked for "max" being available. The commit message seems to indicate that it's new for 2.9.0, but I don't see a libvirt capability check for it being available before being used. The logic changes now such that if !QEMU_CAPS_KVM that model expansion is called with "max"; whereas, previously a 0 was returned. Thus if !tcg and !QEMU_CAPS_KVM, then "max" is used and ModelExpansion is called. If TCG becomes the "de facto" default - Just making sure that's expected...
+ modelInfo = &qemuCaps->tcgCPUModelInfo; + model = "max"; + } else { + modelInfo = &qemuCaps->kvmCPUModelInfo; + model = "host"; + } + + return qemuMonitorGetCPUModelExpansion(mon, "static", model, modelInfo); }
struct tpmTypeToCaps { @@ -3053,12 +3079,16 @@ virQEMUCapsCPUFilterFeatures(const char *name, */ static int virQEMUCapsInitCPUModelS390(virQEMUCapsPtr qemuCaps, + virDomainVirtType type, virCPUDefPtr cpu) { - qemuMonitorCPUModelInfoPtr modelInfo = qemuCaps->hostCPUModelInfo; + qemuMonitorCPUModelInfoPtr modelInfo; size_t i;
- if (!modelInfo) { + if (type != VIR_DOMAIN_VIRT_KVM) + return -1; + + if (!(modelInfo = qemuCaps->kvmCPUModelInfo)) { virReportError(VIR_ERR_INTERNAL_ERROR, _("missing host CPU model info from QEMU capabilities " "for binary %s"), @@ -3098,12 +3128,13 @@ virQEMUCapsInitCPUModelS390(virQEMUCapsPtr qemuCaps, */ static int virQEMUCapsInitCPUModel(virQEMUCapsPtr qemuCaps, + virDomainVirtType type, virCPUDefPtr cpu) { int ret = 1;
if (ARCH_IS_S390(qemuCaps->arch)) - ret = virQEMUCapsInitCPUModelS390(qemuCaps, cpu); + ret = virQEMUCapsInitCPUModelS390(qemuCaps, type, cpu);
if (ret == 0) cpu->fallback = VIR_CPU_FALLBACK_FORBID; @@ -3114,7 +3145,8 @@ virQEMUCapsInitCPUModel(virQEMUCapsPtr qemuCaps,
void virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, - virCapsPtr caps) + virCapsPtr caps, + virDomainVirtType type) { virCPUDefPtr cpu = NULL; int rc; @@ -3130,7 +3162,7 @@ virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, cpu->match = VIR_CPU_MATCH_EXACT; cpu->fallback = VIR_CPU_FALLBACK_ALLOW;
- if ((rc = virQEMUCapsInitCPUModel(qemuCaps, cpu)) < 0) { + if ((rc = virQEMUCapsInitCPUModel(qemuCaps, type, cpu)) < 0) { goto error; } else if (rc == 1) { VIR_DEBUG("No host CPU model info from QEMU; using host capabilities"); @@ -3143,7 +3175,11 @@ virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, goto error; }
- qemuCaps->hostCPUModel = cpu; + if (type == VIR_DOMAIN_VIRT_KVM) + qemuCaps->kvmCPUModel = cpu; + else + qemuCaps->tcgCPUModel = cpu; + return;
error: @@ -3154,7 +3190,8 @@ virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps,
static int virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, - xmlXPathContextPtr ctxt) + xmlXPathContextPtr ctxt, + virDomainVirtType type) { xmlNodePtr hostCPUNode; xmlNodePtr *featureNodes = NULL; @@ -3164,7 +3201,12 @@ virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, size_t i; int n;
- if (!(hostCPUNode = virXPathNode("./hostCPU", ctxt))) { + if (type == VIR_DOMAIN_VIRT_KVM) + hostCPUNode = virXPathNode("./hostCPU[@type='kvm']", ctxt); + else + hostCPUNode = virXPathNode("./hostCPU[@type='tcg']", ctxt); + + if (!hostCPUNode) { ret = 0; goto cleanup; } @@ -3232,7 +3274,10 @@ virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, } }
- qemuCaps->hostCPUModelInfo = hostCPU; + if (type == VIR_DOMAIN_VIRT_KVM) + qemuCaps->kvmCPUModelInfo = hostCPU; + else + qemuCaps->tcgCPUModelInfo = hostCPU; hostCPU = NULL; ret = 0;
@@ -3438,7 +3483,8 @@ virQEMUCapsLoadCache(virCapsPtr caps, } VIR_FREE(str);
- if (virQEMUCapsLoadHostCPUModelInfo(qemuCaps, ctxt) < 0) + if (virQEMUCapsLoadHostCPUModelInfo(qemuCaps, ctxt, VIR_DOMAIN_VIRT_KVM) < 0 || + virQEMUCapsLoadHostCPUModelInfo(qemuCaps, ctxt, VIR_DOMAIN_VIRT_QEMU) < 0) goto cleanup;
if (virQEMUCapsLoadCPUModels(qemuCaps, ctxt, VIR_DOMAIN_VIRT_KVM) < 0 || @@ -3546,7 +3592,8 @@ virQEMUCapsLoadCache(virCapsPtr caps, } VIR_FREE(nodes);
- virQEMUCapsInitHostCPUModel(qemuCaps, caps); + virQEMUCapsInitHostCPUModel(qemuCaps, caps, VIR_DOMAIN_VIRT_KVM); + virQEMUCapsInitHostCPUModel(qemuCaps, caps, VIR_DOMAIN_VIRT_QEMU);
ret = 0; cleanup: @@ -3560,12 +3607,26 @@ virQEMUCapsLoadCache(virCapsPtr caps,
static void virQEMUCapsFormatHostCPUModelInfo(virQEMUCapsPtr qemuCaps, - virBufferPtr buf) + virBufferPtr buf, + virDomainVirtType type) { - qemuMonitorCPUModelInfoPtr model = qemuCaps->hostCPUModelInfo; + qemuMonitorCPUModelInfoPtr model; + const char *typeStr; size_t i;
- virBufferAsprintf(buf, "<hostCPU model='%s'>\n", model->name); + if (type == VIR_DOMAIN_VIRT_KVM) { + typeStr = "kvm"; + model = qemuCaps->kvmCPUModelInfo; + } else { + typeStr = "tcg"; + model = qemuCaps->tcgCPUModelInfo; + } + + if (!model) + return;
if !model can happen, how does that affect other places which assume that are making a similar check to decide which ModelInfo to use? Also this is "similar" to virQEMUCapsGetHostModel at least for 'model'...
+ + virBufferAsprintf(buf, "<hostCPU type='%s' model='%s'>\n", + typeStr, model->name); virBufferAdjustIndent(buf, 2);
for (i = 0; i < model->nprops; i++) { @@ -3670,8 +3731,8 @@ virQEMUCapsFormatCache(virQEMUCapsPtr qemuCaps, virBufferAsprintf(&buf, "<arch>%s</arch>\n", virArchToString(qemuCaps->arch));
- if (qemuCaps->hostCPUModelInfo) - virQEMUCapsFormatHostCPUModelInfo(qemuCaps, &buf); + virQEMUCapsFormatHostCPUModelInfo(qemuCaps, &buf, VIR_DOMAIN_VIRT_KVM); + virQEMUCapsFormatHostCPUModelInfo(qemuCaps, &buf, VIR_DOMAIN_VIRT_QEMU);
virQEMUCapsFormatCPUModels(qemuCaps, &buf, VIR_DOMAIN_VIRT_KVM); virQEMUCapsFormatCPUModels(qemuCaps, &buf, VIR_DOMAIN_VIRT_QEMU); @@ -3806,11 +3867,15 @@ virQEMUCapsReset(virQEMUCapsPtr qemuCaps) VIR_FREE(qemuCaps->gicCapabilities); qemuCaps->ngicCapabilities = 0;
- qemuMonitorCPUModelInfoFree(qemuCaps->hostCPUModelInfo); - qemuCaps->hostCPUModelInfo = NULL; + qemuMonitorCPUModelInfoFree(qemuCaps->kvmCPUModelInfo); + qemuMonitorCPUModelInfoFree(qemuCaps->tcgCPUModelInfo); + qemuCaps->kvmCPUModelInfo = NULL; + qemuCaps->tcgCPUModelInfo = NULL;
- virCPUDefFree(qemuCaps->hostCPUModel); - qemuCaps->hostCPUModel = NULL; + virCPUDefFree(qemuCaps->kvmCPUModel); + virCPUDefFree(qemuCaps->tcgCPUModel); + qemuCaps->kvmCPUModel = NULL; + qemuCaps->tcgCPUModel = NULL; }
@@ -4368,7 +4433,7 @@ virQEMUCapsInitQMPMonitor(virQEMUCapsPtr qemuCaps, if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_QMP_SCHEMA) && virQEMUCapsProbeQMPSchemaCapabilities(qemuCaps, mon) < 0) goto cleanup; - if (virQEMUCapsProbeQMPHostCPU(qemuCaps, mon) < 0) + if (virQEMUCapsProbeQMPHostCPU(qemuCaps, mon, false) < 0) goto cleanup;
/* 'intel-iommu' shows up as a device since 2.2.0, but can @@ -4410,6 +4475,9 @@ virQEMUCapsInitQMPMonitorTCG(virQEMUCapsPtr qemuCaps ATTRIBUTE_UNUSED, if (virQEMUCapsProbeQMPCPUDefinitions(qemuCaps, mon, true) < 0) goto cleanup;
+ if (virQEMUCapsProbeQMPHostCPU(qemuCaps, mon, true) < 0) + goto cleanup; + ret = 0; cleanup: return ret; @@ -4754,7 +4822,8 @@ virQEMUCapsNewForBinaryInternal(virCapsPtr caps, virQEMUCapsRememberCached(qemuCaps, cacheDir) < 0) goto error;
- virQEMUCapsInitHostCPUModel(qemuCaps, caps); + virQEMUCapsInitHostCPUModel(qemuCaps, caps, VIR_DOMAIN_VIRT_KVM); + virQEMUCapsInitHostCPUModel(qemuCaps, caps, VIR_DOMAIN_VIRT_QEMU); }
cleanup: @@ -5200,8 +5269,10 @@ virQEMUCapsFillDomainCPUCaps(virCapsPtr caps, domCaps->cpu.hostPassthrough = true;
if (virQEMUCapsIsCPUModeSupported(qemuCaps, caps, domCaps->virttype, - VIR_CPU_MODE_HOST_MODEL)) - domCaps->cpu.hostModel = virCPUDefCopy(qemuCaps->hostCPUModel); + VIR_CPU_MODE_HOST_MODEL)) { + virCPUDefPtr cpu = virQEMUCapsGetHostModel(qemuCaps, domCaps->virttype); + domCaps->cpu.hostModel = virCPUDefCopy(cpu); + }
if (virQEMUCapsIsCPUModeSupported(qemuCaps, caps, domCaps->virttype, VIR_CPU_MODE_CUSTOM)) { diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 95bb67d44..3331142ea 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -441,7 +441,8 @@ int virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemuCaps, virDomainVirtType type, char ***names, size_t *count); -virCPUDefPtr virQEMUCapsGetHostModel(virQEMUCapsPtr qemuCaps); +virCPUDefPtr virQEMUCapsGetHostModel(virQEMUCapsPtr qemuCaps, + virDomainVirtType type); bool virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps, virCapsPtr caps, virDomainVirtType type, diff --git a/src/qemu/qemu_capspriv.h b/src/qemu/qemu_capspriv.h index 38b971e0e..75499d462 100644 --- a/src/qemu/qemu_capspriv.h +++ b/src/qemu/qemu_capspriv.h @@ -71,5 +71,6 @@ virQEMUCapsSetArch(virQEMUCapsPtr qemuCaps,
void virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, - virCapsPtr caps); + virCapsPtr caps, + virDomainVirtType type); #endif diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index c00a47a91..4e83dee37 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -6782,7 +6782,7 @@ qemuBuildCpuCommandLine(virCommandPtr cmd, if (def->cpu->mode == VIR_CPU_MODE_CUSTOM) cpuDef = def->cpu; else if (def->cpu->mode == VIR_CPU_MODE_HOST_PASSTHROUGH) - cpuDef = virQEMUCapsGetHostModel(qemuCaps); + cpuDef = virQEMUCapsGetHostModel(qemuCaps, def->virtType);
if (cpuDef) { int svm = virCPUCheckFeature(def->os.arch, cpuDef, "svm"); diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 92fa69b3c..b9df01da5 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -5147,13 +5147,14 @@ qemuProcessUpdateGuestCPU(virDomainDefPtr def, /* custom CPUs in TCG mode don't need to be compared to host CPU */ if (def->virtType != VIR_DOMAIN_VIRT_QEMU || def->cpu->mode != VIR_CPU_MODE_CUSTOM) { - if (virCPUCompare(caps->host.arch, virQEMUCapsGetHostModel(qemuCaps), + if (virCPUCompare(caps->host.arch, + virQEMUCapsGetHostModel(qemuCaps, def->virtType),
THis is about where I started wondering about a NULL return here and the "default" of TCG now... Although looking at the code around it, this would seemingly only be called for passthrough or host-model, true?
def->cpu, true) < 0) return -1; }
if (virCPUUpdate(def->os.arch, def->cpu, - virQEMUCapsGetHostModel(qemuCaps)) < 0) + virQEMUCapsGetHostModel(qemuCaps, def->virtType)) < 0) goto cleanup;
if (virQEMUCapsGetCPUDefinitions(qemuCaps, def->virtType, diff --git a/tests/qemucapabilitiesdata/caps_2.8.0.s390x.replies b/tests/qemucapabilitiesdata/caps_2.8.0.s390x.replies index 0405d5d7b..c3cbeee0a 100644 --- a/tests/qemucapabilitiesdata/caps_2.8.0.s390x.replies +++ b/tests/qemucapabilitiesdata/caps_2.8.0.s390x.replies @@ -13378,3 +13378,11 @@ ], "id": "libvirt-2" } + +{ + "id": "libvirt-3", + "error": { + "class": "GenericError", + "desc": "The CPU definition 'max' is unknown." + } +}
And this seems to indicate my comments before in virQEMUCapsProbeQMPHostCPU - if "max" isn't available, but tcg is true or if !QEMU_CAPS_KVM, then "max" will be tried, which doesn't seem right. Also does something similar need to be done in caps_2.8.0.x86_64 or does it not really matter since if it doesn't exist, it wouldn't be defined or usable. John
diff --git a/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml index 1f652bdc2..df7eb18f6 100644 --- a/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml +++ b/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml @@ -133,7 +133,7 @@ <kvmVersion>0</kvmVersion> <package></package> <arch>s390x</arch> - <hostCPU model='zEC12.2-base'> + <hostCPU type='kvm' model='zEC12.2-base'> <property name='aefsi' boolean='yes'/> <property name='msa5' boolean='yes'/> <property name='msa4' boolean='yes'/> diff --git a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.replies b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.replies index 8d54788df..390f40f9f 100644 --- a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.replies @@ -14708,3 +14708,182 @@ ], "id": "libvirt-2" } + +{ + "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-3" +} diff --git a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml index 32368e648..520bf80f4 100644 --- a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml @@ -205,7 +205,7 @@ <kvmVersion>0</kvmVersion> <package> (v2.8.0-877-g38e4b757b4)</package> <arch>x86_64</arch> - <hostCPU model='base'> + <hostCPU type='kvm' model='base'> <property name='cmov' boolean='yes'/> <property name='ia64' boolean='no'/> <property name='aes' boolean='yes'/> @@ -375,6 +375,176 @@ <property name='avx512pf' boolean='no'/> <property name='xstore-en' boolean='no'/> </hostCPU> + <hostCPU type='tcg' model='base'> + <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='pause-filter' boolean='no'/> + <property name='xsavec' boolean='no'/> + <property name='osxsave' boolean='no'/> + <property name='kvm-asyncpf' 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='sse4.1' boolean='yes'/> + <property name='family' ull='6'/> + <property name='avx512f' boolean='no'/> + <property name='msr' boolean='yes'/> + <property name='mce' boolean='yes'/> + <property name='mca' boolean='yes'/> + <property name='xcrypt' boolean='no'/> + <property name='min-level' ull='13'/> + <property name='xgetbv1' boolean='yes'/> + <property name='cid' boolean='no'/> + <property name='ds' boolean='no'/> + <property name='fxsr' boolean='yes'/> + <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='extapic' boolean='no'/> + <property name='3dnowprefetch' boolean='no'/> + <property name='cr8legacy' boolean='yes'/> + <property name='xcrypt-en' boolean='no'/> + <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='avx512-4fmaps' boolean='no'/> + <property name='vmcb-clean' boolean='no'/> + <property name='hle' boolean='no'/> + <property name='3dnowext' boolean='yes'/> + <property name='npt' boolean='no'/> + <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='smep' boolean='yes'/> + <property name='smap' boolean='yes'/> + <property name='pfthreshold' boolean='no'/> + <property name='x2apic' boolean='no'/> + <property name='avx512vbmi' boolean='no'/> + <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='sse' boolean='yes'/> + <property name='phe-en' 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='pcommit' boolean='yes'/> + <property name='syscall' boolean='yes'/> + <property name='avx512dq' boolean='no'/> + <property name='svm' boolean='yes'/> + <property name='invtsc' boolean='no'/> + <property name='sse2' boolean='yes'/> + <property name='est' boolean='no'/> + <property name='avx512ifma' boolean='no'/> + <property name='tm2' boolean='no'/> + <property name='kvm-pv-eoi' boolean='no'/> + <property name='cx8' boolean='yes'/> + <property name='kvm-mmu' boolean='no'/> + <property name='sse4.2' boolean='yes'/> + <property name='pge' boolean='yes'/> + <property name='pdcm' 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='sse4a' boolean='yes'/> + <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='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='fpu' boolean='yes'/> + <property name='ds-cpl' boolean='no'/> + <property name='ibs' boolean='no'/> + <property name='fma4' boolean='no'/> + <property name='la57' boolean='yes'/> + <property name='osvw' boolean='no'/> + <property name='apic' boolean='yes'/> + <property name='pmm' boolean='no'/> + <property name='tsc-adjust' boolean='no'/> + <property name='kvm-steal-time' boolean='no'/> + <property name='kvmclock' boolean='no'/> + <property name='lwp' boolean='no'/> + <property name='xop' boolean='no'/> + <property name='avx' boolean='no'/> + <property name='ospke' boolean='yes'/> + <property name='acpi' boolean='yes'/> + <property name='avx512bw' boolean='no'/> + <property name='ace2' boolean='no'/> + <property name='fsgsbase' boolean='yes'/> + <property name='ht' boolean='no'/> + <property name='nx' boolean='yes'/> + <property name='pclmulqdq' boolean='yes'/> + <property name='mmxext' boolean='yes'/> + <property name='popcnt' boolean='yes'/> + <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='sep' boolean='yes'/> + <property name='nodeid-msr' boolean='no'/> + <property name='misalignsse' boolean='no'/> + <property name='min-xlevel' ull='2147483658'/> + <property name='bmi1' boolean='yes'/> + <property name='bmi2' boolean='yes'/> + <property name='kvm-pv-unhalt' boolean='no'/> + <property name='tsc-scale' boolean='no'/> + <property name='topoext' boolean='no'/> + <property name='clflushopt' boolean='yes'/> + <property name='monitor' boolean='yes'/> + <property name='avx512er' boolean='no'/> + <property name='pmm-en' boolean='no'/> + <property name='pcid' boolean='no'/> + <property name='3dnow' boolean='yes'/> + <property name='erms' boolean='yes'/> + <property name='lahf-lm' boolean='yes'/> + <property name='fxsr-opt' boolean='no'/> + <property name='xstore' boolean='no'/> + <property name='rtm' boolean='no'/> + <property name='lmce' boolean='no'/> + <property name='perfctr-nb' boolean='no'/> + <property name='rdrand' boolean='no'/> + <property name='rdseed' boolean='no'/> + <property name='avx512-4vnniw' boolean='no'/> + <property name='vme' boolean='no'/> + <property name='vmx' boolean='no'/> + <property name='dtes64' boolean='no'/> + <property name='mtrr' boolean='yes'/> + <property name='rdtscp' boolean='yes'/> + <property name='pse36' boolean='yes'/> + <property name='tbm' boolean='no'/> + <property name='wdt' boolean='no'/> + <property name='model-id' string='QEMU TCG CPU version 2.5+'/> + <property name='sha-ni' boolean='no'/> + <property name='abm' boolean='yes'/> + <property name='avx512pf' boolean='no'/> + <property name='xstore-en' boolean='no'/> + </hostCPU> <cpu type='kvm' name='max' usable='yes'/> <cpu type='kvm' name='host' usable='yes'/> <cpu type='kvm' name='base' usable='yes'/> diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index faa99c64c..5ba2eeab9 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -384,7 +384,8 @@ testUpdateQEMUCaps(const struct testInfo *info, if (testAddCPUModels(info->qemuCaps, info->skipLegacyCPUs) < 0) goto cleanup;
- virQEMUCapsInitHostCPUModel(info->qemuCaps, caps); + virQEMUCapsInitHostCPUModel(info->qemuCaps, caps, VIR_DOMAIN_VIRT_KVM); + virQEMUCapsInitHostCPUModel(info->qemuCaps, caps, VIR_DOMAIN_VIRT_QEMU);
virQEMUCapsFilterByMachineType(info->qemuCaps, vm->def->os.machine);

On Tue, Feb 21, 2017 at 12:24:19 -0500, John Ferlan wrote:
On 02/15/2017 11:44 AM, Jiri Denemark wrote:
Querying "host" CPU model expansion only makes sense for KVM. QEMU 2.9.0 introduces a new "max" CPU model which can be used to ask QEMU what the best CPU it can provide to a TCG domain is.
But how do we know "max" is available to be used for TCG? It seems to me that virQEMUCapsProbeQMPHostCPU now is changed such that there's an assumption that "max" is available, but the above makes it appear as if it's a new paremter/attribute [1].
We don't know if max is available, we just try to probe it. And if it succeeds we know it's available and we can use the returned CPU model. If max model is not available, the code does the same thing it did before this patch series.
Every time I see TCG I think "Trusted Computing Group" and I certainly don't think VIR_DOMAIN_TYPE_QEMU. What gets "confusing" eventually is that virQEMUCapsInitHostCPUModel is called with VIR_DOMAIN_VIRT_KVM and VIR_DOMAIN_VIRT_QEMU, but qemuCaps->tcgCPUModel is filled in for VIR_DOMAIN_VIRT_QEMU.
"tcg" and "kvm" is the QEMU's terminology while in libvirt we use VIR_DOMAIN_TYPE_QEMU and VIR_DOMAIN_VIRT_KVM to distinguish between the two types of domains our QEMU driver supports. Both are clear, but VIR_DOMAIN_TYPE_QEMU is pretty long and shortening it to "qemu" and "kvm" would be very confusing. That's why I use the QEMU's terminology when referring to the types of domains.
It's not overtly obvious to me from just reading the commit message, but it seems TCG now becomes a fallback position of sorts which I think is fine, it's just not described.
It's not described because it doesn't happen. Both the supported CPU models and the host CPU model depend on the accelerator (tcg/kvm) so we need to probe QEMU for both. We only probe kvm if it's available, but tcg is always checked. ...
@@ -2822,14 +2838,24 @@ virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qemuCaps,
static int virQEMUCapsProbeQMPHostCPU(virQEMUCapsPtr qemuCaps, - qemuMonitorPtr mon) + qemuMonitorPtr mon, + bool tcg) { - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION) || - !virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) + qemuMonitorCPUModelInfoPtr *modelInfo; + const char *model; + + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION)) return 0;
So if no model expansion, then neither is filled in, but there are later checks which seem to assume one or the other is filled in. I didn't chase all the callers to check whether they would expect/require something to be filled in (too many patches, too little time).
Nope, none of them needs to be set. The code will fallback to using the host CPU model from host capabilities probed directly by libvirt. The only users of the {kvm,tcg}CPUModelInfo are virQEMUCapsInitCPUModel* which transform the raw data from QEMU into virCPUDefPtr {kvm,tcg}CPUModel.
- return qemuMonitorGetCPUModelExpansion(mon, "static", "host", - &qemuCaps->hostCPUModelInfo); + if (tcg || !virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) {
[1] It's noot clear to the casual reviewer when tcg and in particular the "max" parameter was supported. IOW: The first thought I had was why isn't there a capability being checked for "max" being available. The commit message seems to indicate that it's new for 2.9.0, but I don't see a libvirt capability check for it being available before being used.
As already said, if max is not available, tcgCPUModelInfo will be NULL, virQEMUCapsInitCPUModel will return 1, and virQEMUCapsInitHostCPUModel will take the ``VIR_DEBUG("No host CPU model info from QEMU; using host capabilities");'' branch.
The logic changes now such that if !QEMU_CAPS_KVM that model expansion is called with "max"; whereas, previously a 0 was returned.
If "max" or query-cpu-model-expansion are not available, qemuMonitorJSONGetCPUModelExpansion will return 0, which is exactly what happened before. If both are available, we'll get the description of the "max" CPU model in tcgCPUModelInfo.
Thus if !tcg and !QEMU_CAPS_KVM, then "max" is used and ModelExpansion is called. If TCG becomes the "de facto" default -
virQEMUCapsProbeQMPHostCPU may be called twice. First time it is called with tcg == false and it uses the QEMU_CAPS_KVM capability to see whether it is probing QEMU using tcg or kvm accelerator. Now if kvm was not available we have tcgCPUModelInfo filled in (if max is available, of course) and we're done. If kvm was available, we have kvmCPUModelInfo filled in (if model expansion is available) and virQEMUCapsProbeQMPHostCPU will be called once more with tcg == true to try to set tcgCPUModelInfo. ...
@@ -3560,12 +3607,26 @@ virQEMUCapsLoadCache(virCapsPtr caps,
static void virQEMUCapsFormatHostCPUModelInfo(virQEMUCapsPtr qemuCaps, - virBufferPtr buf) + virBufferPtr buf, + virDomainVirtType type) { - qemuMonitorCPUModelInfoPtr model = qemuCaps->hostCPUModelInfo; + qemuMonitorCPUModelInfoPtr model; + const char *typeStr; size_t i;
- virBufferAsprintf(buf, "<hostCPU model='%s'>\n", model->name); + if (type == VIR_DOMAIN_VIRT_KVM) { + typeStr = "kvm"; + model = qemuCaps->kvmCPUModelInfo; + } else { + typeStr = "tcg"; + model = qemuCaps->tcgCPUModelInfo; + } + + if (!model) + return;
if !model can happen, how does that affect other places which assume that are making a similar check to decide which ModelInfo to use?
!model means we cannot use the "host" or "max" CPU model data from QEMU and thus the CPU model from host capabilities XML will be used instead.
Also this is "similar" to virQEMUCapsGetHostModel at least for 'model'...
It's not. Are you confusing *CPUModelInfo with *CPUModel? The first one is the raw data from QEMU while the second one is virCPUDefPtr. Only the latter is ever used anywhere in the code. The raw data gets only stored in the capabilities cache and used for creating the virCPUDefPtr. ...
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 92fa69b3c..b9df01da5 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -5147,13 +5147,14 @@ qemuProcessUpdateGuestCPU(virDomainDefPtr def, /* custom CPUs in TCG mode don't need to be compared to host CPU */ if (def->virtType != VIR_DOMAIN_VIRT_QEMU || def->cpu->mode != VIR_CPU_MODE_CUSTOM) { - if (virCPUCompare(caps->host.arch, virQEMUCapsGetHostModel(qemuCaps), + if (virCPUCompare(caps->host.arch, + virQEMUCapsGetHostModel(qemuCaps, def->virtType),
THis is about where I started wondering about a NULL return here and the "default" of TCG now...
There's no "default" of TCG. According to the requested virtType we will either use kvmCPUModel or tcgCPUModel. Either of them can either be just a copy of the host CPU model from host capabilities or a model we got by querying QEMU (i.e., asking for a model expansion of either "host" or "max") or it can even be NULL. However, NULL means we cannot detect host CPU model and thus host-model CPU mode is not supported. In any case virCPUCompare will report an appropriate error if it founds host CPU model is not set but required to do the job.
Although looking at the code around it, this would seemingly only be called for passthrough or host-model, true?
Nope. It's never called for host-passthrough. It can only be called for either host-model or custom CPUs. ...
diff --git a/tests/qemucapabilitiesdata/caps_2.8.0.s390x.replies b/tests/qemucapabilitiesdata/caps_2.8.0.s390x.replies index 0405d5d7b..c3cbeee0a 100644 --- a/tests/qemucapabilitiesdata/caps_2.8.0.s390x.replies +++ b/tests/qemucapabilitiesdata/caps_2.8.0.s390x.replies @@ -13378,3 +13378,11 @@ ], "id": "libvirt-2" } + +{ + "id": "libvirt-3", + "error": { + "class": "GenericError", + "desc": "The CPU definition 'max' is unknown." + } +}
And this seems to indicate my comments before in virQEMUCapsProbeQMPHostCPU - if "max" isn't available, but tcg is true or if !QEMU_CAPS_KVM, then "max" will be tried, which doesn't seem right.
Yes, it will be tried and the error will be ignored.
Also does something similar need to be done in caps_2.8.0.x86_64 or does it not really matter since if it doesn't exist, it wouldn't be defined or usable.
QEMU 2.8.0 on x86_64 does not have QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION set and thus we will never ask it for any model expansion. Jirka

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - no change src/cpu/cpu.c | 19 +++++++++++++++++++ src/cpu/cpu.h | 3 +++ src/libvirt_private.syms | 1 + 3 files changed, 23 insertions(+) diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c index 64419eee3..3063f00eb 100644 --- a/src/cpu/cpu.c +++ b/src/cpu/cpu.c @@ -312,6 +312,25 @@ cpuEncode(virArch arch, /** + * virCPUDataNew: + * + * Returns an allocated memory for virCPUData or NULL on error. + */ +virCPUDataPtr +virCPUDataNew(virArch arch) +{ + virCPUDataPtr data; + + if (VIR_ALLOC(data) < 0) + return NULL; + + data->arch = arch; + + return data; +} + + +/** * cpuDataFree: * * @data: CPU data structure to be freed diff --git a/src/cpu/cpu.h b/src/cpu/cpu.h index 69c17e72a..ceb1e7256 100644 --- a/src/cpu/cpu.h +++ b/src/cpu/cpu.h @@ -162,6 +162,9 @@ cpuEncode (virArch arch, virCPUDataPtr *vendor) ATTRIBUTE_NONNULL(2); +virCPUDataPtr +virCPUDataNew(virArch arch); + void cpuDataFree (virCPUDataPtr data); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 6bbb36b4e..a2bcc6241 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -997,6 +997,7 @@ virCPUCompareXML; virCPUConvertLegacy; virCPUDataCheckFeature; virCPUDataFormat; +virCPUDataNew; virCPUDataParse; virCPUGetModels; virCPUTranslate; -- 2.11.1

On 02/15/2017 11:44 AM, Jiri Denemark wrote:
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
src/cpu/cpu.c | 19 +++++++++++++++++++ src/cpu/cpu.h | 3 +++ src/libvirt_private.syms | 1 + 3 files changed, 23 insertions(+)
ACK, John

On Tue, Feb 21, 2017 at 14:32:09 -0500, John Ferlan wrote:
On 02/15/2017 11:44 AM, Jiri Denemark wrote:
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
src/cpu/cpu.c | 19 +++++++++++++++++++ src/cpu/cpu.h | 3 +++ src/libvirt_private.syms | 1 + 3 files changed, 23 insertions(+)
Thanks. I pushed it since it didn't have any dependencies on the other patches in this series. Jirka

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - no change src/cpu/cpu_x86.c | 147 ++++++++++++++++++----------------------- src/cpu/cpu_x86.h | 3 - src/libvirt_private.syms | 1 - src/libxl/libxl_capabilities.c | 18 ++--- src/qemu/qemu_monitor_json.c | 33 ++++----- 5 files changed, 92 insertions(+), 110 deletions(-) diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index d9764a260..ccd68b681 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -303,22 +303,6 @@ virCPUx86DataClear(virCPUx86Data *data) } -virCPUDataPtr -virCPUx86MakeData(virArch arch, virCPUx86Data *data) -{ - virCPUDataPtr cpuData; - - if (VIR_ALLOC(cpuData) < 0) - return NULL; - - cpuData->arch = arch; - cpuData->data.x86 = *data; - data->len = 0; - data->data = NULL; - - return cpuData; -} - static void x86FreeCPUData(virCPUDataPtr data) { @@ -1441,7 +1425,6 @@ virCPUx86DataParse(xmlXPathContextPtr ctxt) { xmlNodePtr *nodes = NULL; virCPUDataPtr cpuData = NULL; - virCPUx86Data data = VIR_CPU_X86_DATA_INIT; virCPUx86CPUID cpuid; size_t i; int n; @@ -1450,26 +1433,31 @@ virCPUx86DataParse(xmlXPathContextPtr ctxt) if (n <= 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("no x86 CPU data found")); - goto cleanup; + goto error; } + if (!(cpuData = virCPUDataNew(VIR_ARCH_X86_64))) + goto error; + for (i = 0; i < n; i++) { ctxt->node = nodes[i]; if (x86ParseCPUID(ctxt, &cpuid) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("failed to parse cpuid[%zu]"), i); - goto cleanup; + goto error; } - if (virCPUx86DataAddCPUID(&data, &cpuid) < 0) - goto cleanup; + if (virCPUx86DataAddCPUID(&cpuData->data.x86, &cpuid) < 0) + goto error; } - cpuData = virCPUx86MakeData(VIR_ARCH_X86_64, &data); - cleanup: VIR_FREE(nodes); - virCPUx86DataClear(&data); return cpuData; + + error: + x86FreeCPUData(cpuData); + cpuData = NULL; + goto cleanup; } @@ -1514,7 +1502,7 @@ x86Compute(virCPUDefPtr host, virCPUx86ModelPtr cpu_forbid = NULL; virCPUx86ModelPtr diff = NULL; virCPUx86ModelPtr guest_model = NULL; - virCPUx86Data guestData = VIR_CPU_X86_DATA_INIT; + virCPUDataPtr guestData = NULL; virCPUCompareResult ret; virCPUx86CompareResult result; virArch arch; @@ -1633,9 +1621,11 @@ x86Compute(virCPUDefPtr host, x86DataSubtract(&guest_model->data, &cpu_disable->data); - if (x86DataCopy(&guestData, &guest_model->data) < 0 || - !(*guest = virCPUx86MakeData(arch, &guestData))) + if (!(guestData = virCPUDataNew(arch)) || + x86DataCopy(&guestData->data.x86, &guest_model->data) < 0) goto error; + + *guest = guestData; } cleanup: @@ -1647,11 +1637,11 @@ x86Compute(virCPUDefPtr host, x86ModelFree(cpu_disable); x86ModelFree(cpu_forbid); x86ModelFree(guest_model); - virCPUx86DataClear(&guestData); return ret; error: + x86FreeCPUData(guestData); ret = VIR_CPU_COMPARE_ERROR; goto cleanup; } @@ -1958,12 +1948,12 @@ x86Encode(virArch arch, virCPUDataPtr *vendor) { virCPUx86MapPtr map = NULL; - virCPUx86Data data_forced = VIR_CPU_X86_DATA_INIT; - virCPUx86Data data_required = VIR_CPU_X86_DATA_INIT; - virCPUx86Data data_optional = VIR_CPU_X86_DATA_INIT; - virCPUx86Data data_disabled = VIR_CPU_X86_DATA_INIT; - virCPUx86Data data_forbidden = VIR_CPU_X86_DATA_INIT; - virCPUx86Data data_vendor = VIR_CPU_X86_DATA_INIT; + virCPUDataPtr data_forced = NULL; + virCPUDataPtr data_required = NULL; + virCPUDataPtr data_optional = NULL; + virCPUDataPtr data_disabled = NULL; + virCPUDataPtr data_forbidden = NULL; + virCPUDataPtr data_vendor = NULL; if (forced) *forced = NULL; @@ -1982,23 +1972,33 @@ x86Encode(virArch arch, goto error; if (forced && - x86EncodePolicy(&data_forced, cpu, map, VIR_CPU_FEATURE_FORCE) < 0) + (!(data_forced = virCPUDataNew(arch)) || + x86EncodePolicy(&data_forced->data.x86, cpu, map, + VIR_CPU_FEATURE_FORCE) < 0)) goto error; if (required && - x86EncodePolicy(&data_required, cpu, map, VIR_CPU_FEATURE_REQUIRE) < 0) + (!(data_required = virCPUDataNew(arch)) || + x86EncodePolicy(&data_required->data.x86, cpu, map, + VIR_CPU_FEATURE_REQUIRE) < 0)) goto error; if (optional && - x86EncodePolicy(&data_optional, cpu, map, VIR_CPU_FEATURE_OPTIONAL) < 0) + (!(data_optional = virCPUDataNew(arch)) || + x86EncodePolicy(&data_optional->data.x86, cpu, map, + VIR_CPU_FEATURE_OPTIONAL) < 0)) goto error; if (disabled && - x86EncodePolicy(&data_disabled, cpu, map, VIR_CPU_FEATURE_DISABLE) < 0) + (!(data_disabled = virCPUDataNew(arch)) || + x86EncodePolicy(&data_disabled->data.x86, cpu, map, + VIR_CPU_FEATURE_DISABLE) < 0)) goto error; if (forbidden && - x86EncodePolicy(&data_forbidden, cpu, map, VIR_CPU_FEATURE_FORBID) < 0) + (!(data_forbidden = virCPUDataNew(arch)) || + x86EncodePolicy(&data_forbidden->data.x86, cpu, map, + VIR_CPU_FEATURE_FORBID) < 0)) goto error; if (vendor) { @@ -2010,50 +2010,35 @@ x86Encode(virArch arch, goto error; } - if (v && virCPUx86DataAddCPUID(&data_vendor, &v->cpuid) < 0) + if (!(data_vendor = virCPUDataNew(arch))) + goto error; + + if (v && virCPUx86DataAddCPUID(&data_vendor->data.x86, &v->cpuid) < 0) goto error; } - if (forced && - !(*forced = virCPUx86MakeData(arch, &data_forced))) - goto error; - if (required && - !(*required = virCPUx86MakeData(arch, &data_required))) - goto error; - if (optional && - !(*optional = virCPUx86MakeData(arch, &data_optional))) - goto error; - if (disabled && - !(*disabled = virCPUx86MakeData(arch, &data_disabled))) - goto error; - if (forbidden && - !(*forbidden = virCPUx86MakeData(arch, &data_forbidden))) - goto error; - if (vendor && - !(*vendor = virCPUx86MakeData(arch, &data_vendor))) - goto error; + if (forced) + *forced = data_forced; + if (required) + *required = data_required; + if (optional) + *optional = data_optional; + if (disabled) + *disabled = data_disabled; + if (forbidden) + *forbidden = data_forbidden; + if (vendor) + *vendor = data_vendor; return 0; error: - virCPUx86DataClear(&data_forced); - virCPUx86DataClear(&data_required); - virCPUx86DataClear(&data_optional); - virCPUx86DataClear(&data_disabled); - virCPUx86DataClear(&data_forbidden); - virCPUx86DataClear(&data_vendor); - if (forced) - x86FreeCPUData(*forced); - if (required) - x86FreeCPUData(*required); - if (optional) - x86FreeCPUData(*optional); - if (disabled) - x86FreeCPUData(*disabled); - if (forbidden) - x86FreeCPUData(*forbidden); - if (vendor) - x86FreeCPUData(*vendor); + x86FreeCPUData(data_forced); + x86FreeCPUData(data_required); + x86FreeCPUData(data_optional); + x86FreeCPUData(data_disabled); + x86FreeCPUData(data_forbidden); + x86FreeCPUData(data_vendor); return -1; } @@ -2382,22 +2367,20 @@ static virCPUDataPtr x86NodeData(virArch arch) { virCPUDataPtr cpuData = NULL; - virCPUx86Data data = VIR_CPU_X86_DATA_INIT; - if (cpuidSet(CPUX86_BASIC, &data) < 0) + if (!(cpuData = virCPUDataNew(arch))) goto error; - if (cpuidSet(CPUX86_EXTENDED, &data) < 0) + if (cpuidSet(CPUX86_BASIC, &cpuData->data.x86) < 0) goto error; - if (!(cpuData = virCPUx86MakeData(arch, &data))) + if (cpuidSet(CPUX86_EXTENDED, &cpuData->data.x86) < 0) goto error; return cpuData; error: - virCPUx86DataClear(&data); - + x86FreeCPUData(cpuData); return NULL; } #endif diff --git a/src/cpu/cpu_x86.h b/src/cpu/cpu_x86.h index 09b95a5a2..8c8c6ed4f 100644 --- a/src/cpu/cpu_x86.h +++ b/src/cpu/cpu_x86.h @@ -34,7 +34,4 @@ int virCPUx86DataAddCPUID(virCPUx86Data *data, void virCPUx86DataClear(virCPUx86Data *data); -virCPUDataPtr virCPUx86MakeData(virArch arch, - virCPUx86Data *data); - #endif /* __VIR_CPU_X86_H__ */ diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index a2bcc6241..b4f61c87e 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1007,7 +1007,6 @@ virCPUUpdate; # cpu/cpu_x86.h virCPUx86DataAddCPUID; virCPUx86DataClear; -virCPUx86MakeData; # datatypes.h diff --git a/src/libxl/libxl_capabilities.c b/src/libxl/libxl_capabilities.c index 2bbd2d1b4..622e9f6bb 100644 --- a/src/libxl/libxl_capabilities.c +++ b/src/libxl/libxl_capabilities.c @@ -65,14 +65,14 @@ struct guest_arch { #define XEN_CAP_REGEX "(xen|hvm)-[[:digit:]]+\\.[[:digit:]]+-(aarch64|armv7l|x86_32|x86_64|ia64|powerpc64)(p|be)?" static int -libxlCapsAddCPUID(virCPUx86Data *data, virCPUx86CPUID *cpuid, ssize_t ncaps) +libxlCapsAddCPUID(virCPUDataPtr data, virCPUx86CPUID *cpuid, ssize_t ncaps) { size_t i; for (i = 0; i < ncaps; i++) { virCPUx86CPUID *c = &cpuid[i]; - if (virCPUx86DataAddCPUID(data, c) < 0) { + if (virCPUx86DataAddCPUID(&data->data.x86, c) < 0) { VIR_DEBUG("Failed to add CPUID(%x,%x)", c->eax_in, c->ecx_in); return -1; } @@ -112,7 +112,6 @@ libxlCapsNodeData(virCPUDefPtr cpu, libxl_hwcap hwcap, { ssize_t ncaps; virCPUDataPtr cpudata = NULL; - virCPUx86Data data = VIR_CPU_X86_DATA_INIT; virCPUx86CPUID cpuid[] = { { .eax_in = 0x00000001, .edx = hwcap[0] }, @@ -131,20 +130,23 @@ libxlCapsNodeData(virCPUDefPtr cpu, libxl_hwcap hwcap, { .eax_in = 0x80000007, .ecx_in = 0U, .edx = hwcap[7] }, }; + if (!(cpudata = virCPUDataNew(cpu->arch))) + goto error; + ncaps = ARRAY_CARDINALITY(cpuid); - if (libxlCapsAddCPUID(&data, cpuid, ncaps) < 0) + if (libxlCapsAddCPUID(cpudata, cpuid, ncaps) < 0) goto error; ncaps = ARRAY_CARDINALITY(cpuid_ver1); if (version > LIBXL_HWCAP_V0 && - libxlCapsAddCPUID(&data, cpuid_ver1, ncaps) < 0) + libxlCapsAddCPUID(cpudata, cpuid_ver1, ncaps) < 0) goto error; - cpudata = virCPUx86MakeData(cpu->arch, &data); + return cpudata; error: - virCPUx86DataClear(&data); - return cpudata; + cpuDataFree(cpudata); + return NULL; } /* hw_caps is an array of 32-bit words whose meaning is listed in diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 415761525..b4da12167 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -6565,37 +6565,35 @@ qemuMonitorJSONParseCPUx86FeatureWord(virJSONValuePtr data, } -static int -qemuMonitorJSONParseCPUx86Features(virJSONValuePtr data, - virCPUDataPtr *cpudata) +static virCPUDataPtr +qemuMonitorJSONParseCPUx86Features(virJSONValuePtr data) { - virCPUx86Data x86Data = VIR_CPU_X86_DATA_INIT; + virCPUDataPtr cpudata = NULL; virCPUx86CPUID cpuid; size_t i; ssize_t n; - int ret = -1; if (!data || (n = virJSONValueArraySize(data)) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("invalid array of CPUID features")); - return -1; + goto error; } + if (!(cpudata = virCPUDataNew(VIR_ARCH_X86_64))) + goto error; + for (i = 0; i < n; i++) { if (qemuMonitorJSONParseCPUx86FeatureWord(virJSONValueArrayGet(data, i), &cpuid) < 0 || - virCPUx86DataAddCPUID(&x86Data, &cpuid) < 0) - goto cleanup; + virCPUx86DataAddCPUID(&cpudata->data.x86, &cpuid) < 0) + goto error; } - if (!(*cpudata = virCPUx86MakeData(VIR_ARCH_X86_64, &x86Data))) - goto cleanup; + return cpudata; - ret = 0; - - cleanup: - virCPUx86DataClear(&x86Data); - return ret; + error: + cpuDataFree(cpudata); + return NULL; } @@ -6622,7 +6620,10 @@ qemuMonitorJSONGetCPUx86Data(qemuMonitorPtr mon, goto cleanup; data = virJSONValueObjectGetArray(reply, "return"); - ret = qemuMonitorJSONParseCPUx86Features(data, cpudata); + if (!(*cpudata = qemuMonitorJSONParseCPUx86Features(data))) + goto cleanup; + + ret = 0; cleanup: virJSONValueFree(cmd); -- 2.11.1

On 02/15/2017 11:44 AM, Jiri Denemark wrote:
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
src/cpu/cpu_x86.c | 147 ++++++++++++++++++----------------------- src/cpu/cpu_x86.h | 3 - src/libvirt_private.syms | 1 - src/libxl/libxl_capabilities.c | 18 ++--- src/qemu/qemu_monitor_json.c | 33 ++++----- 5 files changed, 92 insertions(+), 110 deletions(-)
[...]
diff --git a/src/libxl/libxl_capabilities.c b/src/libxl/libxl_capabilities.c index 2bbd2d1b4..622e9f6bb 100644 --- a/src/libxl/libxl_capabilities.c +++ b/src/libxl/libxl_capabilities.c @@ -65,14 +65,14 @@ struct guest_arch { #define XEN_CAP_REGEX "(xen|hvm)-[[:digit:]]+\\.[[:digit:]]+-(aarch64|armv7l|x86_32|x86_64|ia64|powerpc64)(p|be)?"
static int -libxlCapsAddCPUID(virCPUx86Data *data, virCPUx86CPUID *cpuid, ssize_t ncaps) +libxlCapsAddCPUID(virCPUDataPtr data, virCPUx86CPUID *cpuid, ssize_t ncaps) { size_t i;
for (i = 0; i < ncaps; i++) { virCPUx86CPUID *c = &cpuid[i];
- if (virCPUx86DataAddCPUID(data, c) < 0) { + if (virCPUx86DataAddCPUID(&data->data.x86, c) < 0) { VIR_DEBUG("Failed to add CPUID(%x,%x)", c->eax_in, c->ecx_in); return -1; } @@ -112,7 +112,6 @@ libxlCapsNodeData(virCPUDefPtr cpu, libxl_hwcap hwcap, { ssize_t ncaps; virCPUDataPtr cpudata = NULL; - virCPUx86Data data = VIR_CPU_X86_DATA_INIT; virCPUx86CPUID cpuid[] = { { .eax_in = 0x00000001, .edx = hwcap[0] }, @@ -131,20 +130,23 @@ libxlCapsNodeData(virCPUDefPtr cpu, libxl_hwcap hwcap, { .eax_in = 0x80000007, .ecx_in = 0U, .edx = hwcap[7] }, };
+ if (!(cpudata = virCPUDataNew(cpu->arch))) + goto error; + ncaps = ARRAY_CARDINALITY(cpuid); - if (libxlCapsAddCPUID(&data, cpuid, ncaps) < 0) + if (libxlCapsAddCPUID(cpudata, cpuid, ncaps) < 0) goto error;
ncaps = ARRAY_CARDINALITY(cpuid_ver1); if (version > LIBXL_HWCAP_V0 && - libxlCapsAddCPUID(&data, cpuid_ver1, ncaps) < 0) + libxlCapsAddCPUID(cpudata, cpuid_ver1, ncaps) < 0) goto error;
- cpudata = virCPUx86MakeData(cpu->arch, &data); + return cpudata;
error: - virCPUx86DataClear(&data); - return cpudata; + cpuDataFree(cpudata);
Why is this not x86FreeCPUData ? Or should other code use the cpuDataFree? Am I missing something subtle?
+ return NULL; }
/* hw_caps is an array of 32-bit words whose meaning is listed in diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 415761525..b4da12167 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -6565,37 +6565,35 @@ qemuMonitorJSONParseCPUx86FeatureWord(virJSONValuePtr data, }
-static int -qemuMonitorJSONParseCPUx86Features(virJSONValuePtr data, - virCPUDataPtr *cpudata) +static virCPUDataPtr +qemuMonitorJSONParseCPUx86Features(virJSONValuePtr data) { - virCPUx86Data x86Data = VIR_CPU_X86_DATA_INIT; + virCPUDataPtr cpudata = NULL; virCPUx86CPUID cpuid; size_t i; ssize_t n; - int ret = -1;
if (!data || (n = virJSONValueArraySize(data)) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("invalid array of CPUID features")); - return -1; + goto error;
Could just return NULL, right?
}
+ if (!(cpudata = virCPUDataNew(VIR_ARCH_X86_64))) + goto error; + for (i = 0; i < n; i++) { if (qemuMonitorJSONParseCPUx86FeatureWord(virJSONValueArrayGet(data, i), &cpuid) < 0 || - virCPUx86DataAddCPUID(&x86Data, &cpuid) < 0) - goto cleanup; + virCPUx86DataAddCPUID(&cpudata->data.x86, &cpuid) < 0) + goto error; }
- if (!(*cpudata = virCPUx86MakeData(VIR_ARCH_X86_64, &x86Data))) - goto cleanup; + return cpudata;
- ret = 0; - - cleanup: - virCPUx86DataClear(&x86Data); - return ret; + error: + cpuDataFree(cpudata);
Similar query about x86FreeCPUData usage. Otherwise, things look fine... Perhaps a moot point since path 16 makes a common API... Perhaps the only reason to change would be if bisection breaks. ACK - I'll leave it to you to handle the calls properly John
+ return NULL; }
@@ -6622,7 +6620,10 @@ qemuMonitorJSONGetCPUx86Data(qemuMonitorPtr mon, goto cleanup;
data = virJSONValueObjectGetArray(reply, "return"); - ret = qemuMonitorJSONParseCPUx86Features(data, cpudata); + if (!(*cpudata = qemuMonitorJSONParseCPUx86Features(data))) + goto cleanup; + + ret = 0;
cleanup: virJSONValueFree(cmd);

On Tue, Feb 21, 2017 at 14:42:39 -0500, John Ferlan wrote: ...
@@ -131,20 +130,23 @@ libxlCapsNodeData(virCPUDefPtr cpu, libxl_hwcap hwcap, { .eax_in = 0x80000007, .ecx_in = 0U, .edx = hwcap[7] }, };
+ if (!(cpudata = virCPUDataNew(cpu->arch))) + goto error; + ncaps = ARRAY_CARDINALITY(cpuid); - if (libxlCapsAddCPUID(&data, cpuid, ncaps) < 0) + if (libxlCapsAddCPUID(cpudata, cpuid, ncaps) < 0) goto error;
ncaps = ARRAY_CARDINALITY(cpuid_ver1); if (version > LIBXL_HWCAP_V0 && - libxlCapsAddCPUID(&data, cpuid_ver1, ncaps) < 0) + libxlCapsAddCPUID(cpudata, cpuid_ver1, ncaps) < 0) goto error;
- cpudata = virCPUx86MakeData(cpu->arch, &data); + return cpudata;
error: - virCPUx86DataClear(&data); - return cpudata; + cpuDataFree(cpudata);
Why is this not x86FreeCPUData ? Or should other code use the cpuDataFree? Am I missing something subtle?
You are. Previously we were freeing virCPUx86Data data, while now the code is freeing virCPUDataPtr cpudata. Originally cpudata was created from data at the very end of the successful path in this function, but now we have cpudata all time.
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 415761525..b4da12167 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -6565,37 +6565,35 @@ qemuMonitorJSONParseCPUx86FeatureWord(virJSONValuePtr data, }
-static int -qemuMonitorJSONParseCPUx86Features(virJSONValuePtr data, - virCPUDataPtr *cpudata) +static virCPUDataPtr +qemuMonitorJSONParseCPUx86Features(virJSONValuePtr data) { - virCPUx86Data x86Data = VIR_CPU_X86_DATA_INIT; + virCPUDataPtr cpudata = NULL; virCPUx86CPUID cpuid; size_t i; ssize_t n; - int ret = -1;
if (!data || (n = virJSONValueArraySize(data)) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("invalid array of CPUID features")); - return -1; + goto error;
Could just return NULL, right?
Yes.
}
+ if (!(cpudata = virCPUDataNew(VIR_ARCH_X86_64))) + goto error; + for (i = 0; i < n; i++) { if (qemuMonitorJSONParseCPUx86FeatureWord(virJSONValueArrayGet(data, i), &cpuid) < 0 || - virCPUx86DataAddCPUID(&x86Data, &cpuid) < 0) - goto cleanup; + virCPUx86DataAddCPUID(&cpudata->data.x86, &cpuid) < 0) + goto error; }
- if (!(*cpudata = virCPUx86MakeData(VIR_ARCH_X86_64, &x86Data))) - goto cleanup; + return cpudata;
- ret = 0; - - cleanup: - virCPUx86DataClear(&x86Data); - return ret; + error: + cpuDataFree(cpudata);
Similar query about x86FreeCPUData usage.
Similar answer. Jirka

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - no change src/cpu/cpu_x86.c | 2 +- src/cpu/cpu_x86.h | 2 -- src/libvirt_private.syms | 1 - 3 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index ccd68b681..0058abef7 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -293,7 +293,7 @@ x86DataCpuid(const virCPUx86Data *data, return NULL; } -void +static void virCPUx86DataClear(virCPUx86Data *data) { if (!data) diff --git a/src/cpu/cpu_x86.h b/src/cpu/cpu_x86.h index 8c8c6ed4f..bcda0da95 100644 --- a/src/cpu/cpu_x86.h +++ b/src/cpu/cpu_x86.h @@ -32,6 +32,4 @@ extern struct cpuArchDriver cpuDriverX86; int virCPUx86DataAddCPUID(virCPUx86Data *data, const virCPUx86CPUID *cpuid); -void virCPUx86DataClear(virCPUx86Data *data); - #endif /* __VIR_CPU_X86_H__ */ diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index b4f61c87e..cc5be84ea 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1006,7 +1006,6 @@ virCPUUpdate; # cpu/cpu_x86.h virCPUx86DataAddCPUID; -virCPUx86DataClear; # datatypes.h -- 2.11.1

On 02/15/2017 11:44 AM, Jiri Denemark wrote:
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
src/cpu/cpu_x86.c | 2 +- src/cpu/cpu_x86.h | 2 -- src/libvirt_private.syms | 1 - 3 files changed, 1 insertion(+), 4 deletions(-)
ACK John

The new API is called virCPUDataFree. Individual CPU drivers are no longer required to implement their own freeing function unless they need to free architecture specific data from virCPUData. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - no change src/bhyve/bhyve_capabilities.c | 2 +- src/cpu/cpu.c | 21 +++++++-------------- src/cpu/cpu.h | 4 ++-- src/cpu/cpu_arm.c | 7 ------- src/cpu/cpu_ppc64.c | 6 +++--- src/cpu/cpu_s390.c | 7 ------- src/cpu/cpu_x86.c | 22 +++++++++++----------- src/libvirt_private.syms | 2 +- src/libxl/libxl_capabilities.c | 4 ++-- src/qemu/qemu_capabilities.c | 2 +- src/qemu/qemu_monitor_json.c | 2 +- src/qemu/qemu_parse_command.c | 2 +- src/qemu/qemu_process.c | 2 +- src/vmware/vmware_conf.c | 2 +- src/vz/vz_driver.c | 2 +- tests/cputest.c | 6 +++--- tests/qemumonitorjsontest.c | 4 ++-- 17 files changed, 38 insertions(+), 59 deletions(-) diff --git a/src/bhyve/bhyve_capabilities.c b/src/bhyve/bhyve_capabilities.c index 1dc0593af..52d6ca782 100644 --- a/src/bhyve/bhyve_capabilities.c +++ b/src/bhyve/bhyve_capabilities.c @@ -68,7 +68,7 @@ virBhyveCapsInitCPU(virCapsPtr caps, ret = 0; cleanup: - cpuDataFree(data); + virCPUDataFree(data); return ret; diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c index 3063f00eb..45a17bf46 100644 --- a/src/cpu/cpu.c +++ b/src/cpu/cpu.c @@ -331,7 +331,7 @@ virCPUDataNew(virArch arch) /** - * cpuDataFree: + * virCPUDataFree: * * @data: CPU data structure to be freed * @@ -340,26 +340,19 @@ virCPUDataNew(virArch arch) * Returns nothing. */ void -cpuDataFree(virCPUDataPtr data) +virCPUDataFree(virCPUDataPtr data) { struct cpuArchDriver *driver; VIR_DEBUG("data=%p", data); - if (data == NULL) + if (!data) return; - if ((driver = cpuGetSubDriver(data->arch)) == NULL) - return; - - if (driver->free == NULL) { - virReportError(VIR_ERR_NO_SUPPORT, - _("cannot free CPU data for %s architecture"), - virArchToString(data->arch)); - return; - } - - (driver->free)(data); + if ((driver = cpuGetSubDriver(data->arch)) && driver->dataFree) + driver->dataFree(data); + else + VIR_FREE(data); } diff --git a/src/cpu/cpu.h b/src/cpu/cpu.h index ceb1e7256..0324284b9 100644 --- a/src/cpu/cpu.h +++ b/src/cpu/cpu.h @@ -116,7 +116,7 @@ struct cpuArchDriver { virCPUArchCompare compare; cpuArchDecode decode; cpuArchEncode encode; - cpuArchDataFree free; + cpuArchDataFree dataFree; cpuArchNodeData nodeData; cpuArchBaseline baseline; virCPUArchUpdate update; @@ -166,7 +166,7 @@ virCPUDataPtr virCPUDataNew(virArch arch); void -cpuDataFree (virCPUDataPtr data); +virCPUDataFree(virCPUDataPtr data); virCPUDataPtr cpuNodeData (virArch arch); diff --git a/src/cpu/cpu_arm.c b/src/cpu/cpu_arm.c index 653b06b2f..3a0ee2b14 100644 --- a/src/cpu/cpu_arm.c +++ b/src/cpu/cpu_arm.c @@ -37,12 +37,6 @@ static const virArch archs[] = { VIR_ARCH_AARCH64, }; -static void -armDataFree(virCPUDataPtr data) -{ - VIR_FREE(data); -} - static int virCPUarmUpdate(virCPUDefPtr guest, @@ -117,7 +111,6 @@ struct cpuArchDriver cpuDriverArm = { .compare = virCPUarmCompare, .decode = NULL, .encode = NULL, - .free = armDataFree, .nodeData = NULL, .baseline = armBaseline, .update = virCPUarmUpdate, diff --git a/src/cpu/cpu_ppc64.c b/src/cpu/cpu_ppc64.c index 180ad87d1..a7c8545db 100644 --- a/src/cpu/cpu_ppc64.c +++ b/src/cpu/cpu_ppc64.c @@ -705,7 +705,7 @@ ppc64DriverDecode(virCPUDefPtr cpu, } static void -ppc64DriverFree(virCPUDataPtr data) +virCPUppc64DataFree(virCPUDataPtr data) { if (!data) return; @@ -741,7 +741,7 @@ ppc64DriverNodeData(virArch arch) return nodeData; error: - ppc64DriverFree(nodeData); + virCPUppc64DataFree(nodeData); return NULL; } @@ -901,7 +901,7 @@ struct cpuArchDriver cpuDriverPPC64 = { .compare = virCPUppc64Compare, .decode = ppc64DriverDecode, .encode = NULL, - .free = ppc64DriverFree, + .dataFree = virCPUppc64DataFree, .nodeData = ppc64DriverNodeData, .baseline = ppc64DriverBaseline, .update = virCPUppc64Update, diff --git a/src/cpu/cpu_s390.c b/src/cpu/cpu_s390.c index 0248328db..9503e8e2b 100644 --- a/src/cpu/cpu_s390.c +++ b/src/cpu/cpu_s390.c @@ -33,12 +33,6 @@ static const virArch archs[] = { VIR_ARCH_S390, VIR_ARCH_S390X }; -static void -s390DataFree(virCPUDataPtr data) -{ - VIR_FREE(data); -} - static virCPUCompareResult virCPUs390Compare(virCPUDefPtr host ATTRIBUTE_UNUSED, virCPUDefPtr cpu ATTRIBUTE_UNUSED, @@ -115,7 +109,6 @@ struct cpuArchDriver cpuDriverS390 = { .compare = virCPUs390Compare, .decode = NULL, .encode = NULL, - .free = s390DataFree, .nodeData = NULL, .baseline = NULL, .update = virCPUs390Update, diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index 0058abef7..3b540f99c 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -304,7 +304,7 @@ virCPUx86DataClear(virCPUx86Data *data) static void -x86FreeCPUData(virCPUDataPtr data) +virCPUx86DataFree(virCPUDataPtr data) { if (!data) return; @@ -1455,7 +1455,7 @@ virCPUx86DataParse(xmlXPathContextPtr ctxt) return cpuData; error: - x86FreeCPUData(cpuData); + virCPUx86DataFree(cpuData); cpuData = NULL; goto cleanup; } @@ -1641,7 +1641,7 @@ x86Compute(virCPUDefPtr host, return ret; error: - x86FreeCPUData(guestData); + virCPUx86DataFree(guestData); ret = VIR_CPU_COMPARE_ERROR; goto cleanup; } @@ -2033,12 +2033,12 @@ x86Encode(virArch arch, return 0; error: - x86FreeCPUData(data_forced); - x86FreeCPUData(data_required); - x86FreeCPUData(data_optional); - x86FreeCPUData(data_disabled); - x86FreeCPUData(data_forbidden); - x86FreeCPUData(data_vendor); + virCPUx86DataFree(data_forced); + virCPUx86DataFree(data_required); + virCPUx86DataFree(data_optional); + virCPUx86DataFree(data_disabled); + virCPUx86DataFree(data_forbidden); + virCPUx86DataFree(data_vendor); return -1; } @@ -2380,7 +2380,7 @@ x86NodeData(virArch arch) return cpuData; error: - x86FreeCPUData(cpuData); + virCPUx86DataFree(cpuData); return NULL; } #endif @@ -2718,7 +2718,7 @@ struct cpuArchDriver cpuDriverX86 = { .compare = virCPUx86Compare, .decode = x86DecodeCPUData, .encode = x86Encode, - .free = x86FreeCPUData, + .dataFree = virCPUx86DataFree, #if defined(__i386__) || defined(__x86_64__) .nodeData = x86NodeData, #else diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index cc5be84ea..56db100b5 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -987,7 +987,6 @@ virSecretObjSetValueSize; # cpu/cpu.h cpuBaseline; cpuBaselineXML; -cpuDataFree; cpuDecode; cpuEncode; cpuNodeData; @@ -997,6 +996,7 @@ virCPUCompareXML; virCPUConvertLegacy; virCPUDataCheckFeature; virCPUDataFormat; +virCPUDataFree; virCPUDataNew; virCPUDataParse; virCPUGetModels; diff --git a/src/libxl/libxl_capabilities.c b/src/libxl/libxl_capabilities.c index 622e9f6bb..117055cf2 100644 --- a/src/libxl/libxl_capabilities.c +++ b/src/libxl/libxl_capabilities.c @@ -145,7 +145,7 @@ libxlCapsNodeData(virCPUDefPtr cpu, libxl_hwcap hwcap, return cpudata; error: - cpuDataFree(cpudata); + virCPUDataFree(cpudata); return NULL; } @@ -198,7 +198,7 @@ libxlCapsInitCPU(virCapsPtr caps, libxl_physinfo *phy_info, } cleanup: - cpuDataFree(data); + virCPUDataFree(data); return ret; diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 2ba82456e..6ca6ea702 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -1091,7 +1091,7 @@ virQEMUCapsInitCPU(virCapsPtr caps, ret = 0; cleanup: - cpuDataFree(data); + virCPUDataFree(data); return ret; diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index b4da12167..cfb7f50aa 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -6592,7 +6592,7 @@ qemuMonitorJSONParseCPUx86Features(virJSONValuePtr data) return cpudata; error: - cpuDataFree(cpudata); + virCPUDataFree(cpudata); return NULL; } diff --git a/src/qemu/qemu_parse_command.c b/src/qemu/qemu_parse_command.c index 405e65549..a215027c1 100644 --- a/src/qemu/qemu_parse_command.c +++ b/src/qemu/qemu_parse_command.c @@ -1606,7 +1606,7 @@ qemuParseCommandLineCPU(virDomainDefPtr dom, goto cleanup; is_32bit = (virCPUDataCheckFeature(cpuData, "lm") != 1); - cpuDataFree(cpuData); + virCPUDataFree(cpuData); } else if (model) { is_32bit = STREQ(model, "qemu32"); } diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index b9df01da5..95af7c283 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -3843,7 +3843,7 @@ qemuProcessVerifyGuestCPU(virQEMUDriverPtr driver, ret = true; cleanup: - cpuDataFree(guestcpu); + virCPUDataFree(guestcpu); return ret; } diff --git a/src/vmware/vmware_conf.c b/src/vmware/vmware_conf.c index 4222f4e38..5b1b5f5fd 100644 --- a/src/vmware/vmware_conf.c +++ b/src/vmware/vmware_conf.c @@ -118,7 +118,7 @@ vmwareCapsInit(void) cleanup: virCPUDefFree(cpu); - cpuDataFree(data); + virCPUDataFree(data); return caps; diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c index 6aade90c4..181775809 100644 --- a/src/vz/vz_driver.c +++ b/src/vz/vz_driver.c @@ -151,7 +151,7 @@ vzBuildCapabilities(void) } cleanup: - cpuDataFree(data); + virCPUDataFree(data); return caps; error: diff --git a/tests/cputest.c b/tests/cputest.c index 8612e920e..8d761af61 100644 --- a/tests/cputest.c +++ b/tests/cputest.c @@ -439,7 +439,7 @@ cpuTestHasFeature(const void *arg) ret = 0; cleanup: - cpuDataFree(hostData); + virCPUDataFree(hostData); virCPUDefFree(host); return ret; } @@ -489,7 +489,7 @@ cpuTestCPUID(bool guest, const void *arg) cleanup: VIR_FREE(hostFile); VIR_FREE(host); - cpuDataFree(hostData); + virCPUDataFree(hostData); virCPUDefFree(cpu); VIR_FREE(result); return ret; @@ -549,7 +549,7 @@ cpuTestJSONCPUID(const void *arg) cleanup: qemuMonitorTestFree(testMon); - cpuDataFree(cpuData); + virCPUDataFree(cpuData); virCPUDefFree(cpu); VIR_FREE(result); VIR_FREE(json); diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c index 5b2d6bb34..402c87d45 100644 --- a/tests/qemumonitorjsontest.c +++ b/tests/qemumonitorjsontest.c @@ -2410,7 +2410,7 @@ testQemuMonitorJSONGetCPUData(const void *opaque) VIR_FREE(dataFile); VIR_FREE(jsonStr); VIR_FREE(actual); - cpuDataFree(cpuData); + virCPUDataFree(cpuData); qemuMonitorTestFree(test); return ret; } @@ -2455,7 +2455,7 @@ testQemuMonitorJSONGetNonExistingCPUData(const void *opaque) ret = 0; cleanup: qemuMonitorTestFree(test); - cpuDataFree(cpuData); + virCPUDataFree(cpuData); return ret; } -- 2.11.1

On 02/15/2017 11:44 AM, Jiri Denemark wrote:
The new API is called virCPUDataFree. Individual CPU drivers are no longer required to implement their own freeing function unless they need to free architecture specific data from virCPUData.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
src/bhyve/bhyve_capabilities.c | 2 +- src/cpu/cpu.c | 21 +++++++-------------- src/cpu/cpu.h | 4 ++-- src/cpu/cpu_arm.c | 7 ------- src/cpu/cpu_ppc64.c | 6 +++--- src/cpu/cpu_s390.c | 7 ------- src/cpu/cpu_x86.c | 22 +++++++++++----------- src/libvirt_private.syms | 2 +- src/libxl/libxl_capabilities.c | 4 ++-- src/qemu/qemu_capabilities.c | 2 +- src/qemu/qemu_monitor_json.c | 2 +- src/qemu/qemu_parse_command.c | 2 +- src/qemu/qemu_process.c | 2 +- src/vmware/vmware_conf.c | 2 +- src/vz/vz_driver.c | 2 +- tests/cputest.c | 6 +++--- tests/qemumonitorjsontest.c | 4 ++-- 17 files changed, 38 insertions(+), 59 deletions(-)
ACK, John

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - no change src/cpu/cpu_x86.c | 57 ++++++++++++++++++++++++------------------ src/cpu/cpu_x86.h | 2 +- src/libxl/libxl_capabilities.c | 2 +- src/qemu/qemu_monitor_json.c | 2 +- 4 files changed, 36 insertions(+), 27 deletions(-) diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index 3b540f99c..029a7d475 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -330,9 +330,9 @@ x86DataCopy(virCPUx86Data *dst, const virCPUx86Data *src) } -int -virCPUx86DataAddCPUID(virCPUx86Data *data, - const virCPUx86CPUID *cpuid) +static int +virCPUx86DataAddCPUIDInt(virCPUx86Data *data, + const virCPUx86CPUID *cpuid) { virCPUx86CPUID *existing; @@ -365,7 +365,7 @@ x86DataAdd(virCPUx86Data *data1, if (cpuid1) { x86cpuidSetBits(cpuid1, cpuid2); } else { - if (virCPUx86DataAddCPUID(data1, cpuid2) < 0) + if (virCPUx86DataAddCPUIDInt(data1, cpuid2) < 0) return -1; } } @@ -549,7 +549,7 @@ x86DataAddSignature(virCPUx86Data *data, { virCPUx86CPUID cpuid = { .eax_in = 0x1, .eax = signature }; - return virCPUx86DataAddCPUID(data, &cpuid); + return virCPUx86DataAddCPUIDInt(data, &cpuid); } @@ -892,7 +892,7 @@ x86FeatureParse(xmlXPathContextPtr ctxt, i, feature->name); goto error; } - if (virCPUx86DataAddCPUID(&feature->data, &cpuid)) + if (virCPUx86DataAddCPUIDInt(&feature->data, &cpuid)) goto error; } @@ -1446,7 +1446,7 @@ virCPUx86DataParse(xmlXPathContextPtr ctxt) _("failed to parse cpuid[%zu]"), i); goto error; } - if (virCPUx86DataAddCPUID(&cpuData->data.x86, &cpuid) < 0) + if (virCPUx86DataAddCPUID(cpuData, &cpuid) < 0) goto error; } @@ -1605,8 +1605,8 @@ x86Compute(virCPUDefPtr host, goto error; if (cpu->vendor && host_model->vendor && - virCPUx86DataAddCPUID(&guest_model->data, - &host_model->vendor->cpuid) < 0) + virCPUx86DataAddCPUIDInt(&guest_model->data, + &host_model->vendor->cpuid) < 0) goto error; if (x86DataAddSignature(&guest_model->data, host_model->signature) < 0) @@ -2013,7 +2013,7 @@ x86Encode(virArch arch, if (!(data_vendor = virCPUDataNew(arch))) goto error; - if (v && virCPUx86DataAddCPUID(&data_vendor->data.x86, &v->cpuid) < 0) + if (v && virCPUx86DataAddCPUID(data_vendor, &v->cpuid) < 0) goto error; } @@ -2083,7 +2083,7 @@ cpuidCall(virCPUx86CPUID *cpuid) * Sub leaf n+1 is invalid if eax[4:0] in sub leaf n equals 0. */ static int -cpuidSetLeaf4(virCPUx86Data *data, +cpuidSetLeaf4(virCPUDataPtr data, virCPUx86CPUID *subLeaf0) { virCPUx86CPUID cpuid = *subLeaf0; @@ -2106,7 +2106,7 @@ cpuidSetLeaf4(virCPUx86Data *data, * Sub leaf n is invalid if n > eax in sub leaf 0. */ static int -cpuidSetLeaf7(virCPUx86Data *data, +cpuidSetLeaf7(virCPUDataPtr data, virCPUx86CPUID *subLeaf0) { virCPUx86CPUID cpuid = { .eax_in = 0x7 }; @@ -2133,7 +2133,7 @@ cpuidSetLeaf7(virCPUx86Data *data, * meaningful data even if it was (theoretically) considered invalid. */ static int -cpuidSetLeafB(virCPUx86Data *data, +cpuidSetLeafB(virCPUDataPtr data, virCPUx86CPUID *subLeaf0) { virCPUx86CPUID cpuid = *subLeaf0; @@ -2157,7 +2157,7 @@ cpuidSetLeafB(virCPUx86Data *data, * and edx[n-32] from sub leaf 1 is not set. */ static int -cpuidSetLeafD(virCPUx86Data *data, +cpuidSetLeafD(virCPUDataPtr data, virCPUx86CPUID *subLeaf0) { virCPUx86CPUID cpuid = { .eax_in = 0xd }; @@ -2204,7 +2204,7 @@ cpuidSetLeafD(virCPUx86Data *data, * 0x10: Sub leaf n is valid if ebx[n] (= res[ResID]) from sub leaf 0 is set. */ static int -cpuidSetLeafResID(virCPUx86Data *data, +cpuidSetLeafResID(virCPUDataPtr data, virCPUx86CPUID *subLeaf0, uint32_t res) { @@ -2232,13 +2232,13 @@ cpuidSetLeafResID(virCPUx86Data *data, * Sub leaves n >= 2 are valid as long as eax[3:0] != 0. */ static int -cpuidSetLeaf12(virCPUx86Data *data, +cpuidSetLeaf12(virCPUDataPtr data, virCPUx86CPUID *subLeaf0) { virCPUx86CPUID cpuid = { .eax_in = 0x7 }; virCPUx86CPUID *cpuid7; - if (!(cpuid7 = x86DataCpuid(data, &cpuid)) || + if (!(cpuid7 = x86DataCpuid(&data->data.x86, &cpuid)) || !(cpuid7->ebx & (1 << 2))) return 0; @@ -2268,7 +2268,7 @@ cpuidSetLeaf12(virCPUx86Data *data, * Sub leaf 0 reports the maximum supported sub leaf in eax. */ static int -cpuidSetLeaf14(virCPUx86Data *data, +cpuidSetLeaf14(virCPUDataPtr data, virCPUx86CPUID *subLeaf0) { virCPUx86CPUID cpuid = { .eax_in = 0x14 }; @@ -2293,7 +2293,7 @@ cpuidSetLeaf14(virCPUx86Data *data, * Sub leaf 0 reports the maximum supported sub leaf in eax. */ static int -cpuidSetLeaf17(virCPUx86Data *data, +cpuidSetLeaf17(virCPUDataPtr data, virCPUx86CPUID *subLeaf0) { virCPUx86CPUID cpuid = { .eax_in = 0x17 }; @@ -2316,7 +2316,7 @@ cpuidSetLeaf17(virCPUx86Data *data, static int -cpuidSet(uint32_t base, virCPUx86Data *data) +cpuidSet(uint32_t base, virCPUDataPtr data) { int rc; uint32_t max; @@ -2371,10 +2371,10 @@ x86NodeData(virArch arch) if (!(cpuData = virCPUDataNew(arch))) goto error; - if (cpuidSet(CPUX86_BASIC, &cpuData->data.x86) < 0) + if (cpuidSet(CPUX86_BASIC, cpuData) < 0) goto error; - if (cpuidSet(CPUX86_EXTENDED, &cpuData->data.x86) < 0) + if (cpuidSet(CPUX86_EXTENDED, cpuData) < 0) goto error; return cpuData; @@ -2484,7 +2484,8 @@ x86Baseline(virCPUDefPtr *cpus, goto error; } - if (vendor && virCPUx86DataAddCPUID(&base_model->data, &vendor->cpuid) < 0) + if (vendor && + virCPUx86DataAddCPUIDInt(&base_model->data, &vendor->cpuid) < 0) goto error; if (x86Decode(cpu, &base_model->data, models, nmodels, modelName, flags) < 0) @@ -2683,7 +2684,7 @@ virCPUx86Translate(virCPUDefPtr cpu, goto cleanup; if (model->vendor && - virCPUx86DataAddCPUID(&model->data, &model->vendor->cpuid) < 0) + virCPUx86DataAddCPUIDInt(&model->data, &model->vendor->cpuid) < 0) goto cleanup; if (x86DataAddSignature(&model->data, model->signature) < 0) @@ -2711,6 +2712,14 @@ virCPUx86Translate(virCPUDefPtr cpu, } +int +virCPUx86DataAddCPUID(virCPUDataPtr cpuData, + const virCPUx86CPUID *cpuid) +{ + return virCPUx86DataAddCPUIDInt(&cpuData->data.x86, cpuid); +} + + struct cpuArchDriver cpuDriverX86 = { .name = "x86", .arch = archs, diff --git a/src/cpu/cpu_x86.h b/src/cpu/cpu_x86.h index bcda0da95..79e78a007 100644 --- a/src/cpu/cpu_x86.h +++ b/src/cpu/cpu_x86.h @@ -29,7 +29,7 @@ extern struct cpuArchDriver cpuDriverX86; -int virCPUx86DataAddCPUID(virCPUx86Data *data, +int virCPUx86DataAddCPUID(virCPUDataPtr cpuData, const virCPUx86CPUID *cpuid); #endif /* __VIR_CPU_X86_H__ */ diff --git a/src/libxl/libxl_capabilities.c b/src/libxl/libxl_capabilities.c index 117055cf2..839a2ee81 100644 --- a/src/libxl/libxl_capabilities.c +++ b/src/libxl/libxl_capabilities.c @@ -72,7 +72,7 @@ libxlCapsAddCPUID(virCPUDataPtr data, virCPUx86CPUID *cpuid, ssize_t ncaps) for (i = 0; i < ncaps; i++) { virCPUx86CPUID *c = &cpuid[i]; - if (virCPUx86DataAddCPUID(&data->data.x86, c) < 0) { + if (virCPUx86DataAddCPUID(data, c) < 0) { VIR_DEBUG("Failed to add CPUID(%x,%x)", c->eax_in, c->ecx_in); return -1; } diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index cfb7f50aa..d89dfb88d 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -6585,7 +6585,7 @@ qemuMonitorJSONParseCPUx86Features(virJSONValuePtr data) for (i = 0; i < n; i++) { if (qemuMonitorJSONParseCPUx86FeatureWord(virJSONValueArrayGet(data, i), &cpuid) < 0 || - virCPUx86DataAddCPUID(&cpudata->data.x86, &cpuid) < 0) + virCPUx86DataAddCPUID(cpudata, &cpuid) < 0) goto error; } -- 2.11.1

Would be nice to have some more text here to describe what's being done and why... I guess at this point I'm not sure I see the value yet other than hiding the 'data.x86' from outside prying eyes. On 02/15/2017 11:44 AM, Jiri Denemark wrote:
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
src/cpu/cpu_x86.c | 57 ++++++++++++++++++++++++------------------ src/cpu/cpu_x86.h | 2 +- src/libxl/libxl_capabilities.c | 2 +- src/qemu/qemu_monitor_json.c | 2 +- 4 files changed, 36 insertions(+), 27 deletions(-)
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index 3b540f99c..029a7d475 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -330,9 +330,9 @@ x86DataCopy(virCPUx86Data *dst, const virCPUx86Data *src) }
-int -virCPUx86DataAddCPUID(virCPUx86Data *data, - const virCPUx86CPUID *cpuid) +static int +virCPUx86DataAddCPUIDInt(virCPUx86Data *data, + const virCPUx86CPUID *cpuid) { virCPUx86CPUID *existing;
@@ -365,7 +365,7 @@ x86DataAdd(virCPUx86Data *data1, if (cpuid1) { x86cpuidSetBits(cpuid1, cpuid2); } else { - if (virCPUx86DataAddCPUID(data1, cpuid2) < 0) + if (virCPUx86DataAddCPUIDInt(data1, cpuid2) < 0) return -1; } } @@ -549,7 +549,7 @@ x86DataAddSignature(virCPUx86Data *data, { virCPUx86CPUID cpuid = { .eax_in = 0x1, .eax = signature };
- return virCPUx86DataAddCPUID(data, &cpuid); + return virCPUx86DataAddCPUIDInt(data, &cpuid); }
It probably would have made review of this series a whole lot easier if virCPUx86DataAddCPUID was added right here, but I understand after going thru the next few why it's been put here. ACK, John

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - no change src/cpu/cpu_x86.c | 11 +++++++++++ src/cpu/cpu_x86.h | 4 ++++ src/libvirt_private.syms | 1 + src/qemu/qemu_capabilities.c | 1 + 4 files changed, 17 insertions(+) diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index 029a7d475..e3f860bc6 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -2720,6 +2720,17 @@ virCPUx86DataAddCPUID(virCPUDataPtr cpuData, } +int +virCPUx86DataSetSignature(virCPUDataPtr cpuData, + unsigned int family, + unsigned int model) +{ + uint32_t signature = x86MakeSignature(family, model); + + return x86DataAddSignature(&cpuData->data.x86, signature); +} + + struct cpuArchDriver cpuDriverX86 = { .name = "x86", .arch = archs, diff --git a/src/cpu/cpu_x86.h b/src/cpu/cpu_x86.h index 79e78a007..ffbd064b4 100644 --- a/src/cpu/cpu_x86.h +++ b/src/cpu/cpu_x86.h @@ -32,4 +32,8 @@ extern struct cpuArchDriver cpuDriverX86; int virCPUx86DataAddCPUID(virCPUDataPtr cpuData, const virCPUx86CPUID *cpuid); +int virCPUx86DataSetSignature(virCPUDataPtr cpuData, + unsigned int family, + unsigned int model); + #endif /* __VIR_CPU_X86_H__ */ diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 56db100b5..6b2dddc95 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1006,6 +1006,7 @@ virCPUUpdate; # cpu/cpu_x86.h virCPUx86DataAddCPUID; +virCPUx86DataSetSignature; # datatypes.h diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 6ca6ea702..f115f1e23 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -33,6 +33,7 @@ #include "virprocess.h" #include "nodeinfo.h" #include "cpu/cpu.h" +#include "cpu/cpu_x86.h" #include "domain_conf.h" #include "vircommand.h" #include "virbitmap.h" -- 2.11.1

Again would be nice to have a bit more information here. On 02/15/2017 11:44 AM, Jiri Denemark wrote:
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
src/cpu/cpu_x86.c | 11 +++++++++++ src/cpu/cpu_x86.h | 4 ++++ src/libvirt_private.syms | 1 + src/qemu/qemu_capabilities.c | 1 + 4 files changed, 17 insertions(+)
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index 029a7d475..e3f860bc6 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -2720,6 +2720,17 @@ virCPUx86DataAddCPUID(virCPUDataPtr cpuData, }
+int +virCPUx86DataSetSignature(virCPUDataPtr cpuData, + unsigned int family, + unsigned int model) +{ + uint32_t signature = x86MakeSignature(family, model); + + return x86DataAddSignature(&cpuData->data.x86, signature); +} + + struct cpuArchDriver cpuDriverX86 = { .name = "x86", .arch = archs, diff --git a/src/cpu/cpu_x86.h b/src/cpu/cpu_x86.h index 79e78a007..ffbd064b4 100644 --- a/src/cpu/cpu_x86.h +++ b/src/cpu/cpu_x86.h @@ -32,4 +32,8 @@ extern struct cpuArchDriver cpuDriverX86; int virCPUx86DataAddCPUID(virCPUDataPtr cpuData, const virCPUx86CPUID *cpuid);
+int virCPUx86DataSetSignature(virCPUDataPtr cpuData, + unsigned int family, + unsigned int model); + #endif /* __VIR_CPU_X86_H__ */ diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 56db100b5..6b2dddc95 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1006,6 +1006,7 @@ virCPUUpdate;
# cpu/cpu_x86.h virCPUx86DataAddCPUID; +virCPUx86DataSetSignature;
# datatypes.h diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 6ca6ea702..f115f1e23 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -33,6 +33,7 @@ #include "virprocess.h" #include "nodeinfo.h" #include "cpu/cpu.h" +#include "cpu/cpu_x86.h"
Is this necessary now? ACK - would like to see a commit message though John
#include "domain_conf.h" #include "vircommand.h" #include "virbitmap.h"

On Tue, Feb 21, 2017 at 22:23:30 -0500, John Ferlan wrote: ...
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 6ca6ea702..f115f1e23 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -33,6 +33,7 @@ #include "virprocess.h" #include "nodeinfo.h" #include "cpu/cpu.h" +#include "cpu/cpu_x86.h"
Is this necessary now?
No. Looks like a wrong split. I'll move it to the later patch which starts using the new APIs. Jirka

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - no change src/cpu/cpu_x86.c | 45 +++++++++++++++++++++++++++++++++++---------- src/cpu/cpu_x86.h | 3 +++ src/libvirt_private.syms | 1 + 3 files changed, 39 insertions(+), 10 deletions(-) diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index e3f860bc6..ab5e5257d 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -478,6 +478,26 @@ x86DataToVendor(const virCPUx86Data *data, } +static int +virCPUx86VendorToCPUID(const char *vendor, + virCPUx86CPUID *cpuid) +{ + if (strlen(vendor) != VENDOR_STRING_LENGTH) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Invalid CPU vendor string '%s'"), vendor); + return -1; + } + + cpuid->eax_in = 0; + cpuid->ecx_in = 0; + cpuid->ebx = virReadBufInt32LE(vendor); + cpuid->edx = virReadBufInt32LE(vendor + 4); + cpuid->ecx = virReadBufInt32LE(vendor + 8); + + return 0; +} + + static uint32_t x86MakeSignature(unsigned int family, unsigned int model) @@ -651,17 +671,9 @@ x86VendorParse(xmlXPathContextPtr ctxt, vendor->name); goto error; } - if (strlen(string) != VENDOR_STRING_LENGTH) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Invalid CPU vendor string '%s'"), string); - goto error; - } - vendor->cpuid.eax_in = 0; - vendor->cpuid.ecx_in = 0; - vendor->cpuid.ebx = virReadBufInt32LE(string); - vendor->cpuid.edx = virReadBufInt32LE(string + 4); - vendor->cpuid.ecx = virReadBufInt32LE(string + 8); + if (virCPUx86VendorToCPUID(string, &vendor->cpuid) < 0) + goto error; cleanup: VIR_FREE(string); @@ -2731,6 +2743,19 @@ virCPUx86DataSetSignature(virCPUDataPtr cpuData, } +int +virCPUx86DataSetVendor(virCPUDataPtr cpuData, + const char *vendor) +{ + virCPUx86CPUID cpuid = { 0 }; + + if (virCPUx86VendorToCPUID(vendor, &cpuid) < 0) + return -1; + + return virCPUx86DataAddCPUID(cpuData, &cpuid); +} + + struct cpuArchDriver cpuDriverX86 = { .name = "x86", .arch = archs, diff --git a/src/cpu/cpu_x86.h b/src/cpu/cpu_x86.h index ffbd064b4..ab5394914 100644 --- a/src/cpu/cpu_x86.h +++ b/src/cpu/cpu_x86.h @@ -36,4 +36,7 @@ int virCPUx86DataSetSignature(virCPUDataPtr cpuData, unsigned int family, unsigned int model); +int virCPUx86DataSetVendor(virCPUDataPtr cpuData, + const char *vendor); + #endif /* __VIR_CPU_X86_H__ */ diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 6b2dddc95..7338c31e7 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1007,6 +1007,7 @@ virCPUUpdate; # cpu/cpu_x86.h virCPUx86DataAddCPUID; virCPUx86DataSetSignature; +virCPUx86DataSetVendor; # datatypes.h -- 2.11.1

Again no commit message. On 02/15/2017 11:44 AM, Jiri Denemark wrote:
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
src/cpu/cpu_x86.c | 45 +++++++++++++++++++++++++++++++++++---------- src/cpu/cpu_x86.h | 3 +++ src/libvirt_private.syms | 1 + 3 files changed, 39 insertions(+), 10 deletions(-)
ACK, nice to have commit message too. John

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - no change src/cpu/cpu_x86.c | 22 ++++++++++++++++++++++ src/cpu/cpu_x86.h | 3 +++ src/libvirt_private.syms | 1 + 3 files changed, 26 insertions(+) diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index ab5e5257d..b3bccd176 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -2756,6 +2756,28 @@ virCPUx86DataSetVendor(virCPUDataPtr cpuData, } +int +virCPUx86DataAddFeature(virCPUDataPtr cpuData, + const char *name) +{ + virCPUx86FeaturePtr feature; + virCPUx86MapPtr map; + + if (!(map = virCPUx86GetMap())) + return -1; + + /* ignore unknown features */ + if (!(feature = x86FeatureFind(map, name)) && + !(feature = x86FeatureFindInternal(name))) + return 0; + + if (x86DataAdd(&cpuData->data.x86, &feature->data) < 0) + return -1; + + return 0; +} + + struct cpuArchDriver cpuDriverX86 = { .name = "x86", .arch = archs, diff --git a/src/cpu/cpu_x86.h b/src/cpu/cpu_x86.h index ab5394914..91ec43fea 100644 --- a/src/cpu/cpu_x86.h +++ b/src/cpu/cpu_x86.h @@ -39,4 +39,7 @@ int virCPUx86DataSetSignature(virCPUDataPtr cpuData, int virCPUx86DataSetVendor(virCPUDataPtr cpuData, const char *vendor); +int virCPUx86DataAddFeature(virCPUDataPtr cpuData, + const char *name); + #endif /* __VIR_CPU_X86_H__ */ diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 7338c31e7..1c071091d 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1006,6 +1006,7 @@ virCPUUpdate; # cpu/cpu_x86.h virCPUx86DataAddCPUID; +virCPUx86DataAddFeature; virCPUx86DataSetSignature; virCPUx86DataSetVendor; -- 2.11.1

No commit message... On 02/15/2017 11:44 AM, Jiri Denemark wrote:
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
src/cpu/cpu_x86.c | 22 ++++++++++++++++++++++ src/cpu/cpu_x86.h | 3 +++ src/libvirt_private.syms | 1 + 3 files changed, 26 insertions(+)
ACK John
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index ab5e5257d..b3bccd176 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -2756,6 +2756,28 @@ virCPUx86DataSetVendor(virCPUDataPtr cpuData, }
+int +virCPUx86DataAddFeature(virCPUDataPtr cpuData, + const char *name) +{ + virCPUx86FeaturePtr feature; + virCPUx86MapPtr map; + + if (!(map = virCPUx86GetMap())) + return -1; + + /* ignore unknown features */
Looks like I'm not the only one with redundant comments ;-)
+ if (!(feature = x86FeatureFind(map, name)) && + !(feature = x86FeatureFindInternal(name))) + return 0; + + if (x86DataAdd(&cpuData->data.x86, &feature->data) < 0) + return -1; + + return 0; +} + + struct cpuArchDriver cpuDriverX86 = { .name = "x86", .arch = archs, diff --git a/src/cpu/cpu_x86.h b/src/cpu/cpu_x86.h index ab5394914..91ec43fea 100644 --- a/src/cpu/cpu_x86.h +++ b/src/cpu/cpu_x86.h @@ -39,4 +39,7 @@ int virCPUx86DataSetSignature(virCPUDataPtr cpuData, int virCPUx86DataSetVendor(virCPUDataPtr cpuData, const char *vendor);
+int virCPUx86DataAddFeature(virCPUDataPtr cpuData, + const char *name); + #endif /* __VIR_CPU_X86_H__ */ diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 7338c31e7..1c071091d 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1006,6 +1006,7 @@ virCPUUpdate;
# cpu/cpu_x86.h virCPUx86DataAddCPUID; +virCPUx86DataAddFeature; virCPUx86DataSetSignature; virCPUx86DataSetVendor;

virCPUDef.arch is not required to be filled in for guest CPU definitions. It doesn't make sense to artificially mandate it to be set when cpuDecode is called especially when virCPUData.arch passed to cpuDecode already contains the architecture. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - no change src/cpu/cpu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c index 45a17bf46..051a58040 100644 --- a/src/cpu/cpu.c +++ b/src/cpu/cpu.c @@ -240,7 +240,7 @@ cpuDecode(virCPUDefPtr cpu, return -1; } - if ((driver = cpuGetSubDriver(cpu->arch)) == NULL) + if ((driver = cpuGetSubDriver(data->arch)) == NULL) return -1; if (driver->decode == NULL) { -- 2.11.1

On 02/15/2017 11:44 AM, Jiri Denemark wrote:
virCPUDef.arch is not required to be filled in for guest CPU definitions. It doesn't make sense to artificially mandate it to be set when cpuDecode is called especially when virCPUData.arch passed to cpuDecode already contains the architecture.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
src/cpu/cpu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
ACK John

On Tue, Feb 21, 2017 at 22:24:34 -0500, John Ferlan wrote:
On 02/15/2017 11:44 AM, Jiri Denemark wrote:
virCPUDef.arch is not required to be filled in for guest CPU definitions. It doesn't make sense to artificially mandate it to be set when cpuDecode is called especially when virCPUData.arch passed to cpuDecode already contains the architecture.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
src/cpu/cpu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
ACK
Thanks. I pushed it since it didn't have any dependencies on the other patches in this series. Jirka

Until now host-model CPU mode tried to enable all CPU features supported by the host CPU even if QEMU/KVM did not support them. This caused a number of issues and made host-model quite unreliable. Asking QEMU for the CPU it can provide and the current host makes host-model much more robust. This commit fixes the following bugs: https://bugzilla.redhat.com/show_bug.cgi?id=1018251 https://bugzilla.redhat.com/show_bug.cgi?id=1371617 https://bugzilla.redhat.com/show_bug.cgi?id=1372581 https://bugzilla.redhat.com/show_bug.cgi?id=1404627 https://bugzilla.redhat.com/show_bug.cgi?id=870071 In addition to that, the following bug should be mostly limited to cases when an unsupported feature is explicitly requested: https://bugzilla.redhat.com/show_bug.cgi?id=1335534 Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - no change src/qemu/qemu_capabilities.c | 73 ++++++++++++++++++++++ .../domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml | 33 +++++++++- tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml | 11 +++- 3 files changed, 115 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index f115f1e23..bcfb6b694 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -3128,6 +3128,77 @@ virQEMUCapsInitCPUModelS390(virQEMUCapsPtr qemuCaps, * -1 on error. */ static int +virQEMUCapsInitCPUModelX86(virQEMUCapsPtr qemuCaps, + virDomainVirtType type, + virCPUDefPtr cpu) +{ + qemuMonitorCPUModelInfoPtr model; + virCPUDataPtr data = NULL; + unsigned long long sigFamily = 0; + unsigned long long sigModel = 0; + size_t nmodels = 0; + char **models = NULL; + int ret = -1; + size_t i; + + if (type == VIR_DOMAIN_VIRT_KVM) + model = qemuCaps->kvmCPUModelInfo; + else + model = qemuCaps->tcgCPUModelInfo; + + if (!model) + return 1; + + if (!(data = virCPUDataNew(VIR_ARCH_X86_64))) + goto cleanup; + + for (i = 0; i < model->nprops; i++) { + qemuMonitorCPUPropertyPtr prop = model->props + i; + + switch (prop->type) { + case QEMU_MONITOR_CPU_PROPERTY_BOOLEAN: + if (prop->value.boolean && + virCPUx86DataAddFeature(data, prop->name) < 0) + goto cleanup; + break; + + case QEMU_MONITOR_CPU_PROPERTY_STRING: + if (STREQ(prop->name, "vendor") && + virCPUx86DataSetVendor(data, prop->value.string) < 0) + goto cleanup; + break; + + case QEMU_MONITOR_CPU_PROPERTY_ULL: + if (STREQ(prop->name, "family")) + sigFamily = prop->value.ull; + else if (STREQ(prop->name, "model")) + sigModel = prop->value.ull; + break; + } + } + + if (virCPUx86DataSetSignature(data, sigFamily, sigModel) < 0) + goto cleanup; + + if (virQEMUCapsGetCPUDefinitions(qemuCaps, type, &models, &nmodels) < 0 || + cpuDecode(cpu, data, (const char **) models, nmodels, NULL) < 0) + goto cleanup; + + ret = 0; + + cleanup: + virCPUDataFree(data); + virStringListFreeCount(models, nmodels); + return ret; +} + + +/** + * Returns 0 when host CPU model provided by QEMU was filled in qemuCaps, + * 1 when the caller should fall back to using virCapsPtr->host.cpu, + * -1 on error. + */ +static int virQEMUCapsInitCPUModel(virQEMUCapsPtr qemuCaps, virDomainVirtType type, virCPUDefPtr cpu) @@ -3136,6 +3207,8 @@ virQEMUCapsInitCPUModel(virQEMUCapsPtr qemuCaps, if (ARCH_IS_S390(qemuCaps->arch)) ret = virQEMUCapsInitCPUModelS390(qemuCaps, type, cpu); + else if (ARCH_IS_X86(qemuCaps->arch)) + ret = virQEMUCapsInitCPUModelX86(qemuCaps, type, cpu); if (ret == 0) cpu->fallback = VIR_CPU_FALLBACK_FORBID; 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 9b9dfec09..1827b1d6f 100644 --- a/tests/domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml +++ b/tests/domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml @@ -21,7 +21,38 @@ <cpu> <mode name='host-passthrough' supported='no'/> <mode name='host-model' supported='yes'> - <model fallback='allow'>Broadwell</model> + <model fallback='forbid'>Opteron_G4</model> + <vendor>AMD</vendor> + <feature policy='require' name='acpi'/> + <feature policy='require' name='ss'/> + <feature policy='require' name='monitor'/> + <feature policy='require' name='movbe'/> + <feature policy='require' name='hypervisor'/> + <feature policy='require' name='arat'/> + <feature policy='require' name='fsgsbase'/> + <feature policy='require' name='bmi1'/> + <feature policy='require' name='smep'/> + <feature policy='require' name='bmi2'/> + <feature policy='require' name='erms'/> + <feature policy='require' name='mpx'/> + <feature policy='require' name='adx'/> + <feature policy='require' name='smap'/> + <feature policy='require' name='clflushopt'/> + <feature policy='require' name='pku'/> + <feature policy='require' name='ospke'/> + <feature policy='require' name='xsaveopt'/> + <feature policy='require' name='xgetbv1'/> + <feature policy='require' name='mmxext'/> + <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'/> + <feature policy='disable' name='fma4'/> </mode> <mode name='custom' supported='yes'> <model usable='yes'>qemu64</model> diff --git a/tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml b/tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml index 49722f91f..a7a2ecdea 100644 --- a/tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml +++ b/tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml @@ -21,7 +21,16 @@ <cpu> <mode name='host-passthrough' supported='yes'/> <mode name='host-model' supported='yes'> - <model fallback='allow'>Broadwell</model> + <model fallback='forbid'>Skylake-Client</model> + <vendor>Intel</vendor> + <feature policy='require' name='ss'/> + <feature policy='require' name='vmx'/> + <feature policy='require' name='hypervisor'/> + <feature policy='require' name='clflushopt'/> + <feature policy='require' name='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> -- 2.11.1

On 02/15/2017 11:44 AM, Jiri Denemark wrote:
Until now host-model CPU mode tried to enable all CPU features supported by the host CPU even if QEMU/KVM did not support them. This caused a number of issues and made host-model quite unreliable. Asking QEMU for the CPU it can provide and the current host makes host-model much more robust.
This commit fixes the following bugs:
https://bugzilla.redhat.com/show_bug.cgi?id=1018251 https://bugzilla.redhat.com/show_bug.cgi?id=1371617 https://bugzilla.redhat.com/show_bug.cgi?id=1372581 https://bugzilla.redhat.com/show_bug.cgi?id=1404627 https://bugzilla.redhat.com/show_bug.cgi?id=870071
In addition to that, the following bug should be mostly limited to cases when an unsupported feature is explicitly requested:
https://bugzilla.redhat.com/show_bug.cgi?id=1335534
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
src/qemu/qemu_capabilities.c | 73 ++++++++++++++++++++++ .../domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml | 33 +++++++++- tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml | 11 +++- 3 files changed, 115 insertions(+), 2 deletions(-)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index f115f1e23..bcfb6b694 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -3128,6 +3128,77 @@ virQEMUCapsInitCPUModelS390(virQEMUCapsPtr qemuCaps, * -1 on error. */ static int +virQEMUCapsInitCPUModelX86(virQEMUCapsPtr qemuCaps, + virDomainVirtType type, + virCPUDefPtr cpu) +{ + qemuMonitorCPUModelInfoPtr model; + virCPUDataPtr data = NULL; + unsigned long long sigFamily = 0; + unsigned long long sigModel = 0; + size_t nmodels = 0; + char **models = NULL; + int ret = -1; + size_t i; + + if (type == VIR_DOMAIN_VIRT_KVM) + model = qemuCaps->kvmCPUModelInfo; + else + model = qemuCaps->tcgCPUModelInfo;
Use virQEMUCapsGetHostModel (there's probably a couple of these)... ACK w/ that. John
+ + if (!model) + return 1; + + if (!(data = virCPUDataNew(VIR_ARCH_X86_64))) + goto cleanup; + + for (i = 0; i < model->nprops; i++) { + qemuMonitorCPUPropertyPtr prop = model->props + i; + + switch (prop->type) { + case QEMU_MONITOR_CPU_PROPERTY_BOOLEAN: + if (prop->value.boolean && + virCPUx86DataAddFeature(data, prop->name) < 0) + goto cleanup; + break; + + case QEMU_MONITOR_CPU_PROPERTY_STRING: + if (STREQ(prop->name, "vendor") && + virCPUx86DataSetVendor(data, prop->value.string) < 0) + goto cleanup; + break; + + case QEMU_MONITOR_CPU_PROPERTY_ULL: + if (STREQ(prop->name, "family")) + sigFamily = prop->value.ull; + else if (STREQ(prop->name, "model")) + sigModel = prop->value.ull; + break; + } + } + + if (virCPUx86DataSetSignature(data, sigFamily, sigModel) < 0) + goto cleanup; + + if (virQEMUCapsGetCPUDefinitions(qemuCaps, type, &models, &nmodels) < 0 || + cpuDecode(cpu, data, (const char **) models, nmodels, NULL) < 0) + goto cleanup; + + ret = 0; + + cleanup: + virCPUDataFree(data); + virStringListFreeCount(models, nmodels); + return ret; +} + + +/** + * Returns 0 when host CPU model provided by QEMU was filled in qemuCaps, + * 1 when the caller should fall back to using virCapsPtr->host.cpu, + * -1 on error. + */ +static int virQEMUCapsInitCPUModel(virQEMUCapsPtr qemuCaps, virDomainVirtType type, virCPUDefPtr cpu) @@ -3136,6 +3207,8 @@ virQEMUCapsInitCPUModel(virQEMUCapsPtr qemuCaps,
if (ARCH_IS_S390(qemuCaps->arch)) ret = virQEMUCapsInitCPUModelS390(qemuCaps, type, cpu); + else if (ARCH_IS_X86(qemuCaps->arch)) + ret = virQEMUCapsInitCPUModelX86(qemuCaps, type, cpu);
if (ret == 0) cpu->fallback = VIR_CPU_FALLBACK_FORBID; 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 9b9dfec09..1827b1d6f 100644 --- a/tests/domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml +++ b/tests/domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml @@ -21,7 +21,38 @@ <cpu> <mode name='host-passthrough' supported='no'/> <mode name='host-model' supported='yes'> - <model fallback='allow'>Broadwell</model> + <model fallback='forbid'>Opteron_G4</model> + <vendor>AMD</vendor> + <feature policy='require' name='acpi'/> + <feature policy='require' name='ss'/> + <feature policy='require' name='monitor'/> + <feature policy='require' name='movbe'/> + <feature policy='require' name='hypervisor'/> + <feature policy='require' name='arat'/> + <feature policy='require' name='fsgsbase'/> + <feature policy='require' name='bmi1'/> + <feature policy='require' name='smep'/> + <feature policy='require' name='bmi2'/> + <feature policy='require' name='erms'/> + <feature policy='require' name='mpx'/> + <feature policy='require' name='adx'/> + <feature policy='require' name='smap'/> + <feature policy='require' name='clflushopt'/> + <feature policy='require' name='pku'/> + <feature policy='require' name='ospke'/> + <feature policy='require' name='xsaveopt'/> + <feature policy='require' name='xgetbv1'/> + <feature policy='require' name='mmxext'/> + <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'/> + <feature policy='disable' name='fma4'/> </mode> <mode name='custom' supported='yes'> <model usable='yes'>qemu64</model> diff --git a/tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml b/tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml index 49722f91f..a7a2ecdea 100644 --- a/tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml +++ b/tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml @@ -21,7 +21,16 @@ <cpu> <mode name='host-passthrough' supported='yes'/> <mode name='host-model' supported='yes'> - <model fallback='allow'>Broadwell</model> + <model fallback='forbid'>Skylake-Client</model> + <vendor>Intel</vendor> + <feature policy='require' name='ss'/> + <feature policy='require' name='vmx'/> + <feature policy='require' name='hypervisor'/> + <feature policy='require' name='clflushopt'/> + <feature policy='require' name='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>

On Tue, Feb 21, 2017 at 22:28:25 -0500, John Ferlan wrote: ...
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index f115f1e23..bcfb6b694 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -3128,6 +3128,77 @@ virQEMUCapsInitCPUModelS390(virQEMUCapsPtr qemuCaps, * -1 on error. */ static int +virQEMUCapsInitCPUModelX86(virQEMUCapsPtr qemuCaps, + virDomainVirtType type, + virCPUDefPtr cpu) +{ + qemuMonitorCPUModelInfoPtr model; + virCPUDataPtr data = NULL; + unsigned long long sigFamily = 0; + unsigned long long sigModel = 0; + size_t nmodels = 0; + char **models = NULL; + int ret = -1; + size_t i; + + if (type == VIR_DOMAIN_VIRT_KVM) + model = qemuCaps->kvmCPUModelInfo; + else + model = qemuCaps->tcgCPUModelInfo;
Use virQEMUCapsGetHostModel (there's probably a couple of these)...
No. Don't confuse {kvm,tcg}CPUModelInfo with {kvm,tcg}CPUModel. Jirka

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - no change src/qemu/qemu_capabilities.c | 4 +++- src/qemu/qemu_monitor.c | 4 ++-- src/qemu/qemu_monitor.h | 6 +++++- src/qemu/qemu_monitor_json.c | 11 +++++++++-- src/qemu/qemu_monitor_json.h | 4 ++-- 5 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index bcfb6b694..20aaaf8f0 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -2856,7 +2856,9 @@ virQEMUCapsProbeQMPHostCPU(virQEMUCapsPtr qemuCaps, model = "host"; } - return qemuMonitorGetCPUModelExpansion(mon, "static", model, modelInfo); + return qemuMonitorGetCPUModelExpansion(mon, + QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC, + model, modelInfo); } struct tpmTypeToCaps { diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index a434b234b..a987e107e 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -3641,11 +3641,11 @@ qemuMonitorCPUDefInfoFree(qemuMonitorCPUDefInfoPtr cpu) int qemuMonitorGetCPUModelExpansion(qemuMonitorPtr mon, - const char *type, + qemuMonitorCPUModelExpansionType type, const char *model_name, qemuMonitorCPUModelInfoPtr *model_info) { - VIR_DEBUG("type=%s model_name=%s", type, model_name); + VIR_DEBUG("type=%d model_name=%s", type, model_name); QEMU_CHECK_MONITOR_JSON(mon); diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 112f041f1..b61f1cf54 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -948,8 +948,12 @@ struct _qemuMonitorCPUModelInfo { qemuMonitorCPUPropertyPtr props; }; +typedef enum { + QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC, +} qemuMonitorCPUModelExpansionType; + int qemuMonitorGetCPUModelExpansion(qemuMonitorPtr mon, - const char *type, + qemuMonitorCPUModelExpansionType type, const char *model_name, qemuMonitorCPUModelInfoPtr *model_info); diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index d89dfb88d..dd7907482 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -5021,7 +5021,7 @@ qemuMonitorJSONParseCPUModelProperty(const char *key, int qemuMonitorJSONGetCPUModelExpansion(qemuMonitorPtr mon, - const char *type, + qemuMonitorCPUModelExpansionType type, const char *model_name, qemuMonitorCPUModelInfoPtr *model_info) { @@ -5034,6 +5034,7 @@ qemuMonitorJSONGetCPUModelExpansion(qemuMonitorPtr mon, virJSONValuePtr cpu_props; qemuMonitorCPUModelInfoPtr machine_model = NULL; char const *cpu_name; + const char *typeStr = ""; *model_info = NULL; @@ -5043,8 +5044,14 @@ qemuMonitorJSONGetCPUModelExpansion(qemuMonitorPtr mon, if (virJSONValueObjectAppendString(model, "name", model_name) < 0) goto cleanup; + switch (type) { + case QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC: + typeStr = "static"; + break; + } + if (!(cmd = qemuMonitorJSONMakeCommand("query-cpu-model-expansion", - "s:type", type, + "s:type", typeStr, "a:model", model, NULL))) goto cleanup; diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h index 79688c82f..59d9f098c 100644 --- a/src/qemu/qemu_monitor_json.h +++ b/src/qemu/qemu_monitor_json.h @@ -354,10 +354,10 @@ int qemuMonitorJSONGetCPUDefinitions(qemuMonitorPtr mon, ATTRIBUTE_NONNULL(2); int qemuMonitorJSONGetCPUModelExpansion(qemuMonitorPtr mon, - const char *type, + qemuMonitorCPUModelExpansionType type, const char *model_name, qemuMonitorCPUModelInfoPtr *model_info) - ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4); + ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4); int qemuMonitorJSONGetCommands(qemuMonitorPtr mon, char ***commands) -- 2.11.1

On 02/15/2017 11:44 AM, Jiri Denemark wrote:
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
src/qemu/qemu_capabilities.c | 4 +++- src/qemu/qemu_monitor.c | 4 ++-- src/qemu/qemu_monitor.h | 6 +++++- src/qemu/qemu_monitor_json.c | 11 +++++++++-- src/qemu/qemu_monitor_json.h | 4 ++-- 5 files changed, 21 insertions(+), 8 deletions(-)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index bcfb6b694..20aaaf8f0 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -2856,7 +2856,9 @@ virQEMUCapsProbeQMPHostCPU(virQEMUCapsPtr qemuCaps, model = "host"; }
- return qemuMonitorGetCPUModelExpansion(mon, "static", model, modelInfo); + return qemuMonitorGetCPUModelExpansion(mon, + QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC, + model, modelInfo); }
struct tpmTypeToCaps { diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index a434b234b..a987e107e 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -3641,11 +3641,11 @@ qemuMonitorCPUDefInfoFree(qemuMonitorCPUDefInfoPtr cpu)
int qemuMonitorGetCPUModelExpansion(qemuMonitorPtr mon, - const char *type, + qemuMonitorCPUModelExpansionType type, const char *model_name, qemuMonitorCPUModelInfoPtr *model_info) { - VIR_DEBUG("type=%s model_name=%s", type, model_name); + VIR_DEBUG("type=%d model_name=%s", type, model_name);
QEMU_CHECK_MONITOR_JSON(mon);
diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 112f041f1..b61f1cf54 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -948,8 +948,12 @@ struct _qemuMonitorCPUModelInfo { qemuMonitorCPUPropertyPtr props; };
+typedef enum { + QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC, +} qemuMonitorCPUModelExpansionType; +
If you went with VIR_ENUM_IMPL type logic for the strings, then you could have a _UNKNOWN and _LAST too...
int qemuMonitorGetCPUModelExpansion(qemuMonitorPtr mon, - const char *type, + qemuMonitorCPUModelExpansionType type, const char *model_name, qemuMonitorCPUModelInfoPtr *model_info);
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index d89dfb88d..dd7907482 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -5021,7 +5021,7 @@ qemuMonitorJSONParseCPUModelProperty(const char *key,
int qemuMonitorJSONGetCPUModelExpansion(qemuMonitorPtr mon, - const char *type, + qemuMonitorCPUModelExpansionType type, const char *model_name, qemuMonitorCPUModelInfoPtr *model_info) { @@ -5034,6 +5034,7 @@ qemuMonitorJSONGetCPUModelExpansion(qemuMonitorPtr mon, virJSONValuePtr cpu_props; qemuMonitorCPUModelInfoPtr machine_model = NULL; char const *cpu_name; + const char *typeStr = "";
*model_info = NULL;
@@ -5043,8 +5044,14 @@ qemuMonitorJSONGetCPUModelExpansion(qemuMonitorPtr mon, if (virJSONValueObjectAppendString(model, "name", model_name) < 0) goto cleanup;
+ switch (type) { + case QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC: + typeStr = "static"; + break; + } +
This works, but why not use VIR_ENUM_IMPL type logic? Weak ACK, I think it'd be better to use VIR_ENUM_IMPL. John
if (!(cmd = qemuMonitorJSONMakeCommand("query-cpu-model-expansion", - "s:type", type, + "s:type", typeStr, "a:model", model, NULL))) goto cleanup; diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h index 79688c82f..59d9f098c 100644 --- a/src/qemu/qemu_monitor_json.h +++ b/src/qemu/qemu_monitor_json.h @@ -354,10 +354,10 @@ int qemuMonitorJSONGetCPUDefinitions(qemuMonitorPtr mon, ATTRIBUTE_NONNULL(2);
int qemuMonitorJSONGetCPUModelExpansion(qemuMonitorPtr mon, - const char *type, + qemuMonitorCPUModelExpansionType type, const char *model_name, qemuMonitorCPUModelInfoPtr *model_info) - ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4); + ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4);
int qemuMonitorJSONGetCommands(qemuMonitorPtr mon, char ***commands)

On Tue, Feb 21, 2017 at 22:49:37 -0500, John Ferlan wrote: ...
@@ -5043,8 +5044,14 @@ qemuMonitorJSONGetCPUModelExpansion(qemuMonitorPtr mon, if (virJSONValueObjectAppendString(model, "name", model_name) < 0) goto cleanup;
+ switch (type) { + case QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC: + typeStr = "static"; + break; + } +
This works, but why not use VIR_ENUM_IMPL type logic?
Weak ACK, I think it'd be better to use VIR_ENUM_IMPL.
I explicitly wanted this to be visible in the context, mainly because two different values are mapped to the same string. Jirka

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

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'/>

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

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - no change src/qemu/qemu_capabilities.c | 19 ++++++++++++++----- src/qemu/qemu_capspriv.h | 10 ++++++++++ 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index a77e300b7..3163bba8a 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -3204,7 +3204,7 @@ virQEMUCapsInitCPUModelX86(virQEMUCapsPtr qemuCaps, * 1 when the caller should fall back to using virCapsPtr->host.cpu, * -1 on error. */ -static int +int virQEMUCapsInitCPUModel(virQEMUCapsPtr qemuCaps, virDomainVirtType type, virCPUDefPtr cpu) @@ -3268,6 +3268,18 @@ virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, } +void +virQEMUCapsSetCPUModelInfo(virQEMUCapsPtr qemuCaps, + virDomainVirtType type, + qemuMonitorCPUModelInfoPtr modelInfo) +{ + if (type == VIR_DOMAIN_VIRT_KVM) + qemuCaps->kvmCPUModelInfo = modelInfo; + else + qemuCaps->tcgCPUModelInfo = modelInfo; +} + + static int virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, xmlXPathContextPtr ctxt, @@ -3354,10 +3366,7 @@ virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, } } - if (type == VIR_DOMAIN_VIRT_KVM) - qemuCaps->kvmCPUModelInfo = hostCPU; - else - qemuCaps->tcgCPUModelInfo = hostCPU; + virQEMUCapsSetCPUModelInfo(qemuCaps, type, hostCPU); hostCPU = NULL; ret = 0; diff --git a/src/qemu/qemu_capspriv.h b/src/qemu/qemu_capspriv.h index 75499d462..d4f13a2d2 100644 --- a/src/qemu/qemu_capspriv.h +++ b/src/qemu/qemu_capspriv.h @@ -73,4 +73,14 @@ void virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, virCapsPtr caps, virDomainVirtType type); + +int +virQEMUCapsInitCPUModel(virQEMUCapsPtr qemuCaps, + virDomainVirtType type, + virCPUDefPtr cpu); + +void +virQEMUCapsSetCPUModelInfo(virQEMUCapsPtr qemuCaps, + virDomainVirtType type, + qemuMonitorCPUModelInfoPtr modelInfo); #endif -- 2.11.1

On 02/15/2017 11:44 AM, Jiri Denemark wrote:
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
src/qemu/qemu_capabilities.c | 19 ++++++++++++++----- src/qemu/qemu_capspriv.h | 10 ++++++++++ 2 files changed, 24 insertions(+), 5 deletions(-)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index a77e300b7..3163bba8a 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -3204,7 +3204,7 @@ virQEMUCapsInitCPUModelX86(virQEMUCapsPtr qemuCaps, * 1 when the caller should fall back to using virCapsPtr->host.cpu, * -1 on error. */ -static int +int virQEMUCapsInitCPUModel(virQEMUCapsPtr qemuCaps, virDomainVirtType type, virCPUDefPtr cpu) @@ -3268,6 +3268,18 @@ virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, }
+void +virQEMUCapsSetCPUModelInfo(virQEMUCapsPtr qemuCaps, + virDomainVirtType type, + qemuMonitorCPUModelInfoPtr modelInfo) +{ + if (type == VIR_DOMAIN_VIRT_KVM) + qemuCaps->kvmCPUModelInfo = modelInfo; + else + qemuCaps->tcgCPUModelInfo = modelInfo; +} + + static int virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, xmlXPathContextPtr ctxt, @@ -3354,10 +3366,7 @@ virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, } }
- if (type == VIR_DOMAIN_VIRT_KVM) - qemuCaps->kvmCPUModelInfo = hostCPU; - else - qemuCaps->tcgCPUModelInfo = hostCPU; + virQEMUCapsSetCPUModelInfo(qemuCaps, type, hostCPU);
I think this needs more consistency throughout this code. That is all places that are setting should be changed I think there's a couple places that aren't (virQEMUCapsInitHostCPUModel and virQEMUCapsLoadCPUModels) Similarly for fetchers, but that's a different issue. ACK if all the "sets" are covered... bonus points for "gets" John So this is the last patch I'll look at tonight - I'll try to look at the rest later, but my availability will be limited.
hostCPU = NULL; ret = 0;
diff --git a/src/qemu/qemu_capspriv.h b/src/qemu/qemu_capspriv.h index 75499d462..d4f13a2d2 100644 --- a/src/qemu/qemu_capspriv.h +++ b/src/qemu/qemu_capspriv.h @@ -73,4 +73,14 @@ void virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, virCapsPtr caps, virDomainVirtType type); + +int +virQEMUCapsInitCPUModel(virQEMUCapsPtr qemuCaps, + virDomainVirtType type, + virCPUDefPtr cpu); + +void +virQEMUCapsSetCPUModelInfo(virQEMUCapsPtr qemuCaps, + virDomainVirtType type, + qemuMonitorCPUModelInfoPtr modelInfo); #endif

On Tue, Feb 21, 2017 at 23:16:46 -0500, John Ferlan wrote:
On 02/15/2017 11:44 AM, Jiri Denemark wrote:
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> ---
Notes: Version 2: - no change
src/qemu/qemu_capabilities.c | 19 ++++++++++++++----- src/qemu/qemu_capspriv.h | 10 ++++++++++ 2 files changed, 24 insertions(+), 5 deletions(-)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index a77e300b7..3163bba8a 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -3204,7 +3204,7 @@ virQEMUCapsInitCPUModelX86(virQEMUCapsPtr qemuCaps, * 1 when the caller should fall back to using virCapsPtr->host.cpu, * -1 on error. */ -static int +int virQEMUCapsInitCPUModel(virQEMUCapsPtr qemuCaps, virDomainVirtType type, virCPUDefPtr cpu) @@ -3268,6 +3268,18 @@ virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, }
+void +virQEMUCapsSetCPUModelInfo(virQEMUCapsPtr qemuCaps, + virDomainVirtType type, + qemuMonitorCPUModelInfoPtr modelInfo) +{ + if (type == VIR_DOMAIN_VIRT_KVM) + qemuCaps->kvmCPUModelInfo = modelInfo; + else + qemuCaps->tcgCPUModelInfo = modelInfo; +} + + static int virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, xmlXPathContextPtr ctxt, @@ -3354,10 +3366,7 @@ virQEMUCapsLoadHostCPUModelInfo(virQEMUCapsPtr qemuCaps, } }
- if (type == VIR_DOMAIN_VIRT_KVM) - qemuCaps->kvmCPUModelInfo = hostCPU; - else - qemuCaps->tcgCPUModelInfo = hostCPU; + virQEMUCapsSetCPUModelInfo(qemuCaps, type, hostCPU);
I think this needs more consistency throughout this code. That is all places that are setting should be changed I think there's a couple places that aren't (virQEMUCapsInitHostCPUModel and virQEMUCapsLoadCPUModels)
Nope. All places are already converted. Don't confuse {kvm,tcg}CPUModelInfo with {kvm,tcg}CPUModel. Jirka

While "x86" is a CPU sub driver name, it is not a recognized name of any architecture known to libvirt. Let's use "x86_64" prefix which can be used with virArch APIs. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - fix file names created by cpu-parse.sh tests/cputest.c | 204 ++++++++++----------- tests/cputestdata/cpu-parse.sh | 2 +- ...ack.xml => x86_64-Haswell-noTSX-nofallback.xml} | 0 ...-Haswell-noTSX.xml => x86_64-Haswell-noTSX.xml} | 0 .../{x86-Haswell.xml => x86_64-Haswell.xml} | 0 ...e-1-result.xml => x86_64-baseline-1-result.xml} | 0 .../{x86-baseline-1.xml => x86_64-baseline-1.xml} | 0 ...e-2-result.xml => x86_64-baseline-2-result.xml} | 0 .../{x86-baseline-2.xml => x86_64-baseline-2.xml} | 0 ...expanded.xml => x86_64-baseline-3-expanded.xml} | 0 ...e-3-result.xml => x86_64-baseline-3-result.xml} | 0 .../{x86-baseline-3.xml => x86_64-baseline-3.xml} | 0 ...expanded.xml => x86_64-baseline-4-expanded.xml} | 0 ...e-4-result.xml => x86_64-baseline-4-result.xml} | 0 .../{x86-baseline-4.xml => x86_64-baseline-4.xml} | 0 ...expanded.xml => x86_64-baseline-5-expanded.xml} | 0 ...e-5-result.xml => x86_64-baseline-5-result.xml} | 0 .../{x86-baseline-5.xml => x86_64-baseline-5.xml} | 0 ...atable.xml => x86_64-baseline-6-migratable.xml} | 0 ...e-6-result.xml => x86_64-baseline-6-result.xml} | 0 .../{x86-baseline-6.xml => x86_64-baseline-6.xml} | 0 ...e-7-result.xml => x86_64-baseline-7-result.xml} | 0 .../{x86-baseline-7.xml => x86_64-baseline-7.xml} | 0 ...e-8-result.xml => x86_64-baseline-8-result.xml} | 0 .../{x86-baseline-8.xml => x86_64-baseline-8.xml} | 0 ...ml => x86_64-baseline-incompatible-vendors.xml} | 0 ...lt.xml => x86_64-baseline-no-vendor-result.xml} | 0 ...no-vendor.xml => x86_64-baseline-no-vendor.xml} | 0 ...xml => x86_64-baseline-some-vendors-result.xml} | 0 ...endors.xml => x86_64-baseline-some-vendors.xml} | 0 ...-bogus-feature.xml => x86_64-bogus-feature.xml} | 0 ...{x86-bogus-model.xml => x86_64-bogus-model.xml} | 0 ...86-bogus-vendor.xml => x86_64-bogus-vendor.xml} | 0 ...-guest.xml => x86_64-cpuid-A10-5800K-guest.xml} | 0 ...0K-host.xml => x86_64-cpuid-A10-5800K-host.xml} | 0 ...0K-json.xml => x86_64-cpuid-A10-5800K-json.xml} | 0 ...-A10-5800K.json => x86_64-cpuid-A10-5800K.json} | 0 ...id-A10-5800K.xml => x86_64-cpuid-A10-5800K.xml} | 0 ...-guest.xml => x86_64-cpuid-Atom-D510-guest.xml} | 0 ...10-host.xml => x86_64-cpuid-Atom-D510-host.xml} | 0 ...id-Atom-D510.xml => x86_64-cpuid-Atom-D510.xml} | 0 ...-guest.xml => x86_64-cpuid-Atom-N450-guest.xml} | 0 ...50-host.xml => x86_64-cpuid-Atom-N450-host.xml} | 0 ...id-Atom-N450.xml => x86_64-cpuid-Atom-N450.xml} | 0 ...est.xml => x86_64-cpuid-Core-i5-2500-guest.xml} | 0 ...host.xml => x86_64-cpuid-Core-i5-2500-host.xml} | 0 ...json.xml => x86_64-cpuid-Core-i5-2500-json.xml} | 0 ...i5-2500.json => x86_64-cpuid-Core-i5-2500.json} | 0 ...e-i5-2500.xml => x86_64-cpuid-Core-i5-2500.xml} | 0 ...st.xml => x86_64-cpuid-Core-i5-2540M-guest.xml} | 0 ...ost.xml => x86_64-cpuid-Core-i5-2540M-host.xml} | 0 ...son.xml => x86_64-cpuid-Core-i5-2540M-json.xml} | 0 ...-2540M.json => x86_64-cpuid-Core-i5-2540M.json} | 0 ...i5-2540M.xml => x86_64-cpuid-Core-i5-2540M.xml} | 0 ...st.xml => x86_64-cpuid-Core-i5-4670T-guest.xml} | 0 ...ost.xml => x86_64-cpuid-Core-i5-4670T-host.xml} | 0 ...son.xml => x86_64-cpuid-Core-i5-4670T-json.xml} | 0 ...-4670T.json => x86_64-cpuid-Core-i5-4670T.json} | 0 ...i5-4670T.xml => x86_64-cpuid-Core-i5-4670T.xml} | 0 ...est.xml => x86_64-cpuid-Core-i5-6600-guest.xml} | 0 ...host.xml => x86_64-cpuid-Core-i5-6600-host.xml} | 0 ...json.xml => x86_64-cpuid-Core-i5-6600-json.xml} | 0 ...i5-6600.json => x86_64-cpuid-Core-i5-6600.json} | 0 ...e-i5-6600.xml => x86_64-cpuid-Core-i5-6600.xml} | 0 ...est.xml => x86_64-cpuid-Core-i7-2600-guest.xml} | 0 ...host.xml => x86_64-cpuid-Core-i7-2600-host.xml} | 0 ...json.xml => x86_64-cpuid-Core-i7-2600-json.xml} | 0 ...i7-2600.json => x86_64-cpuid-Core-i7-2600.json} | 0 ...e-i7-2600.xml => x86_64-cpuid-Core-i7-2600.xml} | 0 ...st.xml => x86_64-cpuid-Core-i7-3520M-guest.xml} | 0 ...ost.xml => x86_64-cpuid-Core-i7-3520M-host.xml} | 0 ...i7-3520M.xml => x86_64-cpuid-Core-i7-3520M.xml} | 0 ...t.xml => x86_64-cpuid-Core-i7-3740QM-guest.xml} | 0 ...st.xml => x86_64-cpuid-Core-i7-3740QM-host.xml} | 0 ...on.xml => x86_64-cpuid-Core-i7-3740QM-json.xml} | 0 ...740QM.json => x86_64-cpuid-Core-i7-3740QM.json} | 0 ...-3740QM.xml => x86_64-cpuid-Core-i7-3740QM.xml} | 0 ...est.xml => x86_64-cpuid-Core-i7-3770-guest.xml} | 0 ...host.xml => x86_64-cpuid-Core-i7-3770-host.xml} | 0 ...json.xml => x86_64-cpuid-Core-i7-3770-json.xml} | 0 ...i7-3770.json => x86_64-cpuid-Core-i7-3770.json} | 0 ...e-i7-3770.xml => x86_64-cpuid-Core-i7-3770.xml} | 0 ...st.xml => x86_64-cpuid-Core-i7-4600U-guest.xml} | 0 ...ost.xml => x86_64-cpuid-Core-i7-4600U-host.xml} | 0 ...son.xml => x86_64-cpuid-Core-i7-4600U-json.xml} | 0 ...-4600U.json => x86_64-cpuid-Core-i7-4600U.json} | 0 ...i7-4600U.xml => x86_64-cpuid-Core-i7-4600U.xml} | 0 ...st.xml => x86_64-cpuid-Core-i7-5600U-guest.xml} | 0 ...ost.xml => x86_64-cpuid-Core-i7-5600U-host.xml} | 0 ...son.xml => x86_64-cpuid-Core-i7-5600U-json.xml} | 0 ...-5600U.json => x86_64-cpuid-Core-i7-5600U.json} | 0 ...i7-5600U.xml => x86_64-cpuid-Core-i7-5600U.xml} | 0 ...uest.xml => x86_64-cpuid-Core2-E6850-guest.xml} | 0 ...-host.xml => x86_64-cpuid-Core2-E6850-host.xml} | 0 ...-json.xml => x86_64-cpuid-Core2-E6850-json.xml} | 0 ...e2-E6850.json => x86_64-cpuid-Core2-E6850.json} | 0 ...ore2-E6850.xml => x86_64-cpuid-Core2-E6850.xml} | 0 ...uest.xml => x86_64-cpuid-Core2-Q9500-guest.xml} | 0 ...-host.xml => x86_64-cpuid-Core2-Q9500-host.xml} | 0 ...ore2-Q9500.xml => x86_64-cpuid-Core2-Q9500.xml} | 0 ...50-guest.xml => x86_64-cpuid-FX-8150-guest.xml} | 0 ...8150-host.xml => x86_64-cpuid-FX-8150-host.xml} | 0 ...-cpuid-FX-8150.xml => x86_64-cpuid-FX-8150.xml} | 0 ...est.xml => x86_64-cpuid-Opteron-1352-guest.xml} | 0 ...host.xml => x86_64-cpuid-Opteron-1352-host.xml} | 0 ...eron-1352.xml => x86_64-cpuid-Opteron-1352.xml} | 0 ...est.xml => x86_64-cpuid-Opteron-2350-guest.xml} | 0 ...host.xml => x86_64-cpuid-Opteron-2350-host.xml} | 0 ...json.xml => x86_64-cpuid-Opteron-2350-json.xml} | 0 ...on-2350.json => x86_64-cpuid-Opteron-2350.json} | 0 ...eron-2350.xml => x86_64-cpuid-Opteron-2350.xml} | 0 ...est.xml => x86_64-cpuid-Opteron-6234-guest.xml} | 0 ...host.xml => x86_64-cpuid-Opteron-6234-host.xml} | 0 ...json.xml => x86_64-cpuid-Opteron-6234-json.xml} | 0 ...on-6234.json => x86_64-cpuid-Opteron-6234.json} | 0 ...eron-6234.xml => x86_64-cpuid-Opteron-6234.xml} | 0 ...est.xml => x86_64-cpuid-Opteron-6282-guest.xml} | 0 ...host.xml => x86_64-cpuid-Opteron-6282-host.xml} | 0 ...eron-6282.xml => x86_64-cpuid-Opteron-6282.xml} | 0 ...st.xml => x86_64-cpuid-Pentium-P6100-guest.xml} | 0 ...ost.xml => x86_64-cpuid-Pentium-P6100-host.xml} | 0 ...um-P6100.xml => x86_64-cpuid-Pentium-P6100.xml} | 0 ...guest.xml => x86_64-cpuid-Phenom-B95-guest.xml} | 0 ...5-host.xml => x86_64-cpuid-Phenom-B95-host.xml} | 0 ...5-json.xml => x86_64-cpuid-Phenom-B95-json.xml} | 0 ...henom-B95.json => x86_64-cpuid-Phenom-B95.json} | 0 ...-Phenom-B95.xml => x86_64-cpuid-Phenom-B95.xml} | 0 ...-guest.xml => x86_64-cpuid-Xeon-5110-guest.xml} | 0 ...10-host.xml => x86_64-cpuid-Xeon-5110-host.xml} | 0 ...id-Xeon-5110.xml => x86_64-cpuid-Xeon-5110.xml} | 0 ...est.xml => x86_64-cpuid-Xeon-E3-1245-guest.xml} | 0 ...host.xml => x86_64-cpuid-Xeon-E3-1245-host.xml} | 0 ...json.xml => x86_64-cpuid-Xeon-E3-1245-json.xml} | 0 ...E3-1245.json => x86_64-cpuid-Xeon-E3-1245.json} | 0 ...n-E3-1245.xml => x86_64-cpuid-Xeon-E3-1245.xml} | 0 ...est.xml => x86_64-cpuid-Xeon-E5-2630-guest.xml} | 0 ...host.xml => x86_64-cpuid-Xeon-E5-2630-host.xml} | 0 ...json.xml => x86_64-cpuid-Xeon-E5-2630-json.xml} | 0 ...E5-2630.json => x86_64-cpuid-Xeon-E5-2630.json} | 0 ...n-E5-2630.xml => x86_64-cpuid-Xeon-E5-2630.xml} | 0 ...est.xml => x86_64-cpuid-Xeon-E5-2650-guest.xml} | 0 ...host.xml => x86_64-cpuid-Xeon-E5-2650-host.xml} | 0 ...json.xml => x86_64-cpuid-Xeon-E5-2650-json.xml} | 0 ...E5-2650.json => x86_64-cpuid-Xeon-E5-2650.json} | 0 ...n-E5-2650.xml => x86_64-cpuid-Xeon-E5-2650.xml} | 0 ...est.xml => x86_64-cpuid-Xeon-E7-4820-guest.xml} | 0 ...host.xml => x86_64-cpuid-Xeon-E7-4820-host.xml} | 0 ...json.xml => x86_64-cpuid-Xeon-E7-4820-json.xml} | 0 ...E7-4820.json => x86_64-cpuid-Xeon-E7-4820.json} | 0 ...n-E7-4820.xml => x86_64-cpuid-Xeon-E7-4820.xml} | 0 ...guest.xml => x86_64-cpuid-Xeon-W3520-guest.xml} | 0 ...0-host.xml => x86_64-cpuid-Xeon-W3520-host.xml} | 0 ...0-json.xml => x86_64-cpuid-Xeon-W3520-json.xml} | 0 ...eon-W3520.json => x86_64-cpuid-Xeon-W3520.json} | 0 ...-Xeon-W3520.xml => x86_64-cpuid-Xeon-W3520.xml} | 0 ...guest.xml => x86_64-cpuid-Xeon-X5460-guest.xml} | 0 ...0-host.xml => x86_64-cpuid-Xeon-X5460-host.xml} | 0 ...-Xeon-X5460.xml => x86_64-cpuid-Xeon-X5460.xml} | 0 ...le-extra.xml => x86_64-exact-disable-extra.xml} | 0 ...-exact-disable.xml => x86_64-exact-disable.xml} | 0 ...xact-disable2.xml => x86_64-exact-disable2.xml} | 0 ...bid-extra.xml => x86_64-exact-forbid-extra.xml} | 0 ...86-exact-forbid.xml => x86_64-exact-forbid.xml} | 0 ...-Haswell.xml => x86_64-exact-force-Haswell.xml} | 0 ...{x86-exact-force.xml => x86_64-exact-force.xml} | 0 ...re-extra.xml => x86_64-exact-require-extra.xml} | 0 ...-exact-require.xml => x86_64-exact-require.xml} | 0 .../{x86-exact.xml => x86_64-exact.xml} | 0 ...-nofallback.xml => x86_64-guest-nofallback.xml} | 0 .../{x86-guest.xml => x86_64-guest.xml} | 0 ...t.xml => x86_64-host+guest,model486-result.xml} | 0 ...ult.xml => x86_64-host+guest,models-result.xml} | 0 ...est-result.xml => x86_64-host+guest-result.xml} | 0 .../{x86-host+guest.xml => x86_64-host+guest.xml} | 0 ... x86_64-host+host+host-model,models-result.xml} | 0 ...k.xml => x86_64-host+host-model-nofallback.xml} | 0 ...t+host-model.xml => x86_64-host+host-model.xml} | 0 ...l => x86_64-host+host-passthrough-features.xml} | 0 ...hrough.xml => x86_64-host+host-passthrough.xml} | 0 .../{x86-host+min.xml => x86_64-host+min.xml} | 0 ...ult.xml => x86_64-host+penryn-force-result.xml} | 0 ...-host+pentium3.xml => x86_64-host+pentium3.xml} | 0 ...l => x86_64-host+strict-force-extra-result.xml} | 0 ...-host-Haswell-noTSX+Haswell,haswell-result.xml} | 0 ...Haswell-noTSX+Haswell-noTSX,haswell-result.xml} | 0 ...64-host-Haswell-noTSX+Haswell-noTSX-result.xml} | 0 ...ell-noTSX.xml => x86_64-host-Haswell-noTSX.xml} | 0 ...SandyBridge.xml => x86_64-host-SandyBridge.xml} | 0 ...-host-amd-fake.xml => x86_64-host-amd-fake.xml} | 0 .../{x86-host-amd.xml => x86_64-host-amd.xml} | 0 ....xml => x86_64-host-better+pentium3-result.xml} | 0 ...{x86-host-better.xml => x86_64-host-better.xml} | 0 ...incomp-arch.xml => x86_64-host-incomp-arch.xml} | 0 ...model.xml => x86_64-host-invtsc+host-model.xml} | 0 ...{x86-host-invtsc.xml => x86_64-host-invtsc.xml} | 0 ...llback.xml => x86_64-host-model-nofallback.xml} | 0 .../{x86-host-model.xml => x86_64-host-model.xml} | 0 ...ost-no-vendor.xml => x86_64-host-no-vendor.xml} | 0 ...es.xml => x86_64-host-passthrough-features.xml} | 0 ...passthrough.xml => x86_64-host-passthrough.xml} | 0 ...sult.xml => x86_64-host-worse+guest-result.xml} | 0 .../{x86-host-worse.xml => x86_64-host-worse.xml} | 0 .../cputestdata/{x86-host.xml => x86_64-host.xml} | 0 tests/cputestdata/{x86-min.xml => x86_64-min.xml} | 0 ...86-penryn-force.xml => x86_64-penryn-force.xml} | 0 ...86-pentium3-amd.xml => x86_64-pentium3-amd.xml} | 0 .../{x86-pentium3.xml => x86_64-pentium3.xml} | 0 ...trict-disable.xml => x86_64-strict-disable.xml} | 0 ...rce-extra.xml => x86_64-strict-force-extra.xml} | 0 ...{x86-strict-full.xml => x86_64-strict-full.xml} | 0 .../{x86-strict.xml => x86_64-strict.xml} | 0 211 files changed, 103 insertions(+), 103 deletions(-) rename tests/cputestdata/{x86-Haswell-noTSX-nofallback.xml => x86_64-Haswell-noTSX-nofallback.xml} (100%) rename tests/cputestdata/{x86-Haswell-noTSX.xml => x86_64-Haswell-noTSX.xml} (100%) rename tests/cputestdata/{x86-Haswell.xml => x86_64-Haswell.xml} (100%) rename tests/cputestdata/{x86-baseline-1-result.xml => x86_64-baseline-1-result.xml} (100%) rename tests/cputestdata/{x86-baseline-1.xml => x86_64-baseline-1.xml} (100%) rename tests/cputestdata/{x86-baseline-2-result.xml => x86_64-baseline-2-result.xml} (100%) rename tests/cputestdata/{x86-baseline-2.xml => x86_64-baseline-2.xml} (100%) rename tests/cputestdata/{x86-baseline-3-expanded.xml => x86_64-baseline-3-expanded.xml} (100%) rename tests/cputestdata/{x86-baseline-3-result.xml => x86_64-baseline-3-result.xml} (100%) rename tests/cputestdata/{x86-baseline-3.xml => x86_64-baseline-3.xml} (100%) rename tests/cputestdata/{x86-baseline-4-expanded.xml => x86_64-baseline-4-expanded.xml} (100%) rename tests/cputestdata/{x86-baseline-4-result.xml => x86_64-baseline-4-result.xml} (100%) rename tests/cputestdata/{x86-baseline-4.xml => x86_64-baseline-4.xml} (100%) rename tests/cputestdata/{x86-baseline-5-expanded.xml => x86_64-baseline-5-expanded.xml} (100%) rename tests/cputestdata/{x86-baseline-5-result.xml => x86_64-baseline-5-result.xml} (100%) rename tests/cputestdata/{x86-baseline-5.xml => x86_64-baseline-5.xml} (100%) rename tests/cputestdata/{x86-baseline-6-migratable.xml => x86_64-baseline-6-migratable.xml} (100%) rename tests/cputestdata/{x86-baseline-6-result.xml => x86_64-baseline-6-result.xml} (100%) rename tests/cputestdata/{x86-baseline-6.xml => x86_64-baseline-6.xml} (100%) rename tests/cputestdata/{x86-baseline-7-result.xml => x86_64-baseline-7-result.xml} (100%) rename tests/cputestdata/{x86-baseline-7.xml => x86_64-baseline-7.xml} (100%) rename tests/cputestdata/{x86-baseline-8-result.xml => x86_64-baseline-8-result.xml} (100%) rename tests/cputestdata/{x86-baseline-8.xml => x86_64-baseline-8.xml} (100%) rename tests/cputestdata/{x86-baseline-incompatible-vendors.xml => x86_64-baseline-incompatible-vendors.xml} (100%) rename tests/cputestdata/{x86-baseline-no-vendor-result.xml => x86_64-baseline-no-vendor-result.xml} (100%) rename tests/cputestdata/{x86-baseline-no-vendor.xml => x86_64-baseline-no-vendor.xml} (100%) rename tests/cputestdata/{x86-baseline-some-vendors-result.xml => x86_64-baseline-some-vendors-result.xml} (100%) rename tests/cputestdata/{x86-baseline-some-vendors.xml => x86_64-baseline-some-vendors.xml} (100%) rename tests/cputestdata/{x86-bogus-feature.xml => x86_64-bogus-feature.xml} (100%) rename tests/cputestdata/{x86-bogus-model.xml => x86_64-bogus-model.xml} (100%) rename tests/cputestdata/{x86-bogus-vendor.xml => x86_64-bogus-vendor.xml} (100%) rename tests/cputestdata/{x86-cpuid-A10-5800K-guest.xml => x86_64-cpuid-A10-5800K-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-A10-5800K-host.xml => x86_64-cpuid-A10-5800K-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-A10-5800K-json.xml => x86_64-cpuid-A10-5800K-json.xml} (100%) rename tests/cputestdata/{x86-cpuid-A10-5800K.json => x86_64-cpuid-A10-5800K.json} (100%) rename tests/cputestdata/{x86-cpuid-A10-5800K.xml => x86_64-cpuid-A10-5800K.xml} (100%) rename tests/cputestdata/{x86-cpuid-Atom-D510-guest.xml => x86_64-cpuid-Atom-D510-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Atom-D510-host.xml => x86_64-cpuid-Atom-D510-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Atom-D510.xml => x86_64-cpuid-Atom-D510.xml} (100%) rename tests/cputestdata/{x86-cpuid-Atom-N450-guest.xml => x86_64-cpuid-Atom-N450-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Atom-N450-host.xml => x86_64-cpuid-Atom-N450-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Atom-N450.xml => x86_64-cpuid-Atom-N450.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i5-2500-guest.xml => x86_64-cpuid-Core-i5-2500-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i5-2500-host.xml => x86_64-cpuid-Core-i5-2500-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i5-2500-json.xml => x86_64-cpuid-Core-i5-2500-json.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i5-2500.json => x86_64-cpuid-Core-i5-2500.json} (100%) rename tests/cputestdata/{x86-cpuid-Core-i5-2500.xml => x86_64-cpuid-Core-i5-2500.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i5-2540M-guest.xml => x86_64-cpuid-Core-i5-2540M-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i5-2540M-host.xml => x86_64-cpuid-Core-i5-2540M-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i5-2540M-json.xml => x86_64-cpuid-Core-i5-2540M-json.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i5-2540M.json => x86_64-cpuid-Core-i5-2540M.json} (100%) rename tests/cputestdata/{x86-cpuid-Core-i5-2540M.xml => x86_64-cpuid-Core-i5-2540M.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i5-4670T-guest.xml => x86_64-cpuid-Core-i5-4670T-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i5-4670T-host.xml => x86_64-cpuid-Core-i5-4670T-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i5-4670T-json.xml => x86_64-cpuid-Core-i5-4670T-json.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i5-4670T.json => x86_64-cpuid-Core-i5-4670T.json} (100%) rename tests/cputestdata/{x86-cpuid-Core-i5-4670T.xml => x86_64-cpuid-Core-i5-4670T.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i5-6600-guest.xml => x86_64-cpuid-Core-i5-6600-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i5-6600-host.xml => x86_64-cpuid-Core-i5-6600-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i5-6600-json.xml => x86_64-cpuid-Core-i5-6600-json.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i5-6600.json => x86_64-cpuid-Core-i5-6600.json} (100%) rename tests/cputestdata/{x86-cpuid-Core-i5-6600.xml => x86_64-cpuid-Core-i5-6600.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-2600-guest.xml => x86_64-cpuid-Core-i7-2600-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-2600-host.xml => x86_64-cpuid-Core-i7-2600-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-2600-json.xml => x86_64-cpuid-Core-i7-2600-json.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-2600.json => x86_64-cpuid-Core-i7-2600.json} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-2600.xml => x86_64-cpuid-Core-i7-2600.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-3520M-guest.xml => x86_64-cpuid-Core-i7-3520M-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-3520M-host.xml => x86_64-cpuid-Core-i7-3520M-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-3520M.xml => x86_64-cpuid-Core-i7-3520M.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-3740QM-guest.xml => x86_64-cpuid-Core-i7-3740QM-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-3740QM-host.xml => x86_64-cpuid-Core-i7-3740QM-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-3740QM-json.xml => x86_64-cpuid-Core-i7-3740QM-json.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-3740QM.json => x86_64-cpuid-Core-i7-3740QM.json} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-3740QM.xml => x86_64-cpuid-Core-i7-3740QM.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-3770-guest.xml => x86_64-cpuid-Core-i7-3770-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-3770-host.xml => x86_64-cpuid-Core-i7-3770-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-3770-json.xml => x86_64-cpuid-Core-i7-3770-json.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-3770.json => x86_64-cpuid-Core-i7-3770.json} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-3770.xml => x86_64-cpuid-Core-i7-3770.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-4600U-guest.xml => x86_64-cpuid-Core-i7-4600U-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-4600U-host.xml => x86_64-cpuid-Core-i7-4600U-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-4600U-json.xml => x86_64-cpuid-Core-i7-4600U-json.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-4600U.json => x86_64-cpuid-Core-i7-4600U.json} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-4600U.xml => x86_64-cpuid-Core-i7-4600U.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-5600U-guest.xml => x86_64-cpuid-Core-i7-5600U-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-5600U-host.xml => x86_64-cpuid-Core-i7-5600U-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-5600U-json.xml => x86_64-cpuid-Core-i7-5600U-json.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-5600U.json => x86_64-cpuid-Core-i7-5600U.json} (100%) rename tests/cputestdata/{x86-cpuid-Core-i7-5600U.xml => x86_64-cpuid-Core-i7-5600U.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core2-E6850-guest.xml => x86_64-cpuid-Core2-E6850-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core2-E6850-host.xml => x86_64-cpuid-Core2-E6850-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core2-E6850-json.xml => x86_64-cpuid-Core2-E6850-json.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core2-E6850.json => x86_64-cpuid-Core2-E6850.json} (100%) rename tests/cputestdata/{x86-cpuid-Core2-E6850.xml => x86_64-cpuid-Core2-E6850.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core2-Q9500-guest.xml => x86_64-cpuid-Core2-Q9500-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core2-Q9500-host.xml => x86_64-cpuid-Core2-Q9500-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Core2-Q9500.xml => x86_64-cpuid-Core2-Q9500.xml} (100%) rename tests/cputestdata/{x86-cpuid-FX-8150-guest.xml => x86_64-cpuid-FX-8150-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-FX-8150-host.xml => x86_64-cpuid-FX-8150-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-FX-8150.xml => x86_64-cpuid-FX-8150.xml} (100%) rename tests/cputestdata/{x86-cpuid-Opteron-1352-guest.xml => x86_64-cpuid-Opteron-1352-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Opteron-1352-host.xml => x86_64-cpuid-Opteron-1352-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Opteron-1352.xml => x86_64-cpuid-Opteron-1352.xml} (100%) rename tests/cputestdata/{x86-cpuid-Opteron-2350-guest.xml => x86_64-cpuid-Opteron-2350-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Opteron-2350-host.xml => x86_64-cpuid-Opteron-2350-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Opteron-2350-json.xml => x86_64-cpuid-Opteron-2350-json.xml} (100%) rename tests/cputestdata/{x86-cpuid-Opteron-2350.json => x86_64-cpuid-Opteron-2350.json} (100%) rename tests/cputestdata/{x86-cpuid-Opteron-2350.xml => x86_64-cpuid-Opteron-2350.xml} (100%) rename tests/cputestdata/{x86-cpuid-Opteron-6234-guest.xml => x86_64-cpuid-Opteron-6234-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Opteron-6234-host.xml => x86_64-cpuid-Opteron-6234-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Opteron-6234-json.xml => x86_64-cpuid-Opteron-6234-json.xml} (100%) rename tests/cputestdata/{x86-cpuid-Opteron-6234.json => x86_64-cpuid-Opteron-6234.json} (100%) rename tests/cputestdata/{x86-cpuid-Opteron-6234.xml => x86_64-cpuid-Opteron-6234.xml} (100%) rename tests/cputestdata/{x86-cpuid-Opteron-6282-guest.xml => x86_64-cpuid-Opteron-6282-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Opteron-6282-host.xml => x86_64-cpuid-Opteron-6282-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Opteron-6282.xml => x86_64-cpuid-Opteron-6282.xml} (100%) rename tests/cputestdata/{x86-cpuid-Pentium-P6100-guest.xml => x86_64-cpuid-Pentium-P6100-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Pentium-P6100-host.xml => x86_64-cpuid-Pentium-P6100-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Pentium-P6100.xml => x86_64-cpuid-Pentium-P6100.xml} (100%) rename tests/cputestdata/{x86-cpuid-Phenom-B95-guest.xml => x86_64-cpuid-Phenom-B95-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Phenom-B95-host.xml => x86_64-cpuid-Phenom-B95-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Phenom-B95-json.xml => x86_64-cpuid-Phenom-B95-json.xml} (100%) rename tests/cputestdata/{x86-cpuid-Phenom-B95.json => x86_64-cpuid-Phenom-B95.json} (100%) rename tests/cputestdata/{x86-cpuid-Phenom-B95.xml => x86_64-cpuid-Phenom-B95.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-5110-guest.xml => x86_64-cpuid-Xeon-5110-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-5110-host.xml => x86_64-cpuid-Xeon-5110-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-5110.xml => x86_64-cpuid-Xeon-5110.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-E3-1245-guest.xml => x86_64-cpuid-Xeon-E3-1245-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-E3-1245-host.xml => x86_64-cpuid-Xeon-E3-1245-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-E3-1245-json.xml => x86_64-cpuid-Xeon-E3-1245-json.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-E3-1245.json => x86_64-cpuid-Xeon-E3-1245.json} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-E3-1245.xml => x86_64-cpuid-Xeon-E3-1245.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-E5-2630-guest.xml => x86_64-cpuid-Xeon-E5-2630-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-E5-2630-host.xml => x86_64-cpuid-Xeon-E5-2630-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-E5-2630-json.xml => x86_64-cpuid-Xeon-E5-2630-json.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-E5-2630.json => x86_64-cpuid-Xeon-E5-2630.json} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-E5-2630.xml => x86_64-cpuid-Xeon-E5-2630.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-E5-2650-guest.xml => x86_64-cpuid-Xeon-E5-2650-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-E5-2650-host.xml => x86_64-cpuid-Xeon-E5-2650-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-E5-2650-json.xml => x86_64-cpuid-Xeon-E5-2650-json.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-E5-2650.json => x86_64-cpuid-Xeon-E5-2650.json} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-E5-2650.xml => x86_64-cpuid-Xeon-E5-2650.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-E7-4820-guest.xml => x86_64-cpuid-Xeon-E7-4820-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-E7-4820-host.xml => x86_64-cpuid-Xeon-E7-4820-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-E7-4820-json.xml => x86_64-cpuid-Xeon-E7-4820-json.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-E7-4820.json => x86_64-cpuid-Xeon-E7-4820.json} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-E7-4820.xml => x86_64-cpuid-Xeon-E7-4820.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-W3520-guest.xml => x86_64-cpuid-Xeon-W3520-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-W3520-host.xml => x86_64-cpuid-Xeon-W3520-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-W3520-json.xml => x86_64-cpuid-Xeon-W3520-json.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-W3520.json => x86_64-cpuid-Xeon-W3520.json} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-W3520.xml => x86_64-cpuid-Xeon-W3520.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-X5460-guest.xml => x86_64-cpuid-Xeon-X5460-guest.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-X5460-host.xml => x86_64-cpuid-Xeon-X5460-host.xml} (100%) rename tests/cputestdata/{x86-cpuid-Xeon-X5460.xml => x86_64-cpuid-Xeon-X5460.xml} (100%) rename tests/cputestdata/{x86-exact-disable-extra.xml => x86_64-exact-disable-extra.xml} (100%) rename tests/cputestdata/{x86-exact-disable.xml => x86_64-exact-disable.xml} (100%) rename tests/cputestdata/{x86-exact-disable2.xml => x86_64-exact-disable2.xml} (100%) rename tests/cputestdata/{x86-exact-forbid-extra.xml => x86_64-exact-forbid-extra.xml} (100%) rename tests/cputestdata/{x86-exact-forbid.xml => x86_64-exact-forbid.xml} (100%) rename tests/cputestdata/{x86-exact-force-Haswell.xml => x86_64-exact-force-Haswell.xml} (100%) rename tests/cputestdata/{x86-exact-force.xml => x86_64-exact-force.xml} (100%) rename tests/cputestdata/{x86-exact-require-extra.xml => x86_64-exact-require-extra.xml} (100%) rename tests/cputestdata/{x86-exact-require.xml => x86_64-exact-require.xml} (100%) rename tests/cputestdata/{x86-exact.xml => x86_64-exact.xml} (100%) rename tests/cputestdata/{x86-guest-nofallback.xml => x86_64-guest-nofallback.xml} (100%) rename tests/cputestdata/{x86-guest.xml => x86_64-guest.xml} (100%) rename tests/cputestdata/{x86-host+guest,model486-result.xml => x86_64-host+guest,model486-result.xml} (100%) rename tests/cputestdata/{x86-host+guest,models-result.xml => x86_64-host+guest,models-result.xml} (100%) rename tests/cputestdata/{x86-host+guest-result.xml => x86_64-host+guest-result.xml} (100%) rename tests/cputestdata/{x86-host+guest.xml => x86_64-host+guest.xml} (100%) rename tests/cputestdata/{x86-host+host+host-model,models-result.xml => x86_64-host+host+host-model,models-result.xml} (100%) rename tests/cputestdata/{x86-host+host-model-nofallback.xml => x86_64-host+host-model-nofallback.xml} (100%) rename tests/cputestdata/{x86-host+host-model.xml => x86_64-host+host-model.xml} (100%) rename tests/cputestdata/{x86-host+host-passthrough-features.xml => x86_64-host+host-passthrough-features.xml} (100%) rename tests/cputestdata/{x86-host+host-passthrough.xml => x86_64-host+host-passthrough.xml} (100%) rename tests/cputestdata/{x86-host+min.xml => x86_64-host+min.xml} (100%) rename tests/cputestdata/{x86-host+penryn-force-result.xml => x86_64-host+penryn-force-result.xml} (100%) rename tests/cputestdata/{x86-host+pentium3.xml => x86_64-host+pentium3.xml} (100%) rename tests/cputestdata/{x86-host+strict-force-extra-result.xml => x86_64-host+strict-force-extra-result.xml} (100%) rename tests/cputestdata/{x86-host-Haswell-noTSX+Haswell,haswell-result.xml => x86_64-host-Haswell-noTSX+Haswell,haswell-result.xml} (100%) rename tests/cputestdata/{x86-host-Haswell-noTSX+Haswell-noTSX,haswell-result.xml => x86_64-host-Haswell-noTSX+Haswell-noTSX,haswell-result.xml} (100%) rename tests/cputestdata/{x86-host-Haswell-noTSX+Haswell-noTSX-result.xml => x86_64-host-Haswell-noTSX+Haswell-noTSX-result.xml} (100%) rename tests/cputestdata/{x86-host-Haswell-noTSX.xml => x86_64-host-Haswell-noTSX.xml} (100%) rename tests/cputestdata/{x86-host-SandyBridge.xml => x86_64-host-SandyBridge.xml} (100%) rename tests/cputestdata/{x86-host-amd-fake.xml => x86_64-host-amd-fake.xml} (100%) rename tests/cputestdata/{x86-host-amd.xml => x86_64-host-amd.xml} (100%) rename tests/cputestdata/{x86-host-better+pentium3-result.xml => x86_64-host-better+pentium3-result.xml} (100%) rename tests/cputestdata/{x86-host-better.xml => x86_64-host-better.xml} (100%) rename tests/cputestdata/{x86-host-incomp-arch.xml => x86_64-host-incomp-arch.xml} (100%) rename tests/cputestdata/{x86-host-invtsc+host-model.xml => x86_64-host-invtsc+host-model.xml} (100%) rename tests/cputestdata/{x86-host-invtsc.xml => x86_64-host-invtsc.xml} (100%) rename tests/cputestdata/{x86-host-model-nofallback.xml => x86_64-host-model-nofallback.xml} (100%) rename tests/cputestdata/{x86-host-model.xml => x86_64-host-model.xml} (100%) rename tests/cputestdata/{x86-host-no-vendor.xml => x86_64-host-no-vendor.xml} (100%) rename tests/cputestdata/{x86-host-passthrough-features.xml => x86_64-host-passthrough-features.xml} (100%) rename tests/cputestdata/{x86-host-passthrough.xml => x86_64-host-passthrough.xml} (100%) rename tests/cputestdata/{x86-host-worse+guest-result.xml => x86_64-host-worse+guest-result.xml} (100%) rename tests/cputestdata/{x86-host-worse.xml => x86_64-host-worse.xml} (100%) rename tests/cputestdata/{x86-host.xml => x86_64-host.xml} (100%) rename tests/cputestdata/{x86-min.xml => x86_64-min.xml} (100%) rename tests/cputestdata/{x86-penryn-force.xml => x86_64-penryn-force.xml} (100%) rename tests/cputestdata/{x86-pentium3-amd.xml => x86_64-pentium3-amd.xml} (100%) rename tests/cputestdata/{x86-pentium3.xml => x86_64-pentium3.xml} (100%) rename tests/cputestdata/{x86-strict-disable.xml => x86_64-strict-disable.xml} (100%) rename tests/cputestdata/{x86-strict-force-extra.xml => x86_64-strict-force-extra.xml} (100%) rename tests/cputestdata/{x86-strict-full.xml => x86_64-strict-full.xml} (100%) rename tests/cputestdata/{x86-strict.xml => x86_64-strict.xml} (100%) diff --git a/tests/cputest.c b/tests/cputest.c index 8d761af61..406b40dfe 100644 --- a/tests/cputest.c +++ b/tests/cputest.c @@ -677,13 +677,13 @@ mymain(void) } while (0) /* host to host comparison */ - DO_TEST_COMPARE("x86", "host", "host", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_COMPARE("x86", "host", "host-better", VIR_CPU_COMPARE_INCOMPATIBLE); - DO_TEST_COMPARE("x86", "host", "host-worse", VIR_CPU_COMPARE_SUPERSET); - DO_TEST_COMPARE("x86", "host", "host-amd-fake", VIR_CPU_COMPARE_INCOMPATIBLE); - DO_TEST_COMPARE("x86", "host", "host-incomp-arch", VIR_CPU_COMPARE_INCOMPATIBLE); - DO_TEST_COMPARE("x86", "host", "host-no-vendor", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_COMPARE("x86", "host-no-vendor", "host", VIR_CPU_COMPARE_INCOMPATIBLE); + DO_TEST_COMPARE("x86_64", "host", "host", VIR_CPU_COMPARE_IDENTICAL); + DO_TEST_COMPARE("x86_64", "host", "host-better", VIR_CPU_COMPARE_INCOMPATIBLE); + DO_TEST_COMPARE("x86_64", "host", "host-worse", VIR_CPU_COMPARE_SUPERSET); + DO_TEST_COMPARE("x86_64", "host", "host-amd-fake", VIR_CPU_COMPARE_INCOMPATIBLE); + DO_TEST_COMPARE("x86_64", "host", "host-incomp-arch", VIR_CPU_COMPARE_INCOMPATIBLE); + DO_TEST_COMPARE("x86_64", "host", "host-no-vendor", VIR_CPU_COMPARE_IDENTICAL); + DO_TEST_COMPARE("x86_64", "host-no-vendor", "host", VIR_CPU_COMPARE_INCOMPATIBLE); DO_TEST_COMPARE("ppc64", "host", "host", VIR_CPU_COMPARE_IDENTICAL); DO_TEST_COMPARE("ppc64", "host", "host-better", VIR_CPU_COMPARE_INCOMPATIBLE); @@ -693,28 +693,28 @@ mymain(void) DO_TEST_COMPARE("ppc64", "host-no-vendor", "host", VIR_CPU_COMPARE_INCOMPATIBLE); /* guest to host comparison */ - DO_TEST_COMPARE("x86", "host", "bogus-model", VIR_CPU_COMPARE_ERROR); - DO_TEST_COMPARE("x86", "host", "bogus-feature", VIR_CPU_COMPARE_ERROR); - DO_TEST_COMPARE("x86", "host", "min", VIR_CPU_COMPARE_SUPERSET); - DO_TEST_COMPARE("x86", "host", "pentium3", VIR_CPU_COMPARE_SUPERSET); - DO_TEST_COMPARE("x86", "host", "exact", VIR_CPU_COMPARE_SUPERSET); - DO_TEST_COMPARE("x86", "host", "exact-forbid", VIR_CPU_COMPARE_INCOMPATIBLE); - DO_TEST_COMPARE("x86", "host", "exact-forbid-extra", VIR_CPU_COMPARE_SUPERSET); - DO_TEST_COMPARE("x86", "host", "exact-disable", VIR_CPU_COMPARE_SUPERSET); - DO_TEST_COMPARE("x86", "host", "exact-disable2", VIR_CPU_COMPARE_SUPERSET); - DO_TEST_COMPARE("x86", "host", "exact-disable-extra", VIR_CPU_COMPARE_SUPERSET); - DO_TEST_COMPARE("x86", "host", "exact-require", VIR_CPU_COMPARE_SUPERSET); - DO_TEST_COMPARE("x86", "host", "exact-require-extra", VIR_CPU_COMPARE_INCOMPATIBLE); - DO_TEST_COMPARE("x86", "host", "exact-force", VIR_CPU_COMPARE_SUPERSET); - DO_TEST_COMPARE("x86", "host", "strict", VIR_CPU_COMPARE_INCOMPATIBLE); - DO_TEST_COMPARE("x86", "host", "strict-full", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_COMPARE("x86", "host", "strict-disable", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_COMPARE("x86", "host", "strict-force-extra", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_COMPARE("x86", "host", "guest", VIR_CPU_COMPARE_SUPERSET); - DO_TEST_COMPARE("x86", "host", "pentium3-amd", VIR_CPU_COMPARE_INCOMPATIBLE); - DO_TEST_COMPARE("x86", "host-amd", "pentium3-amd", VIR_CPU_COMPARE_SUPERSET); - DO_TEST_COMPARE("x86", "host-worse", "penryn-force", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_COMPARE("x86", "host-SandyBridge", "exact-force-Haswell", VIR_CPU_COMPARE_IDENTICAL); + DO_TEST_COMPARE("x86_64", "host", "bogus-model", VIR_CPU_COMPARE_ERROR); + DO_TEST_COMPARE("x86_64", "host", "bogus-feature", VIR_CPU_COMPARE_ERROR); + DO_TEST_COMPARE("x86_64", "host", "min", VIR_CPU_COMPARE_SUPERSET); + DO_TEST_COMPARE("x86_64", "host", "pentium3", VIR_CPU_COMPARE_SUPERSET); + DO_TEST_COMPARE("x86_64", "host", "exact", VIR_CPU_COMPARE_SUPERSET); + DO_TEST_COMPARE("x86_64", "host", "exact-forbid", VIR_CPU_COMPARE_INCOMPATIBLE); + DO_TEST_COMPARE("x86_64", "host", "exact-forbid-extra", VIR_CPU_COMPARE_SUPERSET); + DO_TEST_COMPARE("x86_64", "host", "exact-disable", VIR_CPU_COMPARE_SUPERSET); + DO_TEST_COMPARE("x86_64", "host", "exact-disable2", VIR_CPU_COMPARE_SUPERSET); + DO_TEST_COMPARE("x86_64", "host", "exact-disable-extra", VIR_CPU_COMPARE_SUPERSET); + DO_TEST_COMPARE("x86_64", "host", "exact-require", VIR_CPU_COMPARE_SUPERSET); + DO_TEST_COMPARE("x86_64", "host", "exact-require-extra", VIR_CPU_COMPARE_INCOMPATIBLE); + DO_TEST_COMPARE("x86_64", "host", "exact-force", VIR_CPU_COMPARE_SUPERSET); + DO_TEST_COMPARE("x86_64", "host", "strict", VIR_CPU_COMPARE_INCOMPATIBLE); + DO_TEST_COMPARE("x86_64", "host", "strict-full", VIR_CPU_COMPARE_IDENTICAL); + DO_TEST_COMPARE("x86_64", "host", "strict-disable", VIR_CPU_COMPARE_IDENTICAL); + DO_TEST_COMPARE("x86_64", "host", "strict-force-extra", VIR_CPU_COMPARE_IDENTICAL); + DO_TEST_COMPARE("x86_64", "host", "guest", VIR_CPU_COMPARE_SUPERSET); + DO_TEST_COMPARE("x86_64", "host", "pentium3-amd", VIR_CPU_COMPARE_INCOMPATIBLE); + DO_TEST_COMPARE("x86_64", "host-amd", "pentium3-amd", VIR_CPU_COMPARE_SUPERSET); + DO_TEST_COMPARE("x86_64", "host-worse", "penryn-force", VIR_CPU_COMPARE_IDENTICAL); + DO_TEST_COMPARE("x86_64", "host-SandyBridge", "exact-force-Haswell", VIR_CPU_COMPARE_IDENTICAL); DO_TEST_COMPARE("ppc64", "host", "guest-strict", VIR_CPU_COMPARE_IDENTICAL); DO_TEST_COMPARE("ppc64", "host", "guest-exact", VIR_CPU_COMPARE_INCOMPATIBLE); @@ -728,14 +728,14 @@ mymain(void) /* guest updates for migration * automatically compares host CPU with the result */ - DO_TEST_UPDATE("x86", "host", "min", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_UPDATE("x86", "host", "pentium3", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_UPDATE("x86", "host", "guest", VIR_CPU_COMPARE_SUPERSET); - DO_TEST_UPDATE("x86", "host", "host-model", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_UPDATE("x86", "host", "host-model-nofallback", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_UPDATE("x86", "host-invtsc", "host-model", VIR_CPU_COMPARE_SUPERSET); - DO_TEST_UPDATE_ONLY("x86", "host", "host-passthrough"); - DO_TEST_UPDATE_ONLY("x86", "host", "host-passthrough-features"); + DO_TEST_UPDATE("x86_64", "host", "min", VIR_CPU_COMPARE_IDENTICAL); + DO_TEST_UPDATE("x86_64", "host", "pentium3", VIR_CPU_COMPARE_IDENTICAL); + DO_TEST_UPDATE("x86_64", "host", "guest", VIR_CPU_COMPARE_SUPERSET); + DO_TEST_UPDATE("x86_64", "host", "host-model", VIR_CPU_COMPARE_IDENTICAL); + DO_TEST_UPDATE("x86_64", "host", "host-model-nofallback", VIR_CPU_COMPARE_IDENTICAL); + DO_TEST_UPDATE("x86_64", "host-invtsc", "host-model", VIR_CPU_COMPARE_SUPERSET); + DO_TEST_UPDATE_ONLY("x86_64", "host", "host-passthrough"); + DO_TEST_UPDATE_ONLY("x86_64", "host", "host-passthrough-features"); DO_TEST_UPDATE("ppc64", "host", "guest", VIR_CPU_COMPARE_IDENTICAL); DO_TEST_UPDATE("ppc64", "host", "guest-nofallback", VIR_CPU_COMPARE_INCOMPATIBLE); @@ -748,21 +748,21 @@ mymain(void) DO_TEST_UPDATE("ppc64", "host", "guest-compat-incompatible", VIR_CPU_COMPARE_INCOMPATIBLE); /* computing baseline CPUs */ - DO_TEST_BASELINE("x86", "incompatible-vendors", 0, -1); - DO_TEST_BASELINE("x86", "no-vendor", 0, 0); - DO_TEST_BASELINE("x86", "some-vendors", 0, 0); - DO_TEST_BASELINE("x86", "1", 0, 0); - DO_TEST_BASELINE("x86", "2", 0, 0); - DO_TEST_BASELINE("x86", "3", 0, 0); - DO_TEST_BASELINE("x86", "3", VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES, 0); - DO_TEST_BASELINE("x86", "4", 0, 0); - DO_TEST_BASELINE("x86", "4", VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES, 0); - DO_TEST_BASELINE("x86", "5", 0, 0); - DO_TEST_BASELINE("x86", "5", VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES, 0); - DO_TEST_BASELINE("x86", "6", 0, 0); - DO_TEST_BASELINE("x86", "6", VIR_CONNECT_BASELINE_CPU_MIGRATABLE, 0); - DO_TEST_BASELINE("x86", "7", 0, 0); - DO_TEST_BASELINE("x86", "8", 0, 0); + DO_TEST_BASELINE("x86_64", "incompatible-vendors", 0, -1); + DO_TEST_BASELINE("x86_64", "no-vendor", 0, 0); + DO_TEST_BASELINE("x86_64", "some-vendors", 0, 0); + DO_TEST_BASELINE("x86_64", "1", 0, 0); + DO_TEST_BASELINE("x86_64", "2", 0, 0); + DO_TEST_BASELINE("x86_64", "3", 0, 0); + DO_TEST_BASELINE("x86_64", "3", VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES, 0); + DO_TEST_BASELINE("x86_64", "4", 0, 0); + DO_TEST_BASELINE("x86_64", "4", VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES, 0); + DO_TEST_BASELINE("x86_64", "5", 0, 0); + DO_TEST_BASELINE("x86_64", "5", VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES, 0); + DO_TEST_BASELINE("x86_64", "6", 0, 0); + DO_TEST_BASELINE("x86_64", "6", VIR_CONNECT_BASELINE_CPU_MIGRATABLE, 0); + DO_TEST_BASELINE("x86_64", "7", 0, 0); + DO_TEST_BASELINE("x86_64", "8", 0, 0); DO_TEST_BASELINE("ppc64", "incompatible-vendors", 0, -1); DO_TEST_BASELINE("ppc64", "no-vendor", 0, 0); @@ -771,29 +771,29 @@ mymain(void) DO_TEST_BASELINE("ppc64", "legacy", 0, -1); /* CPU features */ - DO_TEST_HASFEATURE("x86", "host", "vmx", YES); - DO_TEST_HASFEATURE("x86", "host", "lm", YES); - DO_TEST_HASFEATURE("x86", "host", "sse4.1", YES); - DO_TEST_HASFEATURE("x86", "host", "3dnowext", NO); - DO_TEST_HASFEATURE("x86", "host", "skinit", NO); - DO_TEST_HASFEATURE("x86", "host", "foo", FAIL); + DO_TEST_HASFEATURE("x86_64", "host", "vmx", YES); + DO_TEST_HASFEATURE("x86_64", "host", "lm", YES); + DO_TEST_HASFEATURE("x86_64", "host", "sse4.1", YES); + DO_TEST_HASFEATURE("x86_64", "host", "3dnowext", NO); + DO_TEST_HASFEATURE("x86_64", "host", "skinit", NO); + DO_TEST_HASFEATURE("x86_64", "host", "foo", FAIL); /* computing guest data and decoding the data into a guest CPU XML */ - DO_TEST_GUESTCPU("x86", "host", "guest", NULL, 0); - DO_TEST_GUESTCPU("x86", "host-better", "pentium3", NULL, 0); - DO_TEST_GUESTCPU("x86", "host-worse", "guest", NULL, 0); - DO_TEST_GUESTCPU("x86", "host", "strict-force-extra", NULL, 0); - DO_TEST_GUESTCPU("x86", "host", "penryn-force", NULL, 0); - DO_TEST_GUESTCPU("x86", "host", "guest", model486, 0); - DO_TEST_GUESTCPU("x86", "host", "guest", models, 0); - DO_TEST_GUESTCPU("x86", "host", "guest", nomodel, -1); - DO_TEST_GUESTCPU("x86", "host", "guest-nofallback", models, -1); - DO_TEST_GUESTCPU("x86", "host", "host+host-model", models, 0); - DO_TEST_GUESTCPU("x86", "host", "host+host-model-nofallback", models, -1); - DO_TEST_GUESTCPU("x86", "host-Haswell-noTSX", "Haswell", haswell, 0); - DO_TEST_GUESTCPU("x86", "host-Haswell-noTSX", "Haswell-noTSX", haswell, 0); - DO_TEST_GUESTCPU("x86", "host-Haswell-noTSX", "Haswell-noTSX-nofallback", haswell, -1); - DO_TEST_GUESTCPU("x86", "host-Haswell-noTSX", "Haswell-noTSX", NULL, 0); + DO_TEST_GUESTCPU("x86_64", "host", "guest", NULL, 0); + DO_TEST_GUESTCPU("x86_64", "host-better", "pentium3", NULL, 0); + DO_TEST_GUESTCPU("x86_64", "host-worse", "guest", NULL, 0); + DO_TEST_GUESTCPU("x86_64", "host", "strict-force-extra", NULL, 0); + DO_TEST_GUESTCPU("x86_64", "host", "penryn-force", NULL, 0); + DO_TEST_GUESTCPU("x86_64", "host", "guest", model486, 0); + DO_TEST_GUESTCPU("x86_64", "host", "guest", models, 0); + DO_TEST_GUESTCPU("x86_64", "host", "guest", nomodel, -1); + DO_TEST_GUESTCPU("x86_64", "host", "guest-nofallback", models, -1); + DO_TEST_GUESTCPU("x86_64", "host", "host+host-model", models, 0); + DO_TEST_GUESTCPU("x86_64", "host", "host+host-model-nofallback", models, -1); + DO_TEST_GUESTCPU("x86_64", "host-Haswell-noTSX", "Haswell", haswell, 0); + DO_TEST_GUESTCPU("x86_64", "host-Haswell-noTSX", "Haswell-noTSX", haswell, 0); + DO_TEST_GUESTCPU("x86_64", "host-Haswell-noTSX", "Haswell-noTSX-nofallback", haswell, -1); + DO_TEST_GUESTCPU("x86_64", "host-Haswell-noTSX", "Haswell-noTSX", NULL, 0); DO_TEST_GUESTCPU("ppc64", "host", "guest", ppc_models, 0); DO_TEST_GUESTCPU("ppc64", "host", "guest-nofallback", ppc_models, -1); @@ -801,35 +801,35 @@ mymain(void) DO_TEST_GUESTCPU("ppc64", "host", "guest-legacy-incompatible", ppc_models, -1); DO_TEST_GUESTCPU("ppc64", "host", "guest-legacy-invalid", ppc_models, -1); - DO_TEST_CPUID("x86", "A10-5800K", true); - DO_TEST_CPUID("x86", "Atom-D510", false); - DO_TEST_CPUID("x86", "Atom-N450", false); - DO_TEST_CPUID("x86", "Core-i5-2500", true); - DO_TEST_CPUID("x86", "Core-i5-2540M", true); - DO_TEST_CPUID("x86", "Core-i5-4670T", true); - DO_TEST_CPUID("x86", "Core-i5-6600", true); - DO_TEST_CPUID("x86", "Core-i7-2600", true); - DO_TEST_CPUID("x86", "Core-i7-3520M", false); - DO_TEST_CPUID("x86", "Core-i7-3740QM", true); - DO_TEST_CPUID("x86", "Core-i7-3770", true); - DO_TEST_CPUID("x86", "Core-i7-4600U", true); - DO_TEST_CPUID("x86", "Core-i7-5600U", true); - DO_TEST_CPUID("x86", "Core2-E6850", true); - DO_TEST_CPUID("x86", "Core2-Q9500", false); - DO_TEST_CPUID("x86", "FX-8150", false); - DO_TEST_CPUID("x86", "Opteron-1352", false); - DO_TEST_CPUID("x86", "Opteron-2350", true); - DO_TEST_CPUID("x86", "Opteron-6234", true); - DO_TEST_CPUID("x86", "Opteron-6282", false); - DO_TEST_CPUID("x86", "Pentium-P6100", false); - DO_TEST_CPUID("x86", "Phenom-B95", true); - DO_TEST_CPUID("x86", "Xeon-5110", false); - DO_TEST_CPUID("x86", "Xeon-E3-1245", true); - DO_TEST_CPUID("x86", "Xeon-E5-2630", true); - DO_TEST_CPUID("x86", "Xeon-E5-2650", true); - DO_TEST_CPUID("x86", "Xeon-E7-4820", true); - DO_TEST_CPUID("x86", "Xeon-W3520", true); - DO_TEST_CPUID("x86", "Xeon-X5460", false); + DO_TEST_CPUID("x86_64", "A10-5800K", true); + DO_TEST_CPUID("x86_64", "Atom-D510", false); + DO_TEST_CPUID("x86_64", "Atom-N450", false); + DO_TEST_CPUID("x86_64", "Core-i5-2500", true); + DO_TEST_CPUID("x86_64", "Core-i5-2540M", true); + DO_TEST_CPUID("x86_64", "Core-i5-4670T", true); + DO_TEST_CPUID("x86_64", "Core-i5-6600", true); + DO_TEST_CPUID("x86_64", "Core-i7-2600", true); + DO_TEST_CPUID("x86_64", "Core-i7-3520M", false); + DO_TEST_CPUID("x86_64", "Core-i7-3740QM", true); + DO_TEST_CPUID("x86_64", "Core-i7-3770", true); + DO_TEST_CPUID("x86_64", "Core-i7-4600U", true); + DO_TEST_CPUID("x86_64", "Core-i7-5600U", true); + DO_TEST_CPUID("x86_64", "Core2-E6850", true); + DO_TEST_CPUID("x86_64", "Core2-Q9500", false); + DO_TEST_CPUID("x86_64", "FX-8150", false); + DO_TEST_CPUID("x86_64", "Opteron-1352", false); + DO_TEST_CPUID("x86_64", "Opteron-2350", true); + DO_TEST_CPUID("x86_64", "Opteron-6234", true); + DO_TEST_CPUID("x86_64", "Opteron-6282", false); + DO_TEST_CPUID("x86_64", "Pentium-P6100", false); + DO_TEST_CPUID("x86_64", "Phenom-B95", true); + DO_TEST_CPUID("x86_64", "Xeon-5110", false); + DO_TEST_CPUID("x86_64", "Xeon-E3-1245", true); + DO_TEST_CPUID("x86_64", "Xeon-E5-2630", true); + DO_TEST_CPUID("x86_64", "Xeon-E5-2650", true); + DO_TEST_CPUID("x86_64", "Xeon-E7-4820", true); + DO_TEST_CPUID("x86_64", "Xeon-W3520", true); + DO_TEST_CPUID("x86_64", "Xeon-X5460", false); #if WITH_QEMU && WITH_YAJL qemuTestDriverFree(&driver); diff --git a/tests/cputestdata/cpu-parse.sh b/tests/cputestdata/cpu-parse.sh index 1b5ab4a5a..90bc2dcd9 100755 --- a/tests/cputestdata/cpu-parse.sh +++ b/tests/cputestdata/cpu-parse.sh @@ -18,7 +18,7 @@ fname=`sed -e 's/^ *//; s/ APU .*//; s/ \(v[0-9]\|SE\)$//; s/ /-/g' <<<"$model"` -fname="x86-cpuid-$fname" +fname="x86_64-cpuid-$fname" xml() { diff --git a/tests/cputestdata/x86-Haswell-noTSX-nofallback.xml b/tests/cputestdata/x86_64-Haswell-noTSX-nofallback.xml similarity index 100% rename from tests/cputestdata/x86-Haswell-noTSX-nofallback.xml rename to tests/cputestdata/x86_64-Haswell-noTSX-nofallback.xml diff --git a/tests/cputestdata/x86-Haswell-noTSX.xml b/tests/cputestdata/x86_64-Haswell-noTSX.xml similarity index 100% rename from tests/cputestdata/x86-Haswell-noTSX.xml rename to tests/cputestdata/x86_64-Haswell-noTSX.xml diff --git a/tests/cputestdata/x86-Haswell.xml b/tests/cputestdata/x86_64-Haswell.xml similarity index 100% rename from tests/cputestdata/x86-Haswell.xml rename to tests/cputestdata/x86_64-Haswell.xml diff --git a/tests/cputestdata/x86-baseline-1-result.xml b/tests/cputestdata/x86_64-baseline-1-result.xml similarity index 100% rename from tests/cputestdata/x86-baseline-1-result.xml rename to tests/cputestdata/x86_64-baseline-1-result.xml diff --git a/tests/cputestdata/x86-baseline-1.xml b/tests/cputestdata/x86_64-baseline-1.xml similarity index 100% rename from tests/cputestdata/x86-baseline-1.xml rename to tests/cputestdata/x86_64-baseline-1.xml diff --git a/tests/cputestdata/x86-baseline-2-result.xml b/tests/cputestdata/x86_64-baseline-2-result.xml similarity index 100% rename from tests/cputestdata/x86-baseline-2-result.xml rename to tests/cputestdata/x86_64-baseline-2-result.xml diff --git a/tests/cputestdata/x86-baseline-2.xml b/tests/cputestdata/x86_64-baseline-2.xml similarity index 100% rename from tests/cputestdata/x86-baseline-2.xml rename to tests/cputestdata/x86_64-baseline-2.xml diff --git a/tests/cputestdata/x86-baseline-3-expanded.xml b/tests/cputestdata/x86_64-baseline-3-expanded.xml similarity index 100% rename from tests/cputestdata/x86-baseline-3-expanded.xml rename to tests/cputestdata/x86_64-baseline-3-expanded.xml diff --git a/tests/cputestdata/x86-baseline-3-result.xml b/tests/cputestdata/x86_64-baseline-3-result.xml similarity index 100% rename from tests/cputestdata/x86-baseline-3-result.xml rename to tests/cputestdata/x86_64-baseline-3-result.xml diff --git a/tests/cputestdata/x86-baseline-3.xml b/tests/cputestdata/x86_64-baseline-3.xml similarity index 100% rename from tests/cputestdata/x86-baseline-3.xml rename to tests/cputestdata/x86_64-baseline-3.xml diff --git a/tests/cputestdata/x86-baseline-4-expanded.xml b/tests/cputestdata/x86_64-baseline-4-expanded.xml similarity index 100% rename from tests/cputestdata/x86-baseline-4-expanded.xml rename to tests/cputestdata/x86_64-baseline-4-expanded.xml diff --git a/tests/cputestdata/x86-baseline-4-result.xml b/tests/cputestdata/x86_64-baseline-4-result.xml similarity index 100% rename from tests/cputestdata/x86-baseline-4-result.xml rename to tests/cputestdata/x86_64-baseline-4-result.xml diff --git a/tests/cputestdata/x86-baseline-4.xml b/tests/cputestdata/x86_64-baseline-4.xml similarity index 100% rename from tests/cputestdata/x86-baseline-4.xml rename to tests/cputestdata/x86_64-baseline-4.xml diff --git a/tests/cputestdata/x86-baseline-5-expanded.xml b/tests/cputestdata/x86_64-baseline-5-expanded.xml similarity index 100% rename from tests/cputestdata/x86-baseline-5-expanded.xml rename to tests/cputestdata/x86_64-baseline-5-expanded.xml diff --git a/tests/cputestdata/x86-baseline-5-result.xml b/tests/cputestdata/x86_64-baseline-5-result.xml similarity index 100% rename from tests/cputestdata/x86-baseline-5-result.xml rename to tests/cputestdata/x86_64-baseline-5-result.xml diff --git a/tests/cputestdata/x86-baseline-5.xml b/tests/cputestdata/x86_64-baseline-5.xml similarity index 100% rename from tests/cputestdata/x86-baseline-5.xml rename to tests/cputestdata/x86_64-baseline-5.xml diff --git a/tests/cputestdata/x86-baseline-6-migratable.xml b/tests/cputestdata/x86_64-baseline-6-migratable.xml similarity index 100% rename from tests/cputestdata/x86-baseline-6-migratable.xml rename to tests/cputestdata/x86_64-baseline-6-migratable.xml diff --git a/tests/cputestdata/x86-baseline-6-result.xml b/tests/cputestdata/x86_64-baseline-6-result.xml similarity index 100% rename from tests/cputestdata/x86-baseline-6-result.xml rename to tests/cputestdata/x86_64-baseline-6-result.xml diff --git a/tests/cputestdata/x86-baseline-6.xml b/tests/cputestdata/x86_64-baseline-6.xml similarity index 100% rename from tests/cputestdata/x86-baseline-6.xml rename to tests/cputestdata/x86_64-baseline-6.xml diff --git a/tests/cputestdata/x86-baseline-7-result.xml b/tests/cputestdata/x86_64-baseline-7-result.xml similarity index 100% rename from tests/cputestdata/x86-baseline-7-result.xml rename to tests/cputestdata/x86_64-baseline-7-result.xml diff --git a/tests/cputestdata/x86-baseline-7.xml b/tests/cputestdata/x86_64-baseline-7.xml similarity index 100% rename from tests/cputestdata/x86-baseline-7.xml rename to tests/cputestdata/x86_64-baseline-7.xml diff --git a/tests/cputestdata/x86-baseline-8-result.xml b/tests/cputestdata/x86_64-baseline-8-result.xml similarity index 100% rename from tests/cputestdata/x86-baseline-8-result.xml rename to tests/cputestdata/x86_64-baseline-8-result.xml diff --git a/tests/cputestdata/x86-baseline-8.xml b/tests/cputestdata/x86_64-baseline-8.xml similarity index 100% rename from tests/cputestdata/x86-baseline-8.xml rename to tests/cputestdata/x86_64-baseline-8.xml diff --git a/tests/cputestdata/x86-baseline-incompatible-vendors.xml b/tests/cputestdata/x86_64-baseline-incompatible-vendors.xml similarity index 100% rename from tests/cputestdata/x86-baseline-incompatible-vendors.xml rename to tests/cputestdata/x86_64-baseline-incompatible-vendors.xml diff --git a/tests/cputestdata/x86-baseline-no-vendor-result.xml b/tests/cputestdata/x86_64-baseline-no-vendor-result.xml similarity index 100% rename from tests/cputestdata/x86-baseline-no-vendor-result.xml rename to tests/cputestdata/x86_64-baseline-no-vendor-result.xml diff --git a/tests/cputestdata/x86-baseline-no-vendor.xml b/tests/cputestdata/x86_64-baseline-no-vendor.xml similarity index 100% rename from tests/cputestdata/x86-baseline-no-vendor.xml rename to tests/cputestdata/x86_64-baseline-no-vendor.xml diff --git a/tests/cputestdata/x86-baseline-some-vendors-result.xml b/tests/cputestdata/x86_64-baseline-some-vendors-result.xml similarity index 100% rename from tests/cputestdata/x86-baseline-some-vendors-result.xml rename to tests/cputestdata/x86_64-baseline-some-vendors-result.xml diff --git a/tests/cputestdata/x86-baseline-some-vendors.xml b/tests/cputestdata/x86_64-baseline-some-vendors.xml similarity index 100% rename from tests/cputestdata/x86-baseline-some-vendors.xml rename to tests/cputestdata/x86_64-baseline-some-vendors.xml diff --git a/tests/cputestdata/x86-bogus-feature.xml b/tests/cputestdata/x86_64-bogus-feature.xml similarity index 100% rename from tests/cputestdata/x86-bogus-feature.xml rename to tests/cputestdata/x86_64-bogus-feature.xml diff --git a/tests/cputestdata/x86-bogus-model.xml b/tests/cputestdata/x86_64-bogus-model.xml similarity index 100% rename from tests/cputestdata/x86-bogus-model.xml rename to tests/cputestdata/x86_64-bogus-model.xml diff --git a/tests/cputestdata/x86-bogus-vendor.xml b/tests/cputestdata/x86_64-bogus-vendor.xml similarity index 100% rename from tests/cputestdata/x86-bogus-vendor.xml rename to tests/cputestdata/x86_64-bogus-vendor.xml diff --git a/tests/cputestdata/x86-cpuid-A10-5800K-guest.xml b/tests/cputestdata/x86_64-cpuid-A10-5800K-guest.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-A10-5800K-guest.xml rename to tests/cputestdata/x86_64-cpuid-A10-5800K-guest.xml diff --git a/tests/cputestdata/x86-cpuid-A10-5800K-host.xml b/tests/cputestdata/x86_64-cpuid-A10-5800K-host.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-A10-5800K-host.xml rename to tests/cputestdata/x86_64-cpuid-A10-5800K-host.xml diff --git a/tests/cputestdata/x86-cpuid-A10-5800K-json.xml b/tests/cputestdata/x86_64-cpuid-A10-5800K-json.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-A10-5800K-json.xml rename to tests/cputestdata/x86_64-cpuid-A10-5800K-json.xml diff --git a/tests/cputestdata/x86-cpuid-A10-5800K.json b/tests/cputestdata/x86_64-cpuid-A10-5800K.json similarity index 100% rename from tests/cputestdata/x86-cpuid-A10-5800K.json rename to tests/cputestdata/x86_64-cpuid-A10-5800K.json diff --git a/tests/cputestdata/x86-cpuid-A10-5800K.xml b/tests/cputestdata/x86_64-cpuid-A10-5800K.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-A10-5800K.xml rename to tests/cputestdata/x86_64-cpuid-A10-5800K.xml diff --git a/tests/cputestdata/x86-cpuid-Atom-D510-guest.xml b/tests/cputestdata/x86_64-cpuid-Atom-D510-guest.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Atom-D510-guest.xml rename to tests/cputestdata/x86_64-cpuid-Atom-D510-guest.xml diff --git a/tests/cputestdata/x86-cpuid-Atom-D510-host.xml b/tests/cputestdata/x86_64-cpuid-Atom-D510-host.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Atom-D510-host.xml rename to tests/cputestdata/x86_64-cpuid-Atom-D510-host.xml diff --git a/tests/cputestdata/x86-cpuid-Atom-D510.xml b/tests/cputestdata/x86_64-cpuid-Atom-D510.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Atom-D510.xml rename to tests/cputestdata/x86_64-cpuid-Atom-D510.xml diff --git a/tests/cputestdata/x86-cpuid-Atom-N450-guest.xml b/tests/cputestdata/x86_64-cpuid-Atom-N450-guest.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Atom-N450-guest.xml rename to tests/cputestdata/x86_64-cpuid-Atom-N450-guest.xml diff --git a/tests/cputestdata/x86-cpuid-Atom-N450-host.xml b/tests/cputestdata/x86_64-cpuid-Atom-N450-host.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Atom-N450-host.xml rename to tests/cputestdata/x86_64-cpuid-Atom-N450-host.xml diff --git a/tests/cputestdata/x86-cpuid-Atom-N450.xml b/tests/cputestdata/x86_64-cpuid-Atom-N450.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Atom-N450.xml rename to tests/cputestdata/x86_64-cpuid-Atom-N450.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i5-2500-guest.xml b/tests/cputestdata/x86_64-cpuid-Core-i5-2500-guest.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i5-2500-guest.xml rename to tests/cputestdata/x86_64-cpuid-Core-i5-2500-guest.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i5-2500-host.xml b/tests/cputestdata/x86_64-cpuid-Core-i5-2500-host.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i5-2500-host.xml rename to tests/cputestdata/x86_64-cpuid-Core-i5-2500-host.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i5-2500-json.xml b/tests/cputestdata/x86_64-cpuid-Core-i5-2500-json.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i5-2500-json.xml rename to tests/cputestdata/x86_64-cpuid-Core-i5-2500-json.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i5-2500.json b/tests/cputestdata/x86_64-cpuid-Core-i5-2500.json similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i5-2500.json rename to tests/cputestdata/x86_64-cpuid-Core-i5-2500.json diff --git a/tests/cputestdata/x86-cpuid-Core-i5-2500.xml b/tests/cputestdata/x86_64-cpuid-Core-i5-2500.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i5-2500.xml rename to tests/cputestdata/x86_64-cpuid-Core-i5-2500.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i5-2540M-guest.xml b/tests/cputestdata/x86_64-cpuid-Core-i5-2540M-guest.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i5-2540M-guest.xml rename to tests/cputestdata/x86_64-cpuid-Core-i5-2540M-guest.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i5-2540M-host.xml b/tests/cputestdata/x86_64-cpuid-Core-i5-2540M-host.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i5-2540M-host.xml rename to tests/cputestdata/x86_64-cpuid-Core-i5-2540M-host.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i5-2540M-json.xml b/tests/cputestdata/x86_64-cpuid-Core-i5-2540M-json.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i5-2540M-json.xml rename to tests/cputestdata/x86_64-cpuid-Core-i5-2540M-json.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i5-2540M.json b/tests/cputestdata/x86_64-cpuid-Core-i5-2540M.json similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i5-2540M.json rename to tests/cputestdata/x86_64-cpuid-Core-i5-2540M.json diff --git a/tests/cputestdata/x86-cpuid-Core-i5-2540M.xml b/tests/cputestdata/x86_64-cpuid-Core-i5-2540M.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i5-2540M.xml rename to tests/cputestdata/x86_64-cpuid-Core-i5-2540M.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i5-4670T-guest.xml b/tests/cputestdata/x86_64-cpuid-Core-i5-4670T-guest.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i5-4670T-guest.xml rename to tests/cputestdata/x86_64-cpuid-Core-i5-4670T-guest.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i5-4670T-host.xml b/tests/cputestdata/x86_64-cpuid-Core-i5-4670T-host.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i5-4670T-host.xml rename to tests/cputestdata/x86_64-cpuid-Core-i5-4670T-host.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i5-4670T-json.xml b/tests/cputestdata/x86_64-cpuid-Core-i5-4670T-json.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i5-4670T-json.xml rename to tests/cputestdata/x86_64-cpuid-Core-i5-4670T-json.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i5-4670T.json b/tests/cputestdata/x86_64-cpuid-Core-i5-4670T.json similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i5-4670T.json rename to tests/cputestdata/x86_64-cpuid-Core-i5-4670T.json diff --git a/tests/cputestdata/x86-cpuid-Core-i5-4670T.xml b/tests/cputestdata/x86_64-cpuid-Core-i5-4670T.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i5-4670T.xml rename to tests/cputestdata/x86_64-cpuid-Core-i5-4670T.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i5-6600-guest.xml b/tests/cputestdata/x86_64-cpuid-Core-i5-6600-guest.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i5-6600-guest.xml rename to tests/cputestdata/x86_64-cpuid-Core-i5-6600-guest.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i5-6600-host.xml b/tests/cputestdata/x86_64-cpuid-Core-i5-6600-host.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i5-6600-host.xml rename to tests/cputestdata/x86_64-cpuid-Core-i5-6600-host.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i5-6600-json.xml b/tests/cputestdata/x86_64-cpuid-Core-i5-6600-json.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i5-6600-json.xml rename to tests/cputestdata/x86_64-cpuid-Core-i5-6600-json.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i5-6600.json b/tests/cputestdata/x86_64-cpuid-Core-i5-6600.json similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i5-6600.json rename to tests/cputestdata/x86_64-cpuid-Core-i5-6600.json diff --git a/tests/cputestdata/x86-cpuid-Core-i5-6600.xml b/tests/cputestdata/x86_64-cpuid-Core-i5-6600.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i5-6600.xml rename to tests/cputestdata/x86_64-cpuid-Core-i5-6600.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i7-2600-guest.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-2600-guest.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i7-2600-guest.xml rename to tests/cputestdata/x86_64-cpuid-Core-i7-2600-guest.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i7-2600-host.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-2600-host.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i7-2600-host.xml rename to tests/cputestdata/x86_64-cpuid-Core-i7-2600-host.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i7-2600-json.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-2600-json.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i7-2600-json.xml rename to tests/cputestdata/x86_64-cpuid-Core-i7-2600-json.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i7-2600.json b/tests/cputestdata/x86_64-cpuid-Core-i7-2600.json similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i7-2600.json rename to tests/cputestdata/x86_64-cpuid-Core-i7-2600.json diff --git a/tests/cputestdata/x86-cpuid-Core-i7-2600.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-2600.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i7-2600.xml rename to tests/cputestdata/x86_64-cpuid-Core-i7-2600.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i7-3520M-guest.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-3520M-guest.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i7-3520M-guest.xml rename to tests/cputestdata/x86_64-cpuid-Core-i7-3520M-guest.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i7-3520M-host.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-3520M-host.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i7-3520M-host.xml rename to tests/cputestdata/x86_64-cpuid-Core-i7-3520M-host.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i7-3520M.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-3520M.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i7-3520M.xml rename to tests/cputestdata/x86_64-cpuid-Core-i7-3520M.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i7-3740QM-guest.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-3740QM-guest.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i7-3740QM-guest.xml rename to tests/cputestdata/x86_64-cpuid-Core-i7-3740QM-guest.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i7-3740QM-host.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-3740QM-host.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i7-3740QM-host.xml rename to tests/cputestdata/x86_64-cpuid-Core-i7-3740QM-host.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i7-3740QM-json.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-3740QM-json.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i7-3740QM-json.xml rename to tests/cputestdata/x86_64-cpuid-Core-i7-3740QM-json.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i7-3740QM.json b/tests/cputestdata/x86_64-cpuid-Core-i7-3740QM.json similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i7-3740QM.json rename to tests/cputestdata/x86_64-cpuid-Core-i7-3740QM.json diff --git a/tests/cputestdata/x86-cpuid-Core-i7-3740QM.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-3740QM.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i7-3740QM.xml rename to tests/cputestdata/x86_64-cpuid-Core-i7-3740QM.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i7-3770-guest.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-3770-guest.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i7-3770-guest.xml rename to tests/cputestdata/x86_64-cpuid-Core-i7-3770-guest.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i7-3770-host.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-3770-host.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i7-3770-host.xml rename to tests/cputestdata/x86_64-cpuid-Core-i7-3770-host.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i7-3770-json.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-3770-json.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i7-3770-json.xml rename to tests/cputestdata/x86_64-cpuid-Core-i7-3770-json.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i7-3770.json b/tests/cputestdata/x86_64-cpuid-Core-i7-3770.json similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i7-3770.json rename to tests/cputestdata/x86_64-cpuid-Core-i7-3770.json diff --git a/tests/cputestdata/x86-cpuid-Core-i7-3770.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-3770.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i7-3770.xml rename to tests/cputestdata/x86_64-cpuid-Core-i7-3770.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i7-4600U-guest.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-4600U-guest.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i7-4600U-guest.xml rename to tests/cputestdata/x86_64-cpuid-Core-i7-4600U-guest.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i7-4600U-host.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-4600U-host.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i7-4600U-host.xml rename to tests/cputestdata/x86_64-cpuid-Core-i7-4600U-host.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i7-4600U-json.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-4600U-json.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i7-4600U-json.xml rename to tests/cputestdata/x86_64-cpuid-Core-i7-4600U-json.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i7-4600U.json b/tests/cputestdata/x86_64-cpuid-Core-i7-4600U.json similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i7-4600U.json rename to tests/cputestdata/x86_64-cpuid-Core-i7-4600U.json diff --git a/tests/cputestdata/x86-cpuid-Core-i7-4600U.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-4600U.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i7-4600U.xml rename to tests/cputestdata/x86_64-cpuid-Core-i7-4600U.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i7-5600U-guest.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-guest.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i7-5600U-guest.xml rename to tests/cputestdata/x86_64-cpuid-Core-i7-5600U-guest.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i7-5600U-host.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-host.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i7-5600U-host.xml rename to tests/cputestdata/x86_64-cpuid-Core-i7-5600U-host.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i7-5600U-json.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-json.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i7-5600U-json.xml rename to tests/cputestdata/x86_64-cpuid-Core-i7-5600U-json.xml diff --git a/tests/cputestdata/x86-cpuid-Core-i7-5600U.json b/tests/cputestdata/x86_64-cpuid-Core-i7-5600U.json similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i7-5600U.json rename to tests/cputestdata/x86_64-cpuid-Core-i7-5600U.json diff --git a/tests/cputestdata/x86-cpuid-Core-i7-5600U.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-5600U.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core-i7-5600U.xml rename to tests/cputestdata/x86_64-cpuid-Core-i7-5600U.xml diff --git a/tests/cputestdata/x86-cpuid-Core2-E6850-guest.xml b/tests/cputestdata/x86_64-cpuid-Core2-E6850-guest.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core2-E6850-guest.xml rename to tests/cputestdata/x86_64-cpuid-Core2-E6850-guest.xml diff --git a/tests/cputestdata/x86-cpuid-Core2-E6850-host.xml b/tests/cputestdata/x86_64-cpuid-Core2-E6850-host.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core2-E6850-host.xml rename to tests/cputestdata/x86_64-cpuid-Core2-E6850-host.xml diff --git a/tests/cputestdata/x86-cpuid-Core2-E6850-json.xml b/tests/cputestdata/x86_64-cpuid-Core2-E6850-json.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core2-E6850-json.xml rename to tests/cputestdata/x86_64-cpuid-Core2-E6850-json.xml diff --git a/tests/cputestdata/x86-cpuid-Core2-E6850.json b/tests/cputestdata/x86_64-cpuid-Core2-E6850.json similarity index 100% rename from tests/cputestdata/x86-cpuid-Core2-E6850.json rename to tests/cputestdata/x86_64-cpuid-Core2-E6850.json diff --git a/tests/cputestdata/x86-cpuid-Core2-E6850.xml b/tests/cputestdata/x86_64-cpuid-Core2-E6850.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core2-E6850.xml rename to tests/cputestdata/x86_64-cpuid-Core2-E6850.xml diff --git a/tests/cputestdata/x86-cpuid-Core2-Q9500-guest.xml b/tests/cputestdata/x86_64-cpuid-Core2-Q9500-guest.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core2-Q9500-guest.xml rename to tests/cputestdata/x86_64-cpuid-Core2-Q9500-guest.xml diff --git a/tests/cputestdata/x86-cpuid-Core2-Q9500-host.xml b/tests/cputestdata/x86_64-cpuid-Core2-Q9500-host.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core2-Q9500-host.xml rename to tests/cputestdata/x86_64-cpuid-Core2-Q9500-host.xml diff --git a/tests/cputestdata/x86-cpuid-Core2-Q9500.xml b/tests/cputestdata/x86_64-cpuid-Core2-Q9500.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Core2-Q9500.xml rename to tests/cputestdata/x86_64-cpuid-Core2-Q9500.xml diff --git a/tests/cputestdata/x86-cpuid-FX-8150-guest.xml b/tests/cputestdata/x86_64-cpuid-FX-8150-guest.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-FX-8150-guest.xml rename to tests/cputestdata/x86_64-cpuid-FX-8150-guest.xml diff --git a/tests/cputestdata/x86-cpuid-FX-8150-host.xml b/tests/cputestdata/x86_64-cpuid-FX-8150-host.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-FX-8150-host.xml rename to tests/cputestdata/x86_64-cpuid-FX-8150-host.xml diff --git a/tests/cputestdata/x86-cpuid-FX-8150.xml b/tests/cputestdata/x86_64-cpuid-FX-8150.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-FX-8150.xml rename to tests/cputestdata/x86_64-cpuid-FX-8150.xml diff --git a/tests/cputestdata/x86-cpuid-Opteron-1352-guest.xml b/tests/cputestdata/x86_64-cpuid-Opteron-1352-guest.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Opteron-1352-guest.xml rename to tests/cputestdata/x86_64-cpuid-Opteron-1352-guest.xml diff --git a/tests/cputestdata/x86-cpuid-Opteron-1352-host.xml b/tests/cputestdata/x86_64-cpuid-Opteron-1352-host.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Opteron-1352-host.xml rename to tests/cputestdata/x86_64-cpuid-Opteron-1352-host.xml diff --git a/tests/cputestdata/x86-cpuid-Opteron-1352.xml b/tests/cputestdata/x86_64-cpuid-Opteron-1352.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Opteron-1352.xml rename to tests/cputestdata/x86_64-cpuid-Opteron-1352.xml diff --git a/tests/cputestdata/x86-cpuid-Opteron-2350-guest.xml b/tests/cputestdata/x86_64-cpuid-Opteron-2350-guest.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Opteron-2350-guest.xml rename to tests/cputestdata/x86_64-cpuid-Opteron-2350-guest.xml diff --git a/tests/cputestdata/x86-cpuid-Opteron-2350-host.xml b/tests/cputestdata/x86_64-cpuid-Opteron-2350-host.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Opteron-2350-host.xml rename to tests/cputestdata/x86_64-cpuid-Opteron-2350-host.xml diff --git a/tests/cputestdata/x86-cpuid-Opteron-2350-json.xml b/tests/cputestdata/x86_64-cpuid-Opteron-2350-json.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Opteron-2350-json.xml rename to tests/cputestdata/x86_64-cpuid-Opteron-2350-json.xml diff --git a/tests/cputestdata/x86-cpuid-Opteron-2350.json b/tests/cputestdata/x86_64-cpuid-Opteron-2350.json similarity index 100% rename from tests/cputestdata/x86-cpuid-Opteron-2350.json rename to tests/cputestdata/x86_64-cpuid-Opteron-2350.json diff --git a/tests/cputestdata/x86-cpuid-Opteron-2350.xml b/tests/cputestdata/x86_64-cpuid-Opteron-2350.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Opteron-2350.xml rename to tests/cputestdata/x86_64-cpuid-Opteron-2350.xml diff --git a/tests/cputestdata/x86-cpuid-Opteron-6234-guest.xml b/tests/cputestdata/x86_64-cpuid-Opteron-6234-guest.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Opteron-6234-guest.xml rename to tests/cputestdata/x86_64-cpuid-Opteron-6234-guest.xml diff --git a/tests/cputestdata/x86-cpuid-Opteron-6234-host.xml b/tests/cputestdata/x86_64-cpuid-Opteron-6234-host.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Opteron-6234-host.xml rename to tests/cputestdata/x86_64-cpuid-Opteron-6234-host.xml diff --git a/tests/cputestdata/x86-cpuid-Opteron-6234-json.xml b/tests/cputestdata/x86_64-cpuid-Opteron-6234-json.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Opteron-6234-json.xml rename to tests/cputestdata/x86_64-cpuid-Opteron-6234-json.xml diff --git a/tests/cputestdata/x86-cpuid-Opteron-6234.json b/tests/cputestdata/x86_64-cpuid-Opteron-6234.json similarity index 100% rename from tests/cputestdata/x86-cpuid-Opteron-6234.json rename to tests/cputestdata/x86_64-cpuid-Opteron-6234.json diff --git a/tests/cputestdata/x86-cpuid-Opteron-6234.xml b/tests/cputestdata/x86_64-cpuid-Opteron-6234.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Opteron-6234.xml rename to tests/cputestdata/x86_64-cpuid-Opteron-6234.xml diff --git a/tests/cputestdata/x86-cpuid-Opteron-6282-guest.xml b/tests/cputestdata/x86_64-cpuid-Opteron-6282-guest.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Opteron-6282-guest.xml rename to tests/cputestdata/x86_64-cpuid-Opteron-6282-guest.xml diff --git a/tests/cputestdata/x86-cpuid-Opteron-6282-host.xml b/tests/cputestdata/x86_64-cpuid-Opteron-6282-host.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Opteron-6282-host.xml rename to tests/cputestdata/x86_64-cpuid-Opteron-6282-host.xml diff --git a/tests/cputestdata/x86-cpuid-Opteron-6282.xml b/tests/cputestdata/x86_64-cpuid-Opteron-6282.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Opteron-6282.xml rename to tests/cputestdata/x86_64-cpuid-Opteron-6282.xml diff --git a/tests/cputestdata/x86-cpuid-Pentium-P6100-guest.xml b/tests/cputestdata/x86_64-cpuid-Pentium-P6100-guest.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Pentium-P6100-guest.xml rename to tests/cputestdata/x86_64-cpuid-Pentium-P6100-guest.xml diff --git a/tests/cputestdata/x86-cpuid-Pentium-P6100-host.xml b/tests/cputestdata/x86_64-cpuid-Pentium-P6100-host.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Pentium-P6100-host.xml rename to tests/cputestdata/x86_64-cpuid-Pentium-P6100-host.xml diff --git a/tests/cputestdata/x86-cpuid-Pentium-P6100.xml b/tests/cputestdata/x86_64-cpuid-Pentium-P6100.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Pentium-P6100.xml rename to tests/cputestdata/x86_64-cpuid-Pentium-P6100.xml diff --git a/tests/cputestdata/x86-cpuid-Phenom-B95-guest.xml b/tests/cputestdata/x86_64-cpuid-Phenom-B95-guest.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Phenom-B95-guest.xml rename to tests/cputestdata/x86_64-cpuid-Phenom-B95-guest.xml diff --git a/tests/cputestdata/x86-cpuid-Phenom-B95-host.xml b/tests/cputestdata/x86_64-cpuid-Phenom-B95-host.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Phenom-B95-host.xml rename to tests/cputestdata/x86_64-cpuid-Phenom-B95-host.xml diff --git a/tests/cputestdata/x86-cpuid-Phenom-B95-json.xml b/tests/cputestdata/x86_64-cpuid-Phenom-B95-json.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Phenom-B95-json.xml rename to tests/cputestdata/x86_64-cpuid-Phenom-B95-json.xml diff --git a/tests/cputestdata/x86-cpuid-Phenom-B95.json b/tests/cputestdata/x86_64-cpuid-Phenom-B95.json similarity index 100% rename from tests/cputestdata/x86-cpuid-Phenom-B95.json rename to tests/cputestdata/x86_64-cpuid-Phenom-B95.json diff --git a/tests/cputestdata/x86-cpuid-Phenom-B95.xml b/tests/cputestdata/x86_64-cpuid-Phenom-B95.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Phenom-B95.xml rename to tests/cputestdata/x86_64-cpuid-Phenom-B95.xml diff --git a/tests/cputestdata/x86-cpuid-Xeon-5110-guest.xml b/tests/cputestdata/x86_64-cpuid-Xeon-5110-guest.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Xeon-5110-guest.xml rename to tests/cputestdata/x86_64-cpuid-Xeon-5110-guest.xml diff --git a/tests/cputestdata/x86-cpuid-Xeon-5110-host.xml b/tests/cputestdata/x86_64-cpuid-Xeon-5110-host.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Xeon-5110-host.xml rename to tests/cputestdata/x86_64-cpuid-Xeon-5110-host.xml diff --git a/tests/cputestdata/x86-cpuid-Xeon-5110.xml b/tests/cputestdata/x86_64-cpuid-Xeon-5110.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Xeon-5110.xml rename to tests/cputestdata/x86_64-cpuid-Xeon-5110.xml diff --git a/tests/cputestdata/x86-cpuid-Xeon-E3-1245-guest.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1245-guest.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Xeon-E3-1245-guest.xml rename to tests/cputestdata/x86_64-cpuid-Xeon-E3-1245-guest.xml diff --git a/tests/cputestdata/x86-cpuid-Xeon-E3-1245-host.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1245-host.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Xeon-E3-1245-host.xml rename to tests/cputestdata/x86_64-cpuid-Xeon-E3-1245-host.xml diff --git a/tests/cputestdata/x86-cpuid-Xeon-E3-1245-json.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1245-json.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Xeon-E3-1245-json.xml rename to tests/cputestdata/x86_64-cpuid-Xeon-E3-1245-json.xml diff --git a/tests/cputestdata/x86-cpuid-Xeon-E3-1245.json b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1245.json similarity index 100% rename from tests/cputestdata/x86-cpuid-Xeon-E3-1245.json rename to tests/cputestdata/x86_64-cpuid-Xeon-E3-1245.json diff --git a/tests/cputestdata/x86-cpuid-Xeon-E3-1245.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1245.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Xeon-E3-1245.xml rename to tests/cputestdata/x86_64-cpuid-Xeon-E3-1245.xml diff --git a/tests/cputestdata/x86-cpuid-Xeon-E5-2630-guest.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2630-guest.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Xeon-E5-2630-guest.xml rename to tests/cputestdata/x86_64-cpuid-Xeon-E5-2630-guest.xml diff --git a/tests/cputestdata/x86-cpuid-Xeon-E5-2630-host.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2630-host.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Xeon-E5-2630-host.xml rename to tests/cputestdata/x86_64-cpuid-Xeon-E5-2630-host.xml diff --git a/tests/cputestdata/x86-cpuid-Xeon-E5-2630-json.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2630-json.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Xeon-E5-2630-json.xml rename to tests/cputestdata/x86_64-cpuid-Xeon-E5-2630-json.xml diff --git a/tests/cputestdata/x86-cpuid-Xeon-E5-2630.json b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2630.json similarity index 100% rename from tests/cputestdata/x86-cpuid-Xeon-E5-2630.json rename to tests/cputestdata/x86_64-cpuid-Xeon-E5-2630.json diff --git a/tests/cputestdata/x86-cpuid-Xeon-E5-2630.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2630.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Xeon-E5-2630.xml rename to tests/cputestdata/x86_64-cpuid-Xeon-E5-2630.xml diff --git a/tests/cputestdata/x86-cpuid-Xeon-E5-2650-guest.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2650-guest.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Xeon-E5-2650-guest.xml rename to tests/cputestdata/x86_64-cpuid-Xeon-E5-2650-guest.xml diff --git a/tests/cputestdata/x86-cpuid-Xeon-E5-2650-host.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2650-host.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Xeon-E5-2650-host.xml rename to tests/cputestdata/x86_64-cpuid-Xeon-E5-2650-host.xml diff --git a/tests/cputestdata/x86-cpuid-Xeon-E5-2650-json.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2650-json.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Xeon-E5-2650-json.xml rename to tests/cputestdata/x86_64-cpuid-Xeon-E5-2650-json.xml diff --git a/tests/cputestdata/x86-cpuid-Xeon-E5-2650.json b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2650.json similarity index 100% rename from tests/cputestdata/x86-cpuid-Xeon-E5-2650.json rename to tests/cputestdata/x86_64-cpuid-Xeon-E5-2650.json diff --git a/tests/cputestdata/x86-cpuid-Xeon-E5-2650.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2650.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Xeon-E5-2650.xml rename to tests/cputestdata/x86_64-cpuid-Xeon-E5-2650.xml diff --git a/tests/cputestdata/x86-cpuid-Xeon-E7-4820-guest.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E7-4820-guest.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Xeon-E7-4820-guest.xml rename to tests/cputestdata/x86_64-cpuid-Xeon-E7-4820-guest.xml diff --git a/tests/cputestdata/x86-cpuid-Xeon-E7-4820-host.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E7-4820-host.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Xeon-E7-4820-host.xml rename to tests/cputestdata/x86_64-cpuid-Xeon-E7-4820-host.xml diff --git a/tests/cputestdata/x86-cpuid-Xeon-E7-4820-json.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E7-4820-json.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Xeon-E7-4820-json.xml rename to tests/cputestdata/x86_64-cpuid-Xeon-E7-4820-json.xml diff --git a/tests/cputestdata/x86-cpuid-Xeon-E7-4820.json b/tests/cputestdata/x86_64-cpuid-Xeon-E7-4820.json similarity index 100% rename from tests/cputestdata/x86-cpuid-Xeon-E7-4820.json rename to tests/cputestdata/x86_64-cpuid-Xeon-E7-4820.json diff --git a/tests/cputestdata/x86-cpuid-Xeon-E7-4820.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E7-4820.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Xeon-E7-4820.xml rename to tests/cputestdata/x86_64-cpuid-Xeon-E7-4820.xml diff --git a/tests/cputestdata/x86-cpuid-Xeon-W3520-guest.xml b/tests/cputestdata/x86_64-cpuid-Xeon-W3520-guest.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Xeon-W3520-guest.xml rename to tests/cputestdata/x86_64-cpuid-Xeon-W3520-guest.xml diff --git a/tests/cputestdata/x86-cpuid-Xeon-W3520-host.xml b/tests/cputestdata/x86_64-cpuid-Xeon-W3520-host.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Xeon-W3520-host.xml rename to tests/cputestdata/x86_64-cpuid-Xeon-W3520-host.xml diff --git a/tests/cputestdata/x86-cpuid-Xeon-W3520-json.xml b/tests/cputestdata/x86_64-cpuid-Xeon-W3520-json.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Xeon-W3520-json.xml rename to tests/cputestdata/x86_64-cpuid-Xeon-W3520-json.xml diff --git a/tests/cputestdata/x86-cpuid-Xeon-W3520.json b/tests/cputestdata/x86_64-cpuid-Xeon-W3520.json similarity index 100% rename from tests/cputestdata/x86-cpuid-Xeon-W3520.json rename to tests/cputestdata/x86_64-cpuid-Xeon-W3520.json diff --git a/tests/cputestdata/x86-cpuid-Xeon-W3520.xml b/tests/cputestdata/x86_64-cpuid-Xeon-W3520.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Xeon-W3520.xml rename to tests/cputestdata/x86_64-cpuid-Xeon-W3520.xml diff --git a/tests/cputestdata/x86-cpuid-Xeon-X5460-guest.xml b/tests/cputestdata/x86_64-cpuid-Xeon-X5460-guest.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Xeon-X5460-guest.xml rename to tests/cputestdata/x86_64-cpuid-Xeon-X5460-guest.xml diff --git a/tests/cputestdata/x86-cpuid-Xeon-X5460-host.xml b/tests/cputestdata/x86_64-cpuid-Xeon-X5460-host.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Xeon-X5460-host.xml rename to tests/cputestdata/x86_64-cpuid-Xeon-X5460-host.xml diff --git a/tests/cputestdata/x86-cpuid-Xeon-X5460.xml b/tests/cputestdata/x86_64-cpuid-Xeon-X5460.xml similarity index 100% rename from tests/cputestdata/x86-cpuid-Xeon-X5460.xml rename to tests/cputestdata/x86_64-cpuid-Xeon-X5460.xml diff --git a/tests/cputestdata/x86-exact-disable-extra.xml b/tests/cputestdata/x86_64-exact-disable-extra.xml similarity index 100% rename from tests/cputestdata/x86-exact-disable-extra.xml rename to tests/cputestdata/x86_64-exact-disable-extra.xml diff --git a/tests/cputestdata/x86-exact-disable.xml b/tests/cputestdata/x86_64-exact-disable.xml similarity index 100% rename from tests/cputestdata/x86-exact-disable.xml rename to tests/cputestdata/x86_64-exact-disable.xml diff --git a/tests/cputestdata/x86-exact-disable2.xml b/tests/cputestdata/x86_64-exact-disable2.xml similarity index 100% rename from tests/cputestdata/x86-exact-disable2.xml rename to tests/cputestdata/x86_64-exact-disable2.xml diff --git a/tests/cputestdata/x86-exact-forbid-extra.xml b/tests/cputestdata/x86_64-exact-forbid-extra.xml similarity index 100% rename from tests/cputestdata/x86-exact-forbid-extra.xml rename to tests/cputestdata/x86_64-exact-forbid-extra.xml diff --git a/tests/cputestdata/x86-exact-forbid.xml b/tests/cputestdata/x86_64-exact-forbid.xml similarity index 100% rename from tests/cputestdata/x86-exact-forbid.xml rename to tests/cputestdata/x86_64-exact-forbid.xml diff --git a/tests/cputestdata/x86-exact-force-Haswell.xml b/tests/cputestdata/x86_64-exact-force-Haswell.xml similarity index 100% rename from tests/cputestdata/x86-exact-force-Haswell.xml rename to tests/cputestdata/x86_64-exact-force-Haswell.xml diff --git a/tests/cputestdata/x86-exact-force.xml b/tests/cputestdata/x86_64-exact-force.xml similarity index 100% rename from tests/cputestdata/x86-exact-force.xml rename to tests/cputestdata/x86_64-exact-force.xml diff --git a/tests/cputestdata/x86-exact-require-extra.xml b/tests/cputestdata/x86_64-exact-require-extra.xml similarity index 100% rename from tests/cputestdata/x86-exact-require-extra.xml rename to tests/cputestdata/x86_64-exact-require-extra.xml diff --git a/tests/cputestdata/x86-exact-require.xml b/tests/cputestdata/x86_64-exact-require.xml similarity index 100% rename from tests/cputestdata/x86-exact-require.xml rename to tests/cputestdata/x86_64-exact-require.xml diff --git a/tests/cputestdata/x86-exact.xml b/tests/cputestdata/x86_64-exact.xml similarity index 100% rename from tests/cputestdata/x86-exact.xml rename to tests/cputestdata/x86_64-exact.xml diff --git a/tests/cputestdata/x86-guest-nofallback.xml b/tests/cputestdata/x86_64-guest-nofallback.xml similarity index 100% rename from tests/cputestdata/x86-guest-nofallback.xml rename to tests/cputestdata/x86_64-guest-nofallback.xml diff --git a/tests/cputestdata/x86-guest.xml b/tests/cputestdata/x86_64-guest.xml similarity index 100% rename from tests/cputestdata/x86-guest.xml rename to tests/cputestdata/x86_64-guest.xml diff --git a/tests/cputestdata/x86-host+guest,model486-result.xml b/tests/cputestdata/x86_64-host+guest,model486-result.xml similarity index 100% rename from tests/cputestdata/x86-host+guest,model486-result.xml rename to tests/cputestdata/x86_64-host+guest,model486-result.xml diff --git a/tests/cputestdata/x86-host+guest,models-result.xml b/tests/cputestdata/x86_64-host+guest,models-result.xml similarity index 100% rename from tests/cputestdata/x86-host+guest,models-result.xml rename to tests/cputestdata/x86_64-host+guest,models-result.xml diff --git a/tests/cputestdata/x86-host+guest-result.xml b/tests/cputestdata/x86_64-host+guest-result.xml similarity index 100% rename from tests/cputestdata/x86-host+guest-result.xml rename to tests/cputestdata/x86_64-host+guest-result.xml diff --git a/tests/cputestdata/x86-host+guest.xml b/tests/cputestdata/x86_64-host+guest.xml similarity index 100% rename from tests/cputestdata/x86-host+guest.xml rename to tests/cputestdata/x86_64-host+guest.xml diff --git a/tests/cputestdata/x86-host+host+host-model,models-result.xml b/tests/cputestdata/x86_64-host+host+host-model,models-result.xml similarity index 100% rename from tests/cputestdata/x86-host+host+host-model,models-result.xml rename to tests/cputestdata/x86_64-host+host+host-model,models-result.xml diff --git a/tests/cputestdata/x86-host+host-model-nofallback.xml b/tests/cputestdata/x86_64-host+host-model-nofallback.xml similarity index 100% rename from tests/cputestdata/x86-host+host-model-nofallback.xml rename to tests/cputestdata/x86_64-host+host-model-nofallback.xml diff --git a/tests/cputestdata/x86-host+host-model.xml b/tests/cputestdata/x86_64-host+host-model.xml similarity index 100% rename from tests/cputestdata/x86-host+host-model.xml rename to tests/cputestdata/x86_64-host+host-model.xml diff --git a/tests/cputestdata/x86-host+host-passthrough-features.xml b/tests/cputestdata/x86_64-host+host-passthrough-features.xml similarity index 100% rename from tests/cputestdata/x86-host+host-passthrough-features.xml rename to tests/cputestdata/x86_64-host+host-passthrough-features.xml diff --git a/tests/cputestdata/x86-host+host-passthrough.xml b/tests/cputestdata/x86_64-host+host-passthrough.xml similarity index 100% rename from tests/cputestdata/x86-host+host-passthrough.xml rename to tests/cputestdata/x86_64-host+host-passthrough.xml diff --git a/tests/cputestdata/x86-host+min.xml b/tests/cputestdata/x86_64-host+min.xml similarity index 100% rename from tests/cputestdata/x86-host+min.xml rename to tests/cputestdata/x86_64-host+min.xml diff --git a/tests/cputestdata/x86-host+penryn-force-result.xml b/tests/cputestdata/x86_64-host+penryn-force-result.xml similarity index 100% rename from tests/cputestdata/x86-host+penryn-force-result.xml rename to tests/cputestdata/x86_64-host+penryn-force-result.xml diff --git a/tests/cputestdata/x86-host+pentium3.xml b/tests/cputestdata/x86_64-host+pentium3.xml similarity index 100% rename from tests/cputestdata/x86-host+pentium3.xml rename to tests/cputestdata/x86_64-host+pentium3.xml diff --git a/tests/cputestdata/x86-host+strict-force-extra-result.xml b/tests/cputestdata/x86_64-host+strict-force-extra-result.xml similarity index 100% rename from tests/cputestdata/x86-host+strict-force-extra-result.xml rename to tests/cputestdata/x86_64-host+strict-force-extra-result.xml diff --git a/tests/cputestdata/x86-host-Haswell-noTSX+Haswell,haswell-result.xml b/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell,haswell-result.xml similarity index 100% rename from tests/cputestdata/x86-host-Haswell-noTSX+Haswell,haswell-result.xml rename to tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell,haswell-result.xml diff --git a/tests/cputestdata/x86-host-Haswell-noTSX+Haswell-noTSX,haswell-result.xml b/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell-noTSX,haswell-result.xml similarity index 100% rename from tests/cputestdata/x86-host-Haswell-noTSX+Haswell-noTSX,haswell-result.xml rename to tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell-noTSX,haswell-result.xml diff --git a/tests/cputestdata/x86-host-Haswell-noTSX+Haswell-noTSX-result.xml b/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell-noTSX-result.xml similarity index 100% rename from tests/cputestdata/x86-host-Haswell-noTSX+Haswell-noTSX-result.xml rename to tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell-noTSX-result.xml diff --git a/tests/cputestdata/x86-host-Haswell-noTSX.xml b/tests/cputestdata/x86_64-host-Haswell-noTSX.xml similarity index 100% rename from tests/cputestdata/x86-host-Haswell-noTSX.xml rename to tests/cputestdata/x86_64-host-Haswell-noTSX.xml diff --git a/tests/cputestdata/x86-host-SandyBridge.xml b/tests/cputestdata/x86_64-host-SandyBridge.xml similarity index 100% rename from tests/cputestdata/x86-host-SandyBridge.xml rename to tests/cputestdata/x86_64-host-SandyBridge.xml diff --git a/tests/cputestdata/x86-host-amd-fake.xml b/tests/cputestdata/x86_64-host-amd-fake.xml similarity index 100% rename from tests/cputestdata/x86-host-amd-fake.xml rename to tests/cputestdata/x86_64-host-amd-fake.xml diff --git a/tests/cputestdata/x86-host-amd.xml b/tests/cputestdata/x86_64-host-amd.xml similarity index 100% rename from tests/cputestdata/x86-host-amd.xml rename to tests/cputestdata/x86_64-host-amd.xml diff --git a/tests/cputestdata/x86-host-better+pentium3-result.xml b/tests/cputestdata/x86_64-host-better+pentium3-result.xml similarity index 100% rename from tests/cputestdata/x86-host-better+pentium3-result.xml rename to tests/cputestdata/x86_64-host-better+pentium3-result.xml diff --git a/tests/cputestdata/x86-host-better.xml b/tests/cputestdata/x86_64-host-better.xml similarity index 100% rename from tests/cputestdata/x86-host-better.xml rename to tests/cputestdata/x86_64-host-better.xml diff --git a/tests/cputestdata/x86-host-incomp-arch.xml b/tests/cputestdata/x86_64-host-incomp-arch.xml similarity index 100% rename from tests/cputestdata/x86-host-incomp-arch.xml rename to tests/cputestdata/x86_64-host-incomp-arch.xml diff --git a/tests/cputestdata/x86-host-invtsc+host-model.xml b/tests/cputestdata/x86_64-host-invtsc+host-model.xml similarity index 100% rename from tests/cputestdata/x86-host-invtsc+host-model.xml rename to tests/cputestdata/x86_64-host-invtsc+host-model.xml diff --git a/tests/cputestdata/x86-host-invtsc.xml b/tests/cputestdata/x86_64-host-invtsc.xml similarity index 100% rename from tests/cputestdata/x86-host-invtsc.xml rename to tests/cputestdata/x86_64-host-invtsc.xml diff --git a/tests/cputestdata/x86-host-model-nofallback.xml b/tests/cputestdata/x86_64-host-model-nofallback.xml similarity index 100% rename from tests/cputestdata/x86-host-model-nofallback.xml rename to tests/cputestdata/x86_64-host-model-nofallback.xml diff --git a/tests/cputestdata/x86-host-model.xml b/tests/cputestdata/x86_64-host-model.xml similarity index 100% rename from tests/cputestdata/x86-host-model.xml rename to tests/cputestdata/x86_64-host-model.xml diff --git a/tests/cputestdata/x86-host-no-vendor.xml b/tests/cputestdata/x86_64-host-no-vendor.xml similarity index 100% rename from tests/cputestdata/x86-host-no-vendor.xml rename to tests/cputestdata/x86_64-host-no-vendor.xml diff --git a/tests/cputestdata/x86-host-passthrough-features.xml b/tests/cputestdata/x86_64-host-passthrough-features.xml similarity index 100% rename from tests/cputestdata/x86-host-passthrough-features.xml rename to tests/cputestdata/x86_64-host-passthrough-features.xml diff --git a/tests/cputestdata/x86-host-passthrough.xml b/tests/cputestdata/x86_64-host-passthrough.xml similarity index 100% rename from tests/cputestdata/x86-host-passthrough.xml rename to tests/cputestdata/x86_64-host-passthrough.xml diff --git a/tests/cputestdata/x86-host-worse+guest-result.xml b/tests/cputestdata/x86_64-host-worse+guest-result.xml similarity index 100% rename from tests/cputestdata/x86-host-worse+guest-result.xml rename to tests/cputestdata/x86_64-host-worse+guest-result.xml diff --git a/tests/cputestdata/x86-host-worse.xml b/tests/cputestdata/x86_64-host-worse.xml similarity index 100% rename from tests/cputestdata/x86-host-worse.xml rename to tests/cputestdata/x86_64-host-worse.xml diff --git a/tests/cputestdata/x86-host.xml b/tests/cputestdata/x86_64-host.xml similarity index 100% rename from tests/cputestdata/x86-host.xml rename to tests/cputestdata/x86_64-host.xml diff --git a/tests/cputestdata/x86-min.xml b/tests/cputestdata/x86_64-min.xml similarity index 100% rename from tests/cputestdata/x86-min.xml rename to tests/cputestdata/x86_64-min.xml diff --git a/tests/cputestdata/x86-penryn-force.xml b/tests/cputestdata/x86_64-penryn-force.xml similarity index 100% rename from tests/cputestdata/x86-penryn-force.xml rename to tests/cputestdata/x86_64-penryn-force.xml diff --git a/tests/cputestdata/x86-pentium3-amd.xml b/tests/cputestdata/x86_64-pentium3-amd.xml similarity index 100% rename from tests/cputestdata/x86-pentium3-amd.xml rename to tests/cputestdata/x86_64-pentium3-amd.xml diff --git a/tests/cputestdata/x86-pentium3.xml b/tests/cputestdata/x86_64-pentium3.xml similarity index 100% rename from tests/cputestdata/x86-pentium3.xml rename to tests/cputestdata/x86_64-pentium3.xml diff --git a/tests/cputestdata/x86-strict-disable.xml b/tests/cputestdata/x86_64-strict-disable.xml similarity index 100% rename from tests/cputestdata/x86-strict-disable.xml rename to tests/cputestdata/x86_64-strict-disable.xml diff --git a/tests/cputestdata/x86-strict-force-extra.xml b/tests/cputestdata/x86_64-strict-force-extra.xml similarity index 100% rename from tests/cputestdata/x86-strict-force-extra.xml rename to tests/cputestdata/x86_64-strict-force-extra.xml diff --git a/tests/cputestdata/x86-strict-full.xml b/tests/cputestdata/x86_64-strict-full.xml similarity index 100% rename from tests/cputestdata/x86-strict-full.xml rename to tests/cputestdata/x86_64-strict-full.xml diff --git a/tests/cputestdata/x86-strict.xml b/tests/cputestdata/x86_64-strict.xml similarity index 100% rename from tests/cputestdata/x86-strict.xml rename to tests/cputestdata/x86_64-strict.xml -- 2.11.1

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - no change tests/cputest.c | 294 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 148 insertions(+), 146 deletions(-) diff --git a/tests/cputest.c b/tests/cputest.c index 406b40dfe..c0a816b60 100644 --- a/tests/cputest.c +++ b/tests/cputest.c @@ -56,7 +56,7 @@ enum cpuTestBoolWithError { struct data { - const char *arch; + virArch arch; const char *host; const char *name; const char **models; @@ -72,14 +72,15 @@ static virQEMUDriver driver; static virCPUDefPtr -cpuTestLoadXML(const char *arch, const char *name) +cpuTestLoadXML(virArch arch, const char *name) { char *xml = NULL; xmlDocPtr doc = NULL; xmlXPathContextPtr ctxt = NULL; virCPUDefPtr cpu = NULL; - if (virAsprintf(&xml, "%s/cputestdata/%s-%s.xml", abs_srcdir, arch, name) < 0) + if (virAsprintf(&xml, "%s/cputestdata/%s-%s.xml", + abs_srcdir, virArchToString(arch), name) < 0) goto cleanup; if (!(doc = virXMLParseFileCtxt(xml, &ctxt))) @@ -96,7 +97,7 @@ cpuTestLoadXML(const char *arch, const char *name) static virCPUDefPtr * -cpuTestLoadMultiXML(const char *arch, +cpuTestLoadMultiXML(virArch arch, const char *name, unsigned int *count) { @@ -108,7 +109,8 @@ cpuTestLoadMultiXML(const char *arch, int n; size_t i; - if (virAsprintf(&xml, "%s/cputestdata/%s-%s.xml", abs_srcdir, arch, name) < 0) + if (virAsprintf(&xml, "%s/cputestdata/%s-%s.xml", + abs_srcdir, virArchToString(arch), name) < 0) goto cleanup; if (!(doc = virXMLParseFileCtxt(xml, &ctxt))) @@ -145,7 +147,7 @@ cpuTestLoadMultiXML(const char *arch, static int -cpuTestCompareXML(const char *arch, +cpuTestCompareXML(virArch arch, virCPUDef *cpu, const char *name, bool updateCPU) @@ -155,7 +157,7 @@ cpuTestCompareXML(const char *arch, int ret = -1; if (virAsprintf(&xml, "%s/cputestdata/%s-%s.xml", - abs_srcdir, arch, name) < 0) + abs_srcdir, virArchToString(arch), name) < 0) goto cleanup; if (!(actual = virCPUDefFormat(cpu, NULL, updateCPU))) @@ -457,7 +459,7 @@ cpuTestCPUID(bool guest, const void *arg) char *result = NULL; if (virAsprintf(&hostFile, "%s/cputestdata/%s-cpuid-%s.xml", - abs_srcdir, data->arch, data->host) < 0) + abs_srcdir, virArchToString(data->arch), data->host) < 0) goto cleanup; if (virTestLoadFile(hostFile, &host) < 0 || @@ -523,7 +525,7 @@ cpuTestJSONCPUID(const void *arg) int ret = -1; if (virAsprintf(&json, "%s/cputestdata/%s-cpuid-%s.json", - abs_srcdir, data->arch, data->host) < 0 || + abs_srcdir, virArchToString(data->arch), data->host) < 0 || virAsprintf(&result, "cpuid-%s-json", data->host) < 0) goto cleanup; @@ -591,7 +593,7 @@ mymain(void) VIR_FREE(tmp); \ \ if (virAsprintf(&testLabel, "%s(%s): %s", \ - #api, arch, name) < 0) { \ + #api, virArchToString(arch), name) < 0) { \ ret = -1; \ break; \ } \ @@ -677,159 +679,159 @@ mymain(void) } while (0) /* host to host comparison */ - DO_TEST_COMPARE("x86_64", "host", "host", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_COMPARE("x86_64", "host", "host-better", VIR_CPU_COMPARE_INCOMPATIBLE); - DO_TEST_COMPARE("x86_64", "host", "host-worse", VIR_CPU_COMPARE_SUPERSET); - DO_TEST_COMPARE("x86_64", "host", "host-amd-fake", VIR_CPU_COMPARE_INCOMPATIBLE); - DO_TEST_COMPARE("x86_64", "host", "host-incomp-arch", VIR_CPU_COMPARE_INCOMPATIBLE); - DO_TEST_COMPARE("x86_64", "host", "host-no-vendor", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_COMPARE("x86_64", "host-no-vendor", "host", VIR_CPU_COMPARE_INCOMPATIBLE); + DO_TEST_COMPARE(VIR_ARCH_X86_64, "host", "host", VIR_CPU_COMPARE_IDENTICAL); + DO_TEST_COMPARE(VIR_ARCH_X86_64, "host", "host-better", VIR_CPU_COMPARE_INCOMPATIBLE); + DO_TEST_COMPARE(VIR_ARCH_X86_64, "host", "host-worse", VIR_CPU_COMPARE_SUPERSET); + DO_TEST_COMPARE(VIR_ARCH_X86_64, "host", "host-amd-fake", VIR_CPU_COMPARE_INCOMPATIBLE); + DO_TEST_COMPARE(VIR_ARCH_X86_64, "host", "host-incomp-arch", VIR_CPU_COMPARE_INCOMPATIBLE); + DO_TEST_COMPARE(VIR_ARCH_X86_64, "host", "host-no-vendor", VIR_CPU_COMPARE_IDENTICAL); + DO_TEST_COMPARE(VIR_ARCH_X86_64, "host-no-vendor", "host", VIR_CPU_COMPARE_INCOMPATIBLE); - DO_TEST_COMPARE("ppc64", "host", "host", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_COMPARE("ppc64", "host", "host-better", VIR_CPU_COMPARE_INCOMPATIBLE); - DO_TEST_COMPARE("ppc64", "host", "host-worse", VIR_CPU_COMPARE_INCOMPATIBLE); - DO_TEST_COMPARE("ppc64", "host", "host-incomp-arch", VIR_CPU_COMPARE_INCOMPATIBLE); - DO_TEST_COMPARE("ppc64", "host", "host-no-vendor", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_COMPARE("ppc64", "host-no-vendor", "host", VIR_CPU_COMPARE_INCOMPATIBLE); + DO_TEST_COMPARE(VIR_ARCH_PPC64, "host", "host", VIR_CPU_COMPARE_IDENTICAL); + DO_TEST_COMPARE(VIR_ARCH_PPC64, "host", "host-better", VIR_CPU_COMPARE_INCOMPATIBLE); + DO_TEST_COMPARE(VIR_ARCH_PPC64, "host", "host-worse", VIR_CPU_COMPARE_INCOMPATIBLE); + DO_TEST_COMPARE(VIR_ARCH_PPC64, "host", "host-incomp-arch", VIR_CPU_COMPARE_INCOMPATIBLE); + DO_TEST_COMPARE(VIR_ARCH_PPC64, "host", "host-no-vendor", VIR_CPU_COMPARE_IDENTICAL); + DO_TEST_COMPARE(VIR_ARCH_PPC64, "host-no-vendor", "host", VIR_CPU_COMPARE_INCOMPATIBLE); /* guest to host comparison */ - DO_TEST_COMPARE("x86_64", "host", "bogus-model", VIR_CPU_COMPARE_ERROR); - DO_TEST_COMPARE("x86_64", "host", "bogus-feature", VIR_CPU_COMPARE_ERROR); - DO_TEST_COMPARE("x86_64", "host", "min", VIR_CPU_COMPARE_SUPERSET); - DO_TEST_COMPARE("x86_64", "host", "pentium3", VIR_CPU_COMPARE_SUPERSET); - DO_TEST_COMPARE("x86_64", "host", "exact", VIR_CPU_COMPARE_SUPERSET); - DO_TEST_COMPARE("x86_64", "host", "exact-forbid", VIR_CPU_COMPARE_INCOMPATIBLE); - DO_TEST_COMPARE("x86_64", "host", "exact-forbid-extra", VIR_CPU_COMPARE_SUPERSET); - DO_TEST_COMPARE("x86_64", "host", "exact-disable", VIR_CPU_COMPARE_SUPERSET); - DO_TEST_COMPARE("x86_64", "host", "exact-disable2", VIR_CPU_COMPARE_SUPERSET); - DO_TEST_COMPARE("x86_64", "host", "exact-disable-extra", VIR_CPU_COMPARE_SUPERSET); - DO_TEST_COMPARE("x86_64", "host", "exact-require", VIR_CPU_COMPARE_SUPERSET); - DO_TEST_COMPARE("x86_64", "host", "exact-require-extra", VIR_CPU_COMPARE_INCOMPATIBLE); - DO_TEST_COMPARE("x86_64", "host", "exact-force", VIR_CPU_COMPARE_SUPERSET); - DO_TEST_COMPARE("x86_64", "host", "strict", VIR_CPU_COMPARE_INCOMPATIBLE); - DO_TEST_COMPARE("x86_64", "host", "strict-full", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_COMPARE("x86_64", "host", "strict-disable", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_COMPARE("x86_64", "host", "strict-force-extra", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_COMPARE("x86_64", "host", "guest", VIR_CPU_COMPARE_SUPERSET); - DO_TEST_COMPARE("x86_64", "host", "pentium3-amd", VIR_CPU_COMPARE_INCOMPATIBLE); - DO_TEST_COMPARE("x86_64", "host-amd", "pentium3-amd", VIR_CPU_COMPARE_SUPERSET); - DO_TEST_COMPARE("x86_64", "host-worse", "penryn-force", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_COMPARE("x86_64", "host-SandyBridge", "exact-force-Haswell", VIR_CPU_COMPARE_IDENTICAL); + DO_TEST_COMPARE(VIR_ARCH_X86_64, "host", "bogus-model", VIR_CPU_COMPARE_ERROR); + DO_TEST_COMPARE(VIR_ARCH_X86_64, "host", "bogus-feature", VIR_CPU_COMPARE_ERROR); + DO_TEST_COMPARE(VIR_ARCH_X86_64, "host", "min", VIR_CPU_COMPARE_SUPERSET); + DO_TEST_COMPARE(VIR_ARCH_X86_64, "host", "pentium3", VIR_CPU_COMPARE_SUPERSET); + DO_TEST_COMPARE(VIR_ARCH_X86_64, "host", "exact", VIR_CPU_COMPARE_SUPERSET); + DO_TEST_COMPARE(VIR_ARCH_X86_64, "host", "exact-forbid", VIR_CPU_COMPARE_INCOMPATIBLE); + DO_TEST_COMPARE(VIR_ARCH_X86_64, "host", "exact-forbid-extra", VIR_CPU_COMPARE_SUPERSET); + DO_TEST_COMPARE(VIR_ARCH_X86_64, "host", "exact-disable", VIR_CPU_COMPARE_SUPERSET); + DO_TEST_COMPARE(VIR_ARCH_X86_64, "host", "exact-disable2", VIR_CPU_COMPARE_SUPERSET); + DO_TEST_COMPARE(VIR_ARCH_X86_64, "host", "exact-disable-extra", VIR_CPU_COMPARE_SUPERSET); + DO_TEST_COMPARE(VIR_ARCH_X86_64, "host", "exact-require", VIR_CPU_COMPARE_SUPERSET); + DO_TEST_COMPARE(VIR_ARCH_X86_64, "host", "exact-require-extra", VIR_CPU_COMPARE_INCOMPATIBLE); + DO_TEST_COMPARE(VIR_ARCH_X86_64, "host", "exact-force", VIR_CPU_COMPARE_SUPERSET); + DO_TEST_COMPARE(VIR_ARCH_X86_64, "host", "strict", VIR_CPU_COMPARE_INCOMPATIBLE); + DO_TEST_COMPARE(VIR_ARCH_X86_64, "host", "strict-full", VIR_CPU_COMPARE_IDENTICAL); + DO_TEST_COMPARE(VIR_ARCH_X86_64, "host", "strict-disable", VIR_CPU_COMPARE_IDENTICAL); + DO_TEST_COMPARE(VIR_ARCH_X86_64, "host", "strict-force-extra", VIR_CPU_COMPARE_IDENTICAL); + DO_TEST_COMPARE(VIR_ARCH_X86_64, "host", "guest", VIR_CPU_COMPARE_SUPERSET); + DO_TEST_COMPARE(VIR_ARCH_X86_64, "host", "pentium3-amd", VIR_CPU_COMPARE_INCOMPATIBLE); + DO_TEST_COMPARE(VIR_ARCH_X86_64, "host-amd", "pentium3-amd", VIR_CPU_COMPARE_SUPERSET); + DO_TEST_COMPARE(VIR_ARCH_X86_64, "host-worse", "penryn-force", VIR_CPU_COMPARE_IDENTICAL); + DO_TEST_COMPARE(VIR_ARCH_X86_64, "host-SandyBridge", "exact-force-Haswell", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_COMPARE("ppc64", "host", "guest-strict", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_COMPARE("ppc64", "host", "guest-exact", VIR_CPU_COMPARE_INCOMPATIBLE); - DO_TEST_COMPARE("ppc64", "host", "guest-legacy", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_COMPARE("ppc64", "host", "guest-legacy-incompatible", VIR_CPU_COMPARE_INCOMPATIBLE); - DO_TEST_COMPARE("ppc64", "host", "guest-legacy-invalid", VIR_CPU_COMPARE_ERROR); - DO_TEST_COMPARE("ppc64", "host", "guest-compat-none", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_COMPARE("ppc64", "host", "guest-compat-valid", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_COMPARE("ppc64", "host", "guest-compat-invalid", VIR_CPU_COMPARE_ERROR); - DO_TEST_COMPARE("ppc64", "host", "guest-compat-incompatible", VIR_CPU_COMPARE_INCOMPATIBLE); + DO_TEST_COMPARE(VIR_ARCH_PPC64, "host", "guest-strict", VIR_CPU_COMPARE_IDENTICAL); + DO_TEST_COMPARE(VIR_ARCH_PPC64, "host", "guest-exact", VIR_CPU_COMPARE_INCOMPATIBLE); + DO_TEST_COMPARE(VIR_ARCH_PPC64, "host", "guest-legacy", VIR_CPU_COMPARE_IDENTICAL); + DO_TEST_COMPARE(VIR_ARCH_PPC64, "host", "guest-legacy-incompatible", VIR_CPU_COMPARE_INCOMPATIBLE); + DO_TEST_COMPARE(VIR_ARCH_PPC64, "host", "guest-legacy-invalid", VIR_CPU_COMPARE_ERROR); + DO_TEST_COMPARE(VIR_ARCH_PPC64, "host", "guest-compat-none", VIR_CPU_COMPARE_IDENTICAL); + DO_TEST_COMPARE(VIR_ARCH_PPC64, "host", "guest-compat-valid", VIR_CPU_COMPARE_IDENTICAL); + DO_TEST_COMPARE(VIR_ARCH_PPC64, "host", "guest-compat-invalid", VIR_CPU_COMPARE_ERROR); + DO_TEST_COMPARE(VIR_ARCH_PPC64, "host", "guest-compat-incompatible", VIR_CPU_COMPARE_INCOMPATIBLE); /* guest updates for migration * automatically compares host CPU with the result */ - DO_TEST_UPDATE("x86_64", "host", "min", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_UPDATE("x86_64", "host", "pentium3", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_UPDATE("x86_64", "host", "guest", VIR_CPU_COMPARE_SUPERSET); - DO_TEST_UPDATE("x86_64", "host", "host-model", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_UPDATE("x86_64", "host", "host-model-nofallback", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_UPDATE("x86_64", "host-invtsc", "host-model", VIR_CPU_COMPARE_SUPERSET); - DO_TEST_UPDATE_ONLY("x86_64", "host", "host-passthrough"); - DO_TEST_UPDATE_ONLY("x86_64", "host", "host-passthrough-features"); + DO_TEST_UPDATE(VIR_ARCH_X86_64, "host", "min", VIR_CPU_COMPARE_IDENTICAL); + DO_TEST_UPDATE(VIR_ARCH_X86_64, "host", "pentium3", VIR_CPU_COMPARE_IDENTICAL); + DO_TEST_UPDATE(VIR_ARCH_X86_64, "host", "guest", VIR_CPU_COMPARE_SUPERSET); + DO_TEST_UPDATE(VIR_ARCH_X86_64, "host", "host-model", VIR_CPU_COMPARE_IDENTICAL); + DO_TEST_UPDATE(VIR_ARCH_X86_64, "host", "host-model-nofallback", VIR_CPU_COMPARE_IDENTICAL); + DO_TEST_UPDATE(VIR_ARCH_X86_64, "host-invtsc", "host-model", VIR_CPU_COMPARE_SUPERSET); + DO_TEST_UPDATE_ONLY(VIR_ARCH_X86_64, "host", "host-passthrough"); + DO_TEST_UPDATE_ONLY(VIR_ARCH_X86_64, "host", "host-passthrough-features"); - DO_TEST_UPDATE("ppc64", "host", "guest", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_UPDATE("ppc64", "host", "guest-nofallback", VIR_CPU_COMPARE_INCOMPATIBLE); - DO_TEST_UPDATE("ppc64", "host", "guest-legacy", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_UPDATE("ppc64", "host", "guest-legacy-incompatible", VIR_CPU_COMPARE_INCOMPATIBLE); - DO_TEST_UPDATE("ppc64", "host", "guest-legacy-invalid", VIR_CPU_COMPARE_ERROR); - DO_TEST_UPDATE("ppc64", "host", "guest-compat-none", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_UPDATE("ppc64", "host", "guest-compat-valid", VIR_CPU_COMPARE_IDENTICAL); - DO_TEST_UPDATE("ppc64", "host", "guest-compat-invalid", VIR_CPU_COMPARE_ERROR); - DO_TEST_UPDATE("ppc64", "host", "guest-compat-incompatible", VIR_CPU_COMPARE_INCOMPATIBLE); + DO_TEST_UPDATE(VIR_ARCH_PPC64, "host", "guest", VIR_CPU_COMPARE_IDENTICAL); + DO_TEST_UPDATE(VIR_ARCH_PPC64, "host", "guest-nofallback", VIR_CPU_COMPARE_INCOMPATIBLE); + DO_TEST_UPDATE(VIR_ARCH_PPC64, "host", "guest-legacy", VIR_CPU_COMPARE_IDENTICAL); + DO_TEST_UPDATE(VIR_ARCH_PPC64, "host", "guest-legacy-incompatible", VIR_CPU_COMPARE_INCOMPATIBLE); + DO_TEST_UPDATE(VIR_ARCH_PPC64, "host", "guest-legacy-invalid", VIR_CPU_COMPARE_ERROR); + DO_TEST_UPDATE(VIR_ARCH_PPC64, "host", "guest-compat-none", VIR_CPU_COMPARE_IDENTICAL); + DO_TEST_UPDATE(VIR_ARCH_PPC64, "host", "guest-compat-valid", VIR_CPU_COMPARE_IDENTICAL); + DO_TEST_UPDATE(VIR_ARCH_PPC64, "host", "guest-compat-invalid", VIR_CPU_COMPARE_ERROR); + DO_TEST_UPDATE(VIR_ARCH_PPC64, "host", "guest-compat-incompatible", VIR_CPU_COMPARE_INCOMPATIBLE); /* computing baseline CPUs */ - DO_TEST_BASELINE("x86_64", "incompatible-vendors", 0, -1); - DO_TEST_BASELINE("x86_64", "no-vendor", 0, 0); - DO_TEST_BASELINE("x86_64", "some-vendors", 0, 0); - DO_TEST_BASELINE("x86_64", "1", 0, 0); - DO_TEST_BASELINE("x86_64", "2", 0, 0); - DO_TEST_BASELINE("x86_64", "3", 0, 0); - DO_TEST_BASELINE("x86_64", "3", VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES, 0); - DO_TEST_BASELINE("x86_64", "4", 0, 0); - DO_TEST_BASELINE("x86_64", "4", VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES, 0); - DO_TEST_BASELINE("x86_64", "5", 0, 0); - DO_TEST_BASELINE("x86_64", "5", VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES, 0); - DO_TEST_BASELINE("x86_64", "6", 0, 0); - DO_TEST_BASELINE("x86_64", "6", VIR_CONNECT_BASELINE_CPU_MIGRATABLE, 0); - DO_TEST_BASELINE("x86_64", "7", 0, 0); - DO_TEST_BASELINE("x86_64", "8", 0, 0); + DO_TEST_BASELINE(VIR_ARCH_X86_64, "incompatible-vendors", 0, -1); + DO_TEST_BASELINE(VIR_ARCH_X86_64, "no-vendor", 0, 0); + DO_TEST_BASELINE(VIR_ARCH_X86_64, "some-vendors", 0, 0); + DO_TEST_BASELINE(VIR_ARCH_X86_64, "1", 0, 0); + DO_TEST_BASELINE(VIR_ARCH_X86_64, "2", 0, 0); + DO_TEST_BASELINE(VIR_ARCH_X86_64, "3", 0, 0); + DO_TEST_BASELINE(VIR_ARCH_X86_64, "3", VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES, 0); + DO_TEST_BASELINE(VIR_ARCH_X86_64, "4", 0, 0); + DO_TEST_BASELINE(VIR_ARCH_X86_64, "4", VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES, 0); + DO_TEST_BASELINE(VIR_ARCH_X86_64, "5", 0, 0); + DO_TEST_BASELINE(VIR_ARCH_X86_64, "5", VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES, 0); + DO_TEST_BASELINE(VIR_ARCH_X86_64, "6", 0, 0); + DO_TEST_BASELINE(VIR_ARCH_X86_64, "6", VIR_CONNECT_BASELINE_CPU_MIGRATABLE, 0); + DO_TEST_BASELINE(VIR_ARCH_X86_64, "7", 0, 0); + DO_TEST_BASELINE(VIR_ARCH_X86_64, "8", 0, 0); - DO_TEST_BASELINE("ppc64", "incompatible-vendors", 0, -1); - DO_TEST_BASELINE("ppc64", "no-vendor", 0, 0); - DO_TEST_BASELINE("ppc64", "incompatible-models", 0, -1); - DO_TEST_BASELINE("ppc64", "same-model", 0, 0); - DO_TEST_BASELINE("ppc64", "legacy", 0, -1); + DO_TEST_BASELINE(VIR_ARCH_PPC64, "incompatible-vendors", 0, -1); + DO_TEST_BASELINE(VIR_ARCH_PPC64, "no-vendor", 0, 0); + DO_TEST_BASELINE(VIR_ARCH_PPC64, "incompatible-models", 0, -1); + DO_TEST_BASELINE(VIR_ARCH_PPC64, "same-model", 0, 0); + DO_TEST_BASELINE(VIR_ARCH_PPC64, "legacy", 0, -1); /* CPU features */ - DO_TEST_HASFEATURE("x86_64", "host", "vmx", YES); - DO_TEST_HASFEATURE("x86_64", "host", "lm", YES); - DO_TEST_HASFEATURE("x86_64", "host", "sse4.1", YES); - DO_TEST_HASFEATURE("x86_64", "host", "3dnowext", NO); - DO_TEST_HASFEATURE("x86_64", "host", "skinit", NO); - DO_TEST_HASFEATURE("x86_64", "host", "foo", FAIL); + DO_TEST_HASFEATURE(VIR_ARCH_X86_64, "host", "vmx", YES); + DO_TEST_HASFEATURE(VIR_ARCH_X86_64, "host", "lm", YES); + DO_TEST_HASFEATURE(VIR_ARCH_X86_64, "host", "sse4.1", YES); + DO_TEST_HASFEATURE(VIR_ARCH_X86_64, "host", "3dnowext", NO); + DO_TEST_HASFEATURE(VIR_ARCH_X86_64, "host", "skinit", NO); + DO_TEST_HASFEATURE(VIR_ARCH_X86_64, "host", "foo", FAIL); /* computing guest data and decoding the data into a guest CPU XML */ - DO_TEST_GUESTCPU("x86_64", "host", "guest", NULL, 0); - DO_TEST_GUESTCPU("x86_64", "host-better", "pentium3", NULL, 0); - DO_TEST_GUESTCPU("x86_64", "host-worse", "guest", NULL, 0); - DO_TEST_GUESTCPU("x86_64", "host", "strict-force-extra", NULL, 0); - DO_TEST_GUESTCPU("x86_64", "host", "penryn-force", NULL, 0); - DO_TEST_GUESTCPU("x86_64", "host", "guest", model486, 0); - DO_TEST_GUESTCPU("x86_64", "host", "guest", models, 0); - DO_TEST_GUESTCPU("x86_64", "host", "guest", nomodel, -1); - DO_TEST_GUESTCPU("x86_64", "host", "guest-nofallback", models, -1); - DO_TEST_GUESTCPU("x86_64", "host", "host+host-model", models, 0); - DO_TEST_GUESTCPU("x86_64", "host", "host+host-model-nofallback", models, -1); - DO_TEST_GUESTCPU("x86_64", "host-Haswell-noTSX", "Haswell", haswell, 0); - DO_TEST_GUESTCPU("x86_64", "host-Haswell-noTSX", "Haswell-noTSX", haswell, 0); - DO_TEST_GUESTCPU("x86_64", "host-Haswell-noTSX", "Haswell-noTSX-nofallback", haswell, -1); - DO_TEST_GUESTCPU("x86_64", "host-Haswell-noTSX", "Haswell-noTSX", NULL, 0); + DO_TEST_GUESTCPU(VIR_ARCH_X86_64, "host", "guest", NULL, 0); + DO_TEST_GUESTCPU(VIR_ARCH_X86_64, "host-better", "pentium3", NULL, 0); + DO_TEST_GUESTCPU(VIR_ARCH_X86_64, "host-worse", "guest", NULL, 0); + DO_TEST_GUESTCPU(VIR_ARCH_X86_64, "host", "strict-force-extra", NULL, 0); + DO_TEST_GUESTCPU(VIR_ARCH_X86_64, "host", "penryn-force", NULL, 0); + DO_TEST_GUESTCPU(VIR_ARCH_X86_64, "host", "guest", model486, 0); + DO_TEST_GUESTCPU(VIR_ARCH_X86_64, "host", "guest", models, 0); + DO_TEST_GUESTCPU(VIR_ARCH_X86_64, "host", "guest", nomodel, -1); + DO_TEST_GUESTCPU(VIR_ARCH_X86_64, "host", "guest-nofallback", models, -1); + DO_TEST_GUESTCPU(VIR_ARCH_X86_64, "host", "host+host-model", models, 0); + DO_TEST_GUESTCPU(VIR_ARCH_X86_64, "host", "host+host-model-nofallback", models, -1); + DO_TEST_GUESTCPU(VIR_ARCH_X86_64, "host-Haswell-noTSX", "Haswell", haswell, 0); + DO_TEST_GUESTCPU(VIR_ARCH_X86_64, "host-Haswell-noTSX", "Haswell-noTSX", haswell, 0); + DO_TEST_GUESTCPU(VIR_ARCH_X86_64, "host-Haswell-noTSX", "Haswell-noTSX-nofallback", haswell, -1); + DO_TEST_GUESTCPU(VIR_ARCH_X86_64, "host-Haswell-noTSX", "Haswell-noTSX", NULL, 0); - DO_TEST_GUESTCPU("ppc64", "host", "guest", ppc_models, 0); - DO_TEST_GUESTCPU("ppc64", "host", "guest-nofallback", ppc_models, -1); - DO_TEST_GUESTCPU("ppc64", "host", "guest-legacy", ppc_models, 0); - DO_TEST_GUESTCPU("ppc64", "host", "guest-legacy-incompatible", ppc_models, -1); - DO_TEST_GUESTCPU("ppc64", "host", "guest-legacy-invalid", ppc_models, -1); + DO_TEST_GUESTCPU(VIR_ARCH_PPC64, "host", "guest", ppc_models, 0); + DO_TEST_GUESTCPU(VIR_ARCH_PPC64, "host", "guest-nofallback", ppc_models, -1); + DO_TEST_GUESTCPU(VIR_ARCH_PPC64, "host", "guest-legacy", ppc_models, 0); + DO_TEST_GUESTCPU(VIR_ARCH_PPC64, "host", "guest-legacy-incompatible", ppc_models, -1); + DO_TEST_GUESTCPU(VIR_ARCH_PPC64, "host", "guest-legacy-invalid", ppc_models, -1); - DO_TEST_CPUID("x86_64", "A10-5800K", true); - DO_TEST_CPUID("x86_64", "Atom-D510", false); - DO_TEST_CPUID("x86_64", "Atom-N450", false); - DO_TEST_CPUID("x86_64", "Core-i5-2500", true); - DO_TEST_CPUID("x86_64", "Core-i5-2540M", true); - DO_TEST_CPUID("x86_64", "Core-i5-4670T", true); - DO_TEST_CPUID("x86_64", "Core-i5-6600", true); - DO_TEST_CPUID("x86_64", "Core-i7-2600", true); - DO_TEST_CPUID("x86_64", "Core-i7-3520M", false); - DO_TEST_CPUID("x86_64", "Core-i7-3740QM", true); - DO_TEST_CPUID("x86_64", "Core-i7-3770", true); - DO_TEST_CPUID("x86_64", "Core-i7-4600U", true); - DO_TEST_CPUID("x86_64", "Core-i7-5600U", true); - DO_TEST_CPUID("x86_64", "Core2-E6850", true); - DO_TEST_CPUID("x86_64", "Core2-Q9500", false); - DO_TEST_CPUID("x86_64", "FX-8150", false); - DO_TEST_CPUID("x86_64", "Opteron-1352", false); - DO_TEST_CPUID("x86_64", "Opteron-2350", true); - DO_TEST_CPUID("x86_64", "Opteron-6234", true); - DO_TEST_CPUID("x86_64", "Opteron-6282", false); - DO_TEST_CPUID("x86_64", "Pentium-P6100", false); - DO_TEST_CPUID("x86_64", "Phenom-B95", true); - DO_TEST_CPUID("x86_64", "Xeon-5110", false); - DO_TEST_CPUID("x86_64", "Xeon-E3-1245", true); - DO_TEST_CPUID("x86_64", "Xeon-E5-2630", true); - DO_TEST_CPUID("x86_64", "Xeon-E5-2650", true); - DO_TEST_CPUID("x86_64", "Xeon-E7-4820", true); - DO_TEST_CPUID("x86_64", "Xeon-W3520", true); - DO_TEST_CPUID("x86_64", "Xeon-X5460", false); + DO_TEST_CPUID(VIR_ARCH_X86_64, "A10-5800K", true); + DO_TEST_CPUID(VIR_ARCH_X86_64, "Atom-D510", false); + DO_TEST_CPUID(VIR_ARCH_X86_64, "Atom-N450", false); + DO_TEST_CPUID(VIR_ARCH_X86_64, "Core-i5-2500", true); + DO_TEST_CPUID(VIR_ARCH_X86_64, "Core-i5-2540M", true); + DO_TEST_CPUID(VIR_ARCH_X86_64, "Core-i5-4670T", true); + DO_TEST_CPUID(VIR_ARCH_X86_64, "Core-i5-6600", true); + DO_TEST_CPUID(VIR_ARCH_X86_64, "Core-i7-2600", true); + DO_TEST_CPUID(VIR_ARCH_X86_64, "Core-i7-3520M", false); + DO_TEST_CPUID(VIR_ARCH_X86_64, "Core-i7-3740QM", true); + DO_TEST_CPUID(VIR_ARCH_X86_64, "Core-i7-3770", true); + DO_TEST_CPUID(VIR_ARCH_X86_64, "Core-i7-4600U", true); + DO_TEST_CPUID(VIR_ARCH_X86_64, "Core-i7-5600U", true); + DO_TEST_CPUID(VIR_ARCH_X86_64, "Core2-E6850", true); + DO_TEST_CPUID(VIR_ARCH_X86_64, "Core2-Q9500", false); + DO_TEST_CPUID(VIR_ARCH_X86_64, "FX-8150", false); + DO_TEST_CPUID(VIR_ARCH_X86_64, "Opteron-1352", false); + DO_TEST_CPUID(VIR_ARCH_X86_64, "Opteron-2350", true); + DO_TEST_CPUID(VIR_ARCH_X86_64, "Opteron-6234", true); + DO_TEST_CPUID(VIR_ARCH_X86_64, "Opteron-6282", false); + DO_TEST_CPUID(VIR_ARCH_X86_64, "Pentium-P6100", false); + DO_TEST_CPUID(VIR_ARCH_X86_64, "Phenom-B95", true); + DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-5110", false); + DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-E3-1245", true); + DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-E5-2630", true); + DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-E5-2650", true); + DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-E7-4820", true); + DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-W3520", true); + DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-X5460", false); #if WITH_QEMU && WITH_YAJL qemuTestDriverFree(&driver); -- 2.11.1

Instantiating "host" CPU and querying it using qom-get has been the only way of probing host CPU via QEMU until 2.9.0 implemented query-cpu-model-expansion for x86_64. Even though libvirt never really used the old way its result can be easily converted into the one produced by query-cpu-model-expansion. Thus we can reuse the original test data and possible get new data from hosts where QEMU does not support the new QMP command. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - cpu-convert.py: set "vendor" property according to model-id tests/cputestdata/cpu-convert.py | 249 +++++++++++++++++++++++++++++++++++++++ tests/cputestdata/cpu-gather.sh | 39 +++++- tests/cputestdata/cpu-parse.sh | 3 + 3 files changed, 285 insertions(+), 6 deletions(-) create mode 100755 tests/cputestdata/cpu-convert.py diff --git a/tests/cputestdata/cpu-convert.py b/tests/cputestdata/cpu-convert.py new file mode 100755 index 000000000..77bae3628 --- /dev/null +++ b/tests/cputestdata/cpu-convert.py @@ -0,0 +1,249 @@ +#!/usr/bin/python + +import sys +import json + +# This is a list of x86 CPU features as of QEMU 2.8.50 and it won't need any +# updates since in the future because query-cpu-model-expansion will be used +# with newer QEMU. +cpuidMap = [ + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00000001, "edx": 0, "names": ["pni", "sse3"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00000002, "edx": 0, "names": ["pclmulqdq", "pclmuldq"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00000004, "edx": 0, "names": ["dtes64"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00000008, "edx": 0, "names": ["monitor"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00000010, "edx": 0, "names": ["ds-cpl", "ds_cpl"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00000020, "edx": 0, "names": ["vmx"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00000040, "edx": 0, "names": ["smx"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00000080, "edx": 0, "names": ["est"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00000100, "edx": 0, "names": ["tm2"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00000200, "edx": 0, "names": ["ssse3"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00000400, "edx": 0, "names": ["cid"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00001000, "edx": 0, "names": ["fma"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00002000, "edx": 0, "names": ["cx16"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00004000, "edx": 0, "names": ["xtpr"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00008000, "edx": 0, "names": ["pdcm"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00020000, "edx": 0, "names": ["pcid"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00040000, "edx": 0, "names": ["dca"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00080000, "edx": 0, "names": ["sse4.1", "sse4-1", "sse4_1"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00100000, "edx": 0, "names": ["sse4.2", "sse4-2", "sse4_2"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00200000, "edx": 0, "names": ["x2apic"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00400000, "edx": 0, "names": ["movbe"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00800000, "edx": 0, "names": ["popcnt"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x01000000, "edx": 0, "names": ["tsc-deadline"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x02000000, "edx": 0, "names": ["aes"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x04000000, "edx": 0, "names": ["xsave"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x08000000, "edx": 0, "names": ["osxsave"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x10000000, "edx": 0, "names": ["avx"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x20000000, "edx": 0, "names": ["f16c"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x40000000, "edx": 0, "names": ["rdrand"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x80000000, "edx": 0, "names": ["hypervisor"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00000001, "names": ["fpu"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00000002, "names": ["vme"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00000004, "names": ["de"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00000008, "names": ["pse"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00000010, "names": ["tsc"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00000020, "names": ["msr"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00000040, "names": ["pae"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00000080, "names": ["mce"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00000100, "names": ["cx8"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00000200, "names": ["apic"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00000800, "names": ["sep"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00001000, "names": ["mtrr"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00002000, "names": ["pge"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00004000, "names": ["mca"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00008000, "names": ["cmov"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00010000, "names": ["pat"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00020000, "names": ["pse36"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00040000, "names": ["pn"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00080000, "names": ["clflush"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00200000, "names": ["ds"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00400000, "names": ["acpi"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00800000, "names": ["mmx"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x01000000, "names": ["fxsr"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x02000000, "names": ["sse"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x04000000, "names": ["sse2"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x08000000, "names": ["ss"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x10000000, "names": ["ht"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x20000000, "names": ["tm"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x40000000, "names": ["ia64"]}, + {"in_eax": 0x00000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x80000000, "names": ["pbe"]}, + {"in_eax": 0x00000006, "in_ecx": 0, "eax": 0x00000004, "ebx": 0, "ecx": 0, "edx": 0, "names": ["arat"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0x00000001, "ecx": 0, "edx": 0, "names": ["fsgsbase"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0x00000002, "ecx": 0, "edx": 0, "names": ["tsc-adjust", "tsc_adjust"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0x00000008, "ecx": 0, "edx": 0, "names": ["bmi1"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0x00000010, "ecx": 0, "edx": 0, "names": ["hle"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0x00000020, "ecx": 0, "edx": 0, "names": ["avx2"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0x00000080, "ecx": 0, "edx": 0, "names": ["smep"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0x00000100, "ecx": 0, "edx": 0, "names": ["bmi2"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0x00000200, "ecx": 0, "edx": 0, "names": ["erms"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0x00000400, "ecx": 0, "edx": 0, "names": ["invpcid"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0x00000800, "ecx": 0, "edx": 0, "names": ["rtm"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0x00004000, "ecx": 0, "edx": 0, "names": ["mpx"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0x00010000, "ecx": 0, "edx": 0, "names": ["avx512f"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0x00020000, "ecx": 0, "edx": 0, "names": ["avx512dq"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0x00040000, "ecx": 0, "edx": 0, "names": ["rdseed"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0x00080000, "ecx": 0, "edx": 0, "names": ["adx"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0x00100000, "ecx": 0, "edx": 0, "names": ["smap"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0x00200000, "ecx": 0, "edx": 0, "names": ["avx512ifma"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0x00400000, "ecx": 0, "edx": 0, "names": ["pcommit"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0x00800000, "ecx": 0, "edx": 0, "names": ["clflushopt"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0x01000000, "ecx": 0, "edx": 0, "names": ["clwb"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0x04000000, "ecx": 0, "edx": 0, "names": ["avx512pf"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0x08000000, "ecx": 0, "edx": 0, "names": ["avx512er"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0x10000000, "ecx": 0, "edx": 0, "names": ["avx512cd"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0x20000000, "ecx": 0, "edx": 0, "names": ["sha-ni"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0x40000000, "ecx": 0, "edx": 0, "names": ["avx512bw"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0x80000000, "ecx": 0, "edx": 0, "names": ["avx512vl"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00000002, "edx": 0, "names": ["avx512vbmi"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00000004, "edx": 0, "names": ["umip"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00000008, "edx": 0, "names": ["pku"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00000010, "edx": 0, "names": ["ospke"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00004000, "edx": 0, "names": ["avx512-vpopcntdq"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00010000, "edx": 0, "names": ["la57"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00400000, "edx": 0, "names": ["rdpid"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00000004, "names": ["avx512-4vnniw"]}, + {"in_eax": 0x00000007, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00000008, "names": ["avx512-4fmaps"]}, + {"in_eax": 0x0000000d, "in_ecx": 1, "eax": 0x00000001, "ebx": 0, "ecx": 0, "edx": 0, "names": ["xsaveopt"]}, + {"in_eax": 0x0000000d, "in_ecx": 1, "eax": 0x00000002, "ebx": 0, "ecx": 0, "edx": 0, "names": ["xsavec"]}, + {"in_eax": 0x0000000d, "in_ecx": 1, "eax": 0x00000004, "ebx": 0, "ecx": 0, "edx": 0, "names": ["xgetbv1"]}, + {"in_eax": 0x0000000d, "in_ecx": 1, "eax": 0x00000008, "ebx": 0, "ecx": 0, "edx": 0, "names": ["xsaves"]}, + {"in_eax": 0x40000001, "in_ecx": 0, "eax": 0x00000001, "ebx": 0, "ecx": 0, "edx": 0, "names": ["kvmclock"]}, + {"in_eax": 0x40000001, "in_ecx": 0, "eax": 0x00000002, "ebx": 0, "ecx": 0, "edx": 0, "names": ["kvm-nopiodelay", "kvm_nopiodelay"]}, + {"in_eax": 0x40000001, "in_ecx": 0, "eax": 0x00000004, "ebx": 0, "ecx": 0, "edx": 0, "names": ["kvm-mmu", "kvm_mmu"]}, + {"in_eax": 0x40000001, "in_ecx": 0, "eax": 0x00000008, "ebx": 0, "ecx": 0, "edx": 0, "names": ["kvmclock"]}, + {"in_eax": 0x40000001, "in_ecx": 0, "eax": 0x00000010, "ebx": 0, "ecx": 0, "edx": 0, "names": ["kvm-asyncpf", "kvm_asyncpf"]}, + {"in_eax": 0x40000001, "in_ecx": 0, "eax": 0x00000020, "ebx": 0, "ecx": 0, "edx": 0, "names": ["kvm-steal-time", "kvm_steal_time"]}, + {"in_eax": 0x40000001, "in_ecx": 0, "eax": 0x00000040, "ebx": 0, "ecx": 0, "edx": 0, "names": ["kvm-pv-eoi", "kvm_pv_eoi"]}, + {"in_eax": 0x40000001, "in_ecx": 0, "eax": 0x00000080, "ebx": 0, "ecx": 0, "edx": 0, "names": ["kvm-pv-unhalt", "kvm_pv_unhalt"]}, + {"in_eax": 0x40000001, "in_ecx": 0, "eax": 0x01000000, "ebx": 0, "ecx": 0, "edx": 0, "names": ["kvmclock-stable-bit"]}, + {"in_eax": 0x80000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00000001, "edx": 0, "names": ["lahf-lm", "lahf_lm"]}, + {"in_eax": 0x80000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00000002, "edx": 0, "names": ["cmp-legacy", "cmp_legacy"]}, + {"in_eax": 0x80000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00000004, "edx": 0, "names": ["svm"]}, + {"in_eax": 0x80000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00000008, "edx": 0, "names": ["extapic"]}, + {"in_eax": 0x80000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00000010, "edx": 0, "names": ["cr8legacy"]}, + {"in_eax": 0x80000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00000020, "edx": 0, "names": ["abm"]}, + {"in_eax": 0x80000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00000040, "edx": 0, "names": ["sse4a"]}, + {"in_eax": 0x80000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00000080, "edx": 0, "names": ["misalignsse"]}, + {"in_eax": 0x80000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00000100, "edx": 0, "names": ["3dnowprefetch"]}, + {"in_eax": 0x80000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00000200, "edx": 0, "names": ["osvw"]}, + {"in_eax": 0x80000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00000400, "edx": 0, "names": ["ibs"]}, + {"in_eax": 0x80000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00000800, "edx": 0, "names": ["xop"]}, + {"in_eax": 0x80000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00001000, "edx": 0, "names": ["skinit"]}, + {"in_eax": 0x80000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00002000, "edx": 0, "names": ["wdt"]}, + {"in_eax": 0x80000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00008000, "edx": 0, "names": ["lwp"]}, + {"in_eax": 0x80000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00010000, "edx": 0, "names": ["fma4"]}, + {"in_eax": 0x80000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00020000, "edx": 0, "names": ["tce"]}, + {"in_eax": 0x80000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00080000, "edx": 0, "names": ["nodeid-msr", "nodeid_msr"]}, + {"in_eax": 0x80000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00200000, "edx": 0, "names": ["tbm"]}, + {"in_eax": 0x80000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00400000, "edx": 0, "names": ["topoext"]}, + {"in_eax": 0x80000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x00800000, "edx": 0, "names": ["perfctr-core", "perfctr_core"]}, + {"in_eax": 0x80000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0x01000000, "edx": 0, "names": ["perfctr-nb", "perfctr_nb"]}, + {"in_eax": 0x80000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00000800, "names": ["syscall"]}, + {"in_eax": 0x80000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00100000, "names": ["nx", "xd"]}, + {"in_eax": 0x80000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00400000, "names": ["mmxext"]}, + {"in_eax": 0x80000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x02000000, "names": ["fxsr-opt", "ffxsr", "fxsr_opt"]}, + {"in_eax": 0x80000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x04000000, "names": ["pdpe1gb"]}, + {"in_eax": 0x80000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x08000000, "names": ["rdtscp"]}, + {"in_eax": 0x80000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x20000000, "names": ["lm", "i64"]}, + {"in_eax": 0x80000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x40000000, "names": ["3dnowext"]}, + {"in_eax": 0x80000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x80000000, "names": ["3dnow"]}, + {"in_eax": 0x80000007, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00000100, "names": ["invtsc"]}, + {"in_eax": 0x8000000A, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00000001, "names": ["npt"]}, + {"in_eax": 0x8000000A, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00000002, "names": ["lbrv"]}, + {"in_eax": 0x8000000A, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00000004, "names": ["svm-lock", "svm_lock"]}, + {"in_eax": 0x8000000A, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00000008, "names": ["nrip-save", "nrip_save"]}, + {"in_eax": 0x8000000A, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00000010, "names": ["tsc-scale", "tsc_scale"]}, + {"in_eax": 0x8000000A, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00000020, "names": ["vmcb-clean", "vmcb_clean"]}, + {"in_eax": 0x8000000A, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00000040, "names": ["flushbyasid"]}, + {"in_eax": 0x8000000A, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00000080, "names": ["decodeassists"]}, + {"in_eax": 0x8000000A, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00000400, "names": ["pause-filter", "pause_filter"]}, + {"in_eax": 0x8000000A, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00001000, "names": ["pfthreshold"]}, + {"in_eax": 0xC0000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00000004, "names": ["xstore"]}, + {"in_eax": 0xC0000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00000008, "names": ["xstore-en"]}, + {"in_eax": 0xC0000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00000040, "names": ["xcrypt"]}, + {"in_eax": 0xC0000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00000080, "names": ["xcrypt-en"]}, + {"in_eax": 0xC0000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00000100, "names": ["ace2"]}, + {"in_eax": 0xC0000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00000200, "names": ["ace2-en"]}, + {"in_eax": 0xC0000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00000400, "names": ["phe"]}, + {"in_eax": 0xC0000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00000800, "names": ["phe-en"]}, + {"in_eax": 0xC0000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00001000, "names": ["pmm"]}, + {"in_eax": 0xC0000001, "in_ecx": 0, "eax": 0, "ebx": 0, "ecx": 0, "edx": 0x00002000, "names": ["pmm-en"]}, +] + + +def parseFeatureWords(path): + features = None + + with open(path, "r") as f: + s = f.read() + + props = {} + for i in range(5): + (data, pos) = dec.raw_decode(s) + if i == 0: + features = data["return"] + else: + keys = ["family", "model", "stepping", "model-id"] + props[keys[i - 1]] = data["return"] + + while pos < len(s) and s[pos] != "{": + pos += 1 + s = s[pos:] + + if props["model-id"].find("Intel") != -1: + props["vendor"] = "GenuineIntel" + elif props["model-id"].find("AMD") != -1: + props["vendor"] = "AuthenticAMD" + + cpuid = {} + for feat in features: + in_eax = feat["cpuid-input-eax"] + in_ecx = 0 + if "cpuid-input-ecx" in feat: + in_ecx = feat["cpuid-input-ecx"] + + if in_eax not in cpuid: + cpuid[in_eax] = {} + leaf = cpuid[in_eax] + + if in_ecx not in leaf: + leaf[in_ecx] = {"eax": 0, "ebx": 0, "ecx": 0, "edx": 0} + leaf = leaf[in_ecx] + + leaf[feat["cpuid-register"].lower()] = feat["features"] + + return props, cpuid + + +def propAdd(props, feature, value): + for name in feature["names"]: + props[name] = value + + +dec = json.JSONDecoder() + +for path in sys.argv[1:]: + props, cpuid = parseFeatureWords(path) + + for feature in cpuidMap: + in_eax = feature["in_eax"] + in_ecx = feature["in_ecx"] + eax = feature["eax"] + ebx = feature["ebx"] + ecx = feature["ecx"] + edx = feature["edx"] + + if in_eax not in cpuid or in_ecx not in cpuid[in_eax]: + propAdd(props, feature, False) + else: + leaf = cpuid[in_eax][in_ecx] + propAdd(props, feature, ((eax > 0 and leaf["eax"] & eax > 0) or + (ebx > 0 and leaf["ebx"] & ebx > 0) or + (ecx > 0 and leaf["ecx"] & ecx > 0) or + (edx > 0 and leaf["edx"] & edx > 0))) + + with open(path, "w") as f: + json.dump({"return": {"model": {"name": "base", "props": props}}, + "id": "model-expansion"}, + f, indent = 2, separators = (',', ': ')) + f.write("\n") diff --git a/tests/cputestdata/cpu-gather.sh b/tests/cputestdata/cpu-gather.sh index c8439a661..83963557e 100755 --- a/tests/cputestdata/cpu-gather.sh +++ b/tests/cputestdata/cpu-gather.sh @@ -24,12 +24,39 @@ qom_get() '"property":"'$1'"},"id":"'$1'"}' } -$qemu -machine accel=kvm -cpu host -nodefaults -nographic -qmp stdio <<EOF +model_expansion() +{ + mode=$1 + model=$2 + + echo '{"execute":"query-cpu-model-expansion","arguments":' \ + '{"type":"'"$mode"'","model":'"$model"'},"id":"model-expansion"}' +} + +model=$( + $qemu -machine accel=kvm -cpu host -nodefaults -nographic -qmp stdio <<EOF {"execute":"qmp_capabilities"} -`qom_get feature-words` -`qom_get family` -`qom_get model` -`qom_get stepping` -`qom_get model-id` +$(model_expansion static '{"name":"host"}') +{"execute":"quit"} +EOF +) +model=$( + echo "$model" | \ + sed -ne 's/^{"return": {"model": {\(.*{.*}\)}}, .*/{\1}/p' +) + +$qemu -machine accel=kvm -cpu host -nodefaults -nographic -qmp stdio <<EOF +{"execute":"qmp_capabilities"} +$( + if [ "x$model" != x ]; then + model_expansion full "$model" + else + qom_get feature-words + qom_get family + qom_get model + qom_get stepping + qom_get model-id + fi +) {"execute":"quit"} EOF diff --git a/tests/cputestdata/cpu-parse.sh b/tests/cputestdata/cpu-parse.sh index 90bc2dcd9..c634989e2 100755 --- a/tests/cputestdata/cpu-parse.sh +++ b/tests/cputestdata/cpu-parse.sh @@ -52,6 +52,9 @@ echo $fname.xml json <<<"$data" >$fname.json if [[ -s $fname.json ]]; then echo $fname.json + if ! grep -q model-expansion $fname.json; then + $(dirname $0)/cpu-convert.py $fname.json + fi else rm $fname.new.json fi -- 2.11.1

Converted by running the following command, renaming the files as *.new, and committing only the *.new files. (cd tests/cputestdata; ./cpu-convert.py *.json) Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - reconverted to contain "vendor" properties tests/cputestdata/x86_64-cpuid-A10-5800K.json.new | 203 +++++++++++++++++++++ .../cputestdata/x86_64-cpuid-Core-i5-2500.json.new | 203 +++++++++++++++++++++ .../x86_64-cpuid-Core-i5-2540M.json.new | 203 +++++++++++++++++++++ .../x86_64-cpuid-Core-i5-4670T.json.new | 203 +++++++++++++++++++++ .../cputestdata/x86_64-cpuid-Core-i5-6600.json.new | 203 +++++++++++++++++++++ .../cputestdata/x86_64-cpuid-Core-i7-2600.json.new | 203 +++++++++++++++++++++ .../x86_64-cpuid-Core-i7-3740QM.json.new | 203 +++++++++++++++++++++ .../cputestdata/x86_64-cpuid-Core-i7-3770.json.new | 203 +++++++++++++++++++++ .../x86_64-cpuid-Core-i7-4600U.json.new | 203 +++++++++++++++++++++ .../x86_64-cpuid-Core-i7-5600U.json.new | 203 +++++++++++++++++++++ .../cputestdata/x86_64-cpuid-Core2-E6850.json.new | 203 +++++++++++++++++++++ .../cputestdata/x86_64-cpuid-Opteron-2350.json.new | 203 +++++++++++++++++++++ .../cputestdata/x86_64-cpuid-Opteron-6234.json.new | 203 +++++++++++++++++++++ tests/cputestdata/x86_64-cpuid-Phenom-B95.json.new | 203 +++++++++++++++++++++ .../cputestdata/x86_64-cpuid-Xeon-E3-1245.json.new | 203 +++++++++++++++++++++ .../cputestdata/x86_64-cpuid-Xeon-E5-2630.json.new | 203 +++++++++++++++++++++ .../cputestdata/x86_64-cpuid-Xeon-E5-2650.json.new | 203 +++++++++++++++++++++ .../cputestdata/x86_64-cpuid-Xeon-E7-4820.json.new | 203 +++++++++++++++++++++ tests/cputestdata/x86_64-cpuid-Xeon-W3520.json.new | 203 +++++++++++++++++++++ 19 files changed, 3857 insertions(+) create mode 100644 tests/cputestdata/x86_64-cpuid-A10-5800K.json.new create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i5-2500.json.new create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i5-2540M.json.new create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i5-4670T.json.new create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i5-6600.json.new create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-2600.json.new create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-3740QM.json.new create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-3770.json.new create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-4600U.json.new create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-5600U.json.new create mode 100644 tests/cputestdata/x86_64-cpuid-Core2-E6850.json.new create mode 100644 tests/cputestdata/x86_64-cpuid-Opteron-2350.json.new create mode 100644 tests/cputestdata/x86_64-cpuid-Opteron-6234.json.new create mode 100644 tests/cputestdata/x86_64-cpuid-Phenom-B95.json.new create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E3-1245.json.new create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E5-2630.json.new create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E5-2650.json.new create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7-4820.json.new create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-W3520.json.new diff --git a/tests/cputestdata/x86_64-cpuid-A10-5800K.json.new b/tests/cputestdata/x86_64-cpuid-A10-5800K.json.new new file mode 100644 index 000000000..132ed249b --- /dev/null +++ b/tests/cputestdata/x86_64-cpuid-A10-5800K.json.new @@ -0,0 +1,203 @@ +{ + "return": { + "model": { + "name": "base", + "props": { + "pfthreshold": false, + "pku": false, + "rtm": false, + "tsc_adjust": true, + "tsc-deadline": false, + "xstore-en": false, + "tsc-scale": false, + "sse": true, + "smap": false, + "stepping": 1, + "tce": false, + "kvm_steal_time": true, + "smep": false, + "rdpid": false, + "xcrypt": false, + "sse4_2": true, + "monitor": false, + "sse4_1": true, + "kvm-mmu": false, + "flushbyasid": false, + "kvm-steal-time": true, + "lm": true, + "tsc": true, + "adx": false, + "fxsr": true, + "sha-ni": false, + "tm": false, + "pclmuldq": true, + "xgetbv1": false, + "xstore": false, + "vmcb_clean": false, + "vme": true, + "vendor": "AuthenticAMD", + "arat": false, + "ffxsr": true, + "de": true, + "avx512f": false, + "pse": true, + "ds-cpl": false, + "tbm": true, + "ia64": false, + "phe-en": false, + "f16c": true, + "ds": false, + "mpx": false, + "tsc-adjust": true, + "aes": true, + "avx2": false, + "pbe": false, + "cx16": true, + "ds_cpl": false, + "movbe": false, + "perfctr-nb": false, + "nrip_save": true, + "kvm_mmu": false, + "ospke": false, + "avx512ifma": false, + "vmx": false, + "sep": true, + "xsaveopt": false, + "sse4a": true, + "avx512dq": false, + "i64": true, + "avx512-4vnniw": false, + "xsave": true, + "erms": false, + "hle": false, + "nodeid_msr": false, + "est": false, + "svm_lock": false, + "xop": true, + "model-id": "AMD A10-5800K APU with Radeon(tm) HD Graphics ", + "abm": true, + "avx512er": false, + "sse4.1": true, + "sse4.2": true, + "pause-filter": false, + "lahf-lm": true, + "kvm-nopiodelay": true, + "cmp_legacy": true, + "acpi": false, + "fma4": true, + "popcnt": true, + "mmx": true, + "osxsave": false, + "pcommit": false, + "avx512pf": false, + "clwb": false, + "dca": false, + "pdcm": false, + "xcrypt-en": false, + "3dnow": false, + "invtsc": false, + "tm2": false, + "hypervisor": true, + "kvmclock-stable-bit": true, + "fxsr-opt": true, + "pcid": false, + "sse4-1": true, + "sse4-2": true, + "avx512-vpopcntdq": false, + "avx512-4fmaps": false, + "pause_filter": false, + "svm-lock": false, + "rdrand": false, + "nrip-save": true, + "avx512vl": false, + "x2apic": true, + "kvmclock": true, + "pge": true, + "family": 21, + "dtes64": false, + "xd": true, + "kvm_pv_eoi": true, + "ace2": false, + "kvm_pv_unhalt": true, + "xtpr": false, + "perfctr_nb": false, + "avx512bw": false, + "nx": true, + "lwp": false, + "msr": true, + "ace2-en": false, + "decodeassists": false, + "perfctr-core": false, + "pn": false, + "fma": true, + "nodeid-msr": false, + "kvm_asyncpf": true, + "clflush": true, + "cx8": true, + "mce": true, + "avx512cd": false, + "cr8legacy": true, + "mca": true, + "pni": true, + "rdseed": false, + "apic": true, + "fsgsbase": false, + "cmp-legacy": true, + "kvm-pv-unhalt": true, + "rdtscp": false, + "mmxext": true, + "cid": false, + "ssse3": true, + "extapic": false, + "pse36": true, + "mtrr": true, + "ibs": false, + "la57": false, + "avx": true, + "syscall": true, + "umip": false, + "invpcid": false, + "avx512vbmi": false, + "kvm-asyncpf": true, + "vmcb-clean": false, + "pmm": false, + "cmov": true, + "perfctr_core": false, + "misalignsse": true, + "clflushopt": false, + "pat": true, + "lbrv": false, + "3dnowprefetch": true, + "fpu": true, + "pae": true, + "wdt": false, + "tsc_scale": false, + "skinit": false, + "fxsr_opt": true, + "kvm_nopiodelay": true, + "pmm-en": false, + "phe": false, + "3dnowext": false, + "osvw": true, + "ht": false, + "pdpe1gb": true, + "kvm-pv-eoi": true, + "npt": true, + "xsavec": false, + "lahf_lm": true, + "pclmulqdq": true, + "svm": false, + "sse3": true, + "sse2": true, + "ss": false, + "topoext": false, + "smx": false, + "bmi1": true, + "bmi2": false, + "xsaves": false, + "model": 16 + } + } + }, + "id": "model-expansion" +} diff --git a/tests/cputestdata/x86_64-cpuid-Core-i5-2500.json.new b/tests/cputestdata/x86_64-cpuid-Core-i5-2500.json.new new file mode 100644 index 000000000..e98e40d3a --- /dev/null +++ b/tests/cputestdata/x86_64-cpuid-Core-i5-2500.json.new @@ -0,0 +1,203 @@ +{ + "return": { + "model": { + "name": "base", + "props": { + "pfthreshold": false, + "pku": false, + "rtm": false, + "tsc_adjust": true, + "tsc-deadline": true, + "xstore-en": false, + "tsc-scale": false, + "sse": true, + "smap": false, + "stepping": 7, + "tce": false, + "kvm_steal_time": true, + "smep": false, + "rdpid": false, + "xcrypt": false, + "sse4_2": true, + "monitor": false, + "sse4_1": true, + "kvm-mmu": false, + "flushbyasid": false, + "kvm-steal-time": true, + "lm": true, + "tsc": true, + "adx": false, + "fxsr": true, + "sha-ni": false, + "tm": false, + "pclmuldq": true, + "xgetbv1": false, + "xstore": false, + "vmcb_clean": false, + "vme": true, + "vendor": "GenuineIntel", + "arat": true, + "ffxsr": false, + "de": true, + "avx512f": false, + "pse": true, + "ds-cpl": false, + "tbm": false, + "ia64": false, + "phe-en": false, + "f16c": false, + "ds": false, + "mpx": false, + "tsc-adjust": true, + "aes": true, + "avx2": false, + "pbe": false, + "cx16": true, + "ds_cpl": false, + "movbe": false, + "perfctr-nb": false, + "nrip_save": false, + "kvm_mmu": false, + "ospke": false, + "avx512ifma": false, + "vmx": false, + "sep": true, + "xsaveopt": true, + "sse4a": false, + "avx512dq": false, + "i64": true, + "avx512-4vnniw": false, + "xsave": true, + "erms": false, + "hle": false, + "nodeid_msr": false, + "est": false, + "svm_lock": false, + "xop": false, + "model-id": " Intel(R) Core(TM) i5-2500 CPU @ 3.30GHz", + "abm": false, + "avx512er": false, + "sse4.1": true, + "sse4.2": true, + "pause-filter": false, + "lahf-lm": true, + "kvm-nopiodelay": true, + "cmp_legacy": false, + "acpi": false, + "fma4": false, + "popcnt": true, + "mmx": true, + "osxsave": false, + "pcommit": false, + "avx512pf": false, + "clwb": false, + "dca": false, + "pdcm": false, + "xcrypt-en": false, + "3dnow": false, + "invtsc": false, + "tm2": false, + "hypervisor": true, + "kvmclock-stable-bit": true, + "fxsr-opt": false, + "pcid": true, + "sse4-1": true, + "sse4-2": true, + "avx512-vpopcntdq": false, + "avx512-4fmaps": false, + "pause_filter": false, + "svm-lock": false, + "rdrand": false, + "nrip-save": false, + "avx512vl": false, + "x2apic": true, + "kvmclock": true, + "pge": true, + "family": 6, + "dtes64": false, + "xd": true, + "kvm_pv_eoi": true, + "ace2": false, + "kvm_pv_unhalt": true, + "xtpr": false, + "perfctr_nb": false, + "avx512bw": false, + "nx": true, + "lwp": false, + "msr": true, + "ace2-en": false, + "decodeassists": false, + "perfctr-core": false, + "pn": false, + "fma": false, + "nodeid-msr": false, + "kvm_asyncpf": true, + "clflush": true, + "cx8": true, + "mce": true, + "avx512cd": false, + "cr8legacy": false, + "mca": true, + "pni": true, + "rdseed": false, + "apic": true, + "fsgsbase": false, + "cmp-legacy": false, + "kvm-pv-unhalt": true, + "rdtscp": true, + "mmxext": false, + "cid": false, + "ssse3": true, + "extapic": false, + "pse36": true, + "mtrr": true, + "ibs": false, + "la57": false, + "avx": true, + "syscall": true, + "umip": false, + "invpcid": false, + "avx512vbmi": false, + "kvm-asyncpf": true, + "vmcb-clean": false, + "pmm": false, + "cmov": true, + "perfctr_core": false, + "misalignsse": false, + "clflushopt": false, + "pat": true, + "lbrv": false, + "3dnowprefetch": false, + "fpu": true, + "pae": true, + "wdt": false, + "tsc_scale": false, + "skinit": false, + "fxsr_opt": false, + "kvm_nopiodelay": true, + "pmm-en": false, + "phe": false, + "3dnowext": false, + "osvw": false, + "ht": false, + "pdpe1gb": false, + "kvm-pv-eoi": true, + "npt": false, + "xsavec": false, + "lahf_lm": true, + "pclmulqdq": true, + "svm": false, + "sse3": true, + "sse2": true, + "ss": true, + "topoext": false, + "smx": false, + "bmi1": false, + "bmi2": false, + "xsaves": false, + "model": 42 + } + } + }, + "id": "model-expansion" +} diff --git a/tests/cputestdata/x86_64-cpuid-Core-i5-2540M.json.new b/tests/cputestdata/x86_64-cpuid-Core-i5-2540M.json.new new file mode 100644 index 000000000..d813326f6 --- /dev/null +++ b/tests/cputestdata/x86_64-cpuid-Core-i5-2540M.json.new @@ -0,0 +1,203 @@ +{ + "return": { + "model": { + "name": "base", + "props": { + "pfthreshold": false, + "pku": false, + "rtm": false, + "tsc_adjust": true, + "tsc-deadline": true, + "xstore-en": false, + "tsc-scale": false, + "sse": true, + "smap": false, + "stepping": 7, + "tce": false, + "kvm_steal_time": true, + "smep": false, + "rdpid": false, + "xcrypt": false, + "sse4_2": true, + "monitor": false, + "sse4_1": true, + "kvm-mmu": false, + "flushbyasid": false, + "kvm-steal-time": true, + "lm": true, + "tsc": true, + "adx": false, + "fxsr": true, + "sha-ni": false, + "tm": false, + "pclmuldq": true, + "xgetbv1": false, + "xstore": false, + "vmcb_clean": false, + "vme": true, + "vendor": "GenuineIntel", + "arat": true, + "ffxsr": false, + "de": true, + "avx512f": false, + "pse": true, + "ds-cpl": false, + "tbm": false, + "ia64": false, + "phe-en": false, + "f16c": false, + "ds": false, + "mpx": false, + "tsc-adjust": true, + "aes": true, + "avx2": false, + "pbe": false, + "cx16": true, + "ds_cpl": false, + "movbe": false, + "perfctr-nb": false, + "nrip_save": false, + "kvm_mmu": false, + "ospke": false, + "avx512ifma": false, + "vmx": false, + "sep": true, + "xsaveopt": true, + "sse4a": false, + "avx512dq": false, + "i64": true, + "avx512-4vnniw": false, + "xsave": true, + "erms": false, + "hle": false, + "nodeid_msr": false, + "est": false, + "svm_lock": false, + "xop": false, + "model-id": " Intel(R) Core(TM) i5-2540M CPU @ 2.60GHz", + "abm": false, + "avx512er": false, + "sse4.1": true, + "sse4.2": true, + "pause-filter": false, + "lahf-lm": true, + "kvm-nopiodelay": true, + "cmp_legacy": false, + "acpi": false, + "fma4": false, + "popcnt": true, + "mmx": true, + "osxsave": false, + "pcommit": false, + "avx512pf": false, + "clwb": false, + "dca": false, + "pdcm": false, + "xcrypt-en": false, + "3dnow": false, + "invtsc": false, + "tm2": false, + "hypervisor": true, + "kvmclock-stable-bit": true, + "fxsr-opt": false, + "pcid": true, + "sse4-1": true, + "sse4-2": true, + "avx512-vpopcntdq": false, + "avx512-4fmaps": false, + "pause_filter": false, + "svm-lock": false, + "rdrand": false, + "nrip-save": false, + "avx512vl": false, + "x2apic": true, + "kvmclock": true, + "pge": true, + "family": 6, + "dtes64": false, + "xd": true, + "kvm_pv_eoi": true, + "ace2": false, + "kvm_pv_unhalt": true, + "xtpr": false, + "perfctr_nb": false, + "avx512bw": false, + "nx": true, + "lwp": false, + "msr": true, + "ace2-en": false, + "decodeassists": false, + "perfctr-core": false, + "pn": false, + "fma": false, + "nodeid-msr": false, + "kvm_asyncpf": true, + "clflush": true, + "cx8": true, + "mce": true, + "avx512cd": false, + "cr8legacy": false, + "mca": true, + "pni": true, + "rdseed": false, + "apic": true, + "fsgsbase": false, + "cmp-legacy": false, + "kvm-pv-unhalt": true, + "rdtscp": true, + "mmxext": false, + "cid": false, + "ssse3": true, + "extapic": false, + "pse36": true, + "mtrr": true, + "ibs": false, + "la57": false, + "avx": true, + "syscall": true, + "umip": false, + "invpcid": false, + "avx512vbmi": false, + "kvm-asyncpf": true, + "vmcb-clean": false, + "pmm": false, + "cmov": true, + "perfctr_core": false, + "misalignsse": false, + "clflushopt": false, + "pat": true, + "lbrv": false, + "3dnowprefetch": false, + "fpu": true, + "pae": true, + "wdt": false, + "tsc_scale": false, + "skinit": false, + "fxsr_opt": false, + "kvm_nopiodelay": true, + "pmm-en": false, + "phe": false, + "3dnowext": false, + "osvw": false, + "ht": false, + "pdpe1gb": false, + "kvm-pv-eoi": true, + "npt": false, + "xsavec": false, + "lahf_lm": true, + "pclmulqdq": true, + "svm": false, + "sse3": true, + "sse2": true, + "ss": true, + "topoext": false, + "smx": false, + "bmi1": false, + "bmi2": false, + "xsaves": false, + "model": 42 + } + } + }, + "id": "model-expansion" +} diff --git a/tests/cputestdata/x86_64-cpuid-Core-i5-4670T.json.new b/tests/cputestdata/x86_64-cpuid-Core-i5-4670T.json.new new file mode 100644 index 000000000..bfcfcfd46 --- /dev/null +++ b/tests/cputestdata/x86_64-cpuid-Core-i5-4670T.json.new @@ -0,0 +1,203 @@ +{ + "return": { + "model": { + "name": "base", + "props": { + "pfthreshold": false, + "pku": false, + "rtm": true, + "tsc_adjust": true, + "tsc-deadline": true, + "xstore-en": false, + "tsc-scale": false, + "sse": true, + "smap": false, + "stepping": 3, + "tce": false, + "kvm_steal_time": true, + "smep": true, + "rdpid": false, + "xcrypt": false, + "sse4_2": true, + "monitor": false, + "sse4_1": true, + "kvm-mmu": false, + "flushbyasid": false, + "kvm-steal-time": true, + "lm": true, + "tsc": true, + "adx": false, + "fxsr": true, + "sha-ni": false, + "tm": false, + "pclmuldq": true, + "xgetbv1": false, + "xstore": false, + "vmcb_clean": false, + "vme": true, + "vendor": "GenuineIntel", + "arat": false, + "ffxsr": false, + "de": true, + "avx512f": false, + "pse": true, + "ds-cpl": false, + "tbm": false, + "ia64": false, + "phe-en": false, + "f16c": true, + "ds": false, + "mpx": false, + "tsc-adjust": true, + "aes": true, + "avx2": true, + "pbe": false, + "cx16": true, + "ds_cpl": false, + "movbe": true, + "perfctr-nb": false, + "nrip_save": false, + "kvm_mmu": false, + "ospke": false, + "avx512ifma": false, + "vmx": true, + "sep": true, + "xsaveopt": true, + "sse4a": false, + "avx512dq": false, + "i64": true, + "avx512-4vnniw": false, + "xsave": true, + "erms": true, + "hle": true, + "nodeid_msr": false, + "est": false, + "svm_lock": false, + "xop": false, + "model-id": "Intel(R) Core(TM) i5-4670T CPU @ 2.30GHz", + "abm": true, + "avx512er": false, + "sse4.1": true, + "sse4.2": true, + "pause-filter": false, + "lahf-lm": true, + "kvm-nopiodelay": true, + "cmp_legacy": false, + "acpi": false, + "fma4": false, + "popcnt": true, + "mmx": true, + "osxsave": false, + "pcommit": false, + "avx512pf": false, + "clwb": false, + "dca": false, + "pdcm": false, + "xcrypt-en": false, + "3dnow": false, + "invtsc": false, + "tm2": false, + "hypervisor": true, + "kvmclock-stable-bit": true, + "fxsr-opt": false, + "pcid": true, + "sse4-1": true, + "sse4-2": true, + "avx512-vpopcntdq": false, + "avx512-4fmaps": false, + "pause_filter": false, + "svm-lock": false, + "rdrand": true, + "nrip-save": false, + "avx512vl": false, + "x2apic": true, + "kvmclock": true, + "pge": true, + "family": 6, + "dtes64": false, + "xd": true, + "kvm_pv_eoi": true, + "ace2": false, + "kvm_pv_unhalt": true, + "xtpr": false, + "perfctr_nb": false, + "avx512bw": false, + "nx": true, + "lwp": false, + "msr": true, + "ace2-en": false, + "decodeassists": false, + "perfctr-core": false, + "pn": false, + "fma": true, + "nodeid-msr": false, + "kvm_asyncpf": true, + "clflush": true, + "cx8": true, + "mce": true, + "avx512cd": false, + "cr8legacy": false, + "mca": true, + "pni": true, + "rdseed": false, + "apic": true, + "fsgsbase": true, + "cmp-legacy": false, + "kvm-pv-unhalt": true, + "rdtscp": true, + "mmxext": false, + "cid": false, + "ssse3": true, + "extapic": false, + "pse36": true, + "mtrr": true, + "ibs": false, + "la57": false, + "avx": true, + "syscall": true, + "umip": false, + "invpcid": true, + "avx512vbmi": false, + "kvm-asyncpf": true, + "vmcb-clean": false, + "pmm": false, + "cmov": true, + "perfctr_core": false, + "misalignsse": false, + "clflushopt": false, + "pat": true, + "lbrv": false, + "3dnowprefetch": false, + "fpu": true, + "pae": true, + "wdt": false, + "tsc_scale": false, + "skinit": false, + "fxsr_opt": false, + "kvm_nopiodelay": true, + "pmm-en": false, + "phe": false, + "3dnowext": false, + "osvw": false, + "ht": false, + "pdpe1gb": true, + "kvm-pv-eoi": true, + "npt": false, + "xsavec": false, + "lahf_lm": true, + "pclmulqdq": true, + "svm": false, + "sse3": true, + "sse2": true, + "ss": true, + "topoext": false, + "smx": false, + "bmi1": true, + "bmi2": true, + "xsaves": false, + "model": 60 + } + } + }, + "id": "model-expansion" +} diff --git a/tests/cputestdata/x86_64-cpuid-Core-i5-6600.json.new b/tests/cputestdata/x86_64-cpuid-Core-i5-6600.json.new new file mode 100644 index 000000000..3bb7feea1 --- /dev/null +++ b/tests/cputestdata/x86_64-cpuid-Core-i5-6600.json.new @@ -0,0 +1,203 @@ +{ + "return": { + "model": { + "name": "base", + "props": { + "pfthreshold": false, + "pku": false, + "rtm": true, + "tsc_adjust": true, + "tsc-deadline": true, + "xstore-en": false, + "tsc-scale": false, + "sse": true, + "smap": true, + "stepping": 3, + "tce": false, + "kvm_steal_time": true, + "smep": true, + "rdpid": false, + "xcrypt": false, + "sse4_2": true, + "monitor": false, + "sse4_1": true, + "kvm-mmu": false, + "flushbyasid": false, + "kvm-steal-time": true, + "lm": true, + "tsc": true, + "adx": true, + "fxsr": true, + "sha-ni": false, + "tm": false, + "pclmuldq": true, + "xgetbv1": true, + "xstore": false, + "vmcb_clean": false, + "vme": true, + "vendor": "GenuineIntel", + "arat": true, + "ffxsr": false, + "de": true, + "avx512f": false, + "pse": true, + "ds-cpl": false, + "tbm": false, + "ia64": false, + "phe-en": false, + "f16c": true, + "ds": false, + "mpx": true, + "tsc-adjust": true, + "aes": true, + "avx2": true, + "pbe": false, + "cx16": true, + "ds_cpl": false, + "movbe": true, + "perfctr-nb": false, + "nrip_save": false, + "kvm_mmu": false, + "ospke": false, + "avx512ifma": false, + "vmx": false, + "sep": true, + "xsaveopt": true, + "sse4a": false, + "avx512dq": false, + "i64": true, + "avx512-4vnniw": false, + "xsave": true, + "erms": true, + "hle": true, + "nodeid_msr": false, + "est": false, + "svm_lock": false, + "xop": false, + "model-id": "Intel(R) Core(TM) i5-6600 CPU @ 3.30GHz", + "abm": true, + "avx512er": false, + "sse4.1": true, + "sse4.2": true, + "pause-filter": false, + "lahf-lm": true, + "kvm-nopiodelay": true, + "cmp_legacy": false, + "acpi": false, + "fma4": false, + "popcnt": true, + "mmx": true, + "osxsave": false, + "pcommit": false, + "avx512pf": false, + "clwb": false, + "dca": false, + "pdcm": false, + "xcrypt-en": false, + "3dnow": false, + "invtsc": false, + "tm2": false, + "hypervisor": true, + "kvmclock-stable-bit": true, + "fxsr-opt": false, + "pcid": true, + "sse4-1": true, + "sse4-2": true, + "avx512-vpopcntdq": false, + "avx512-4fmaps": false, + "pause_filter": false, + "svm-lock": false, + "rdrand": true, + "nrip-save": false, + "avx512vl": false, + "x2apic": true, + "kvmclock": true, + "pge": true, + "family": 6, + "dtes64": false, + "xd": true, + "kvm_pv_eoi": true, + "ace2": false, + "kvm_pv_unhalt": true, + "xtpr": false, + "perfctr_nb": false, + "avx512bw": false, + "nx": true, + "lwp": false, + "msr": true, + "ace2-en": false, + "decodeassists": false, + "perfctr-core": false, + "pn": false, + "fma": true, + "nodeid-msr": false, + "kvm_asyncpf": true, + "clflush": true, + "cx8": true, + "mce": true, + "avx512cd": false, + "cr8legacy": false, + "mca": true, + "pni": true, + "rdseed": true, + "apic": true, + "fsgsbase": true, + "cmp-legacy": false, + "kvm-pv-unhalt": true, + "rdtscp": true, + "mmxext": false, + "cid": false, + "ssse3": true, + "extapic": false, + "pse36": true, + "mtrr": true, + "ibs": false, + "la57": false, + "avx": true, + "syscall": true, + "umip": false, + "invpcid": true, + "avx512vbmi": false, + "kvm-asyncpf": true, + "vmcb-clean": false, + "pmm": false, + "cmov": true, + "perfctr_core": false, + "misalignsse": false, + "clflushopt": true, + "pat": true, + "lbrv": false, + "3dnowprefetch": true, + "fpu": true, + "pae": true, + "wdt": false, + "tsc_scale": false, + "skinit": false, + "fxsr_opt": false, + "kvm_nopiodelay": true, + "pmm-en": false, + "phe": false, + "3dnowext": false, + "osvw": false, + "ht": false, + "pdpe1gb": true, + "kvm-pv-eoi": true, + "npt": false, + "xsavec": true, + "lahf_lm": true, + "pclmulqdq": true, + "svm": false, + "sse3": true, + "sse2": true, + "ss": true, + "topoext": false, + "smx": false, + "bmi1": true, + "bmi2": true, + "xsaves": true, + "model": 94 + } + } + }, + "id": "model-expansion" +} diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-2600.json.new b/tests/cputestdata/x86_64-cpuid-Core-i7-2600.json.new new file mode 100644 index 000000000..19c448c10 --- /dev/null +++ b/tests/cputestdata/x86_64-cpuid-Core-i7-2600.json.new @@ -0,0 +1,203 @@ +{ + "return": { + "model": { + "name": "base", + "props": { + "pfthreshold": false, + "pku": false, + "rtm": false, + "tsc_adjust": true, + "tsc-deadline": true, + "xstore-en": false, + "tsc-scale": false, + "sse": true, + "smap": false, + "stepping": 7, + "tce": false, + "kvm_steal_time": true, + "smep": false, + "rdpid": false, + "xcrypt": false, + "sse4_2": true, + "monitor": false, + "sse4_1": true, + "kvm-mmu": false, + "flushbyasid": false, + "kvm-steal-time": true, + "lm": true, + "tsc": true, + "adx": false, + "fxsr": true, + "sha-ni": false, + "tm": false, + "pclmuldq": true, + "xgetbv1": false, + "xstore": false, + "vmcb_clean": false, + "vme": true, + "vendor": "GenuineIntel", + "arat": false, + "ffxsr": false, + "de": true, + "avx512f": false, + "pse": true, + "ds-cpl": false, + "tbm": false, + "ia64": false, + "phe-en": false, + "f16c": false, + "ds": false, + "mpx": false, + "tsc-adjust": true, + "aes": true, + "avx2": false, + "pbe": false, + "cx16": true, + "ds_cpl": false, + "movbe": false, + "perfctr-nb": false, + "nrip_save": false, + "kvm_mmu": false, + "ospke": false, + "avx512ifma": false, + "vmx": false, + "sep": true, + "xsaveopt": true, + "sse4a": false, + "avx512dq": false, + "i64": true, + "avx512-4vnniw": false, + "xsave": true, + "erms": false, + "hle": false, + "nodeid_msr": false, + "est": false, + "svm_lock": false, + "xop": false, + "model-id": " Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz", + "abm": false, + "avx512er": false, + "sse4.1": true, + "sse4.2": true, + "pause-filter": false, + "lahf-lm": true, + "kvm-nopiodelay": true, + "cmp_legacy": false, + "acpi": false, + "fma4": false, + "popcnt": true, + "mmx": true, + "osxsave": false, + "pcommit": false, + "avx512pf": false, + "clwb": false, + "dca": false, + "pdcm": false, + "xcrypt-en": false, + "3dnow": false, + "invtsc": false, + "tm2": false, + "hypervisor": true, + "kvmclock-stable-bit": true, + "fxsr-opt": false, + "pcid": true, + "sse4-1": true, + "sse4-2": true, + "avx512-vpopcntdq": false, + "avx512-4fmaps": false, + "pause_filter": false, + "svm-lock": false, + "rdrand": false, + "nrip-save": false, + "avx512vl": false, + "x2apic": true, + "kvmclock": true, + "pge": true, + "family": 6, + "dtes64": false, + "xd": true, + "kvm_pv_eoi": true, + "ace2": false, + "kvm_pv_unhalt": true, + "xtpr": false, + "perfctr_nb": false, + "avx512bw": false, + "nx": true, + "lwp": false, + "msr": true, + "ace2-en": false, + "decodeassists": false, + "perfctr-core": false, + "pn": false, + "fma": false, + "nodeid-msr": false, + "kvm_asyncpf": true, + "clflush": true, + "cx8": true, + "mce": true, + "avx512cd": false, + "cr8legacy": false, + "mca": true, + "pni": true, + "rdseed": false, + "apic": true, + "fsgsbase": false, + "cmp-legacy": false, + "kvm-pv-unhalt": true, + "rdtscp": true, + "mmxext": false, + "cid": false, + "ssse3": true, + "extapic": false, + "pse36": true, + "mtrr": true, + "ibs": false, + "la57": false, + "avx": true, + "syscall": true, + "umip": false, + "invpcid": false, + "avx512vbmi": false, + "kvm-asyncpf": true, + "vmcb-clean": false, + "pmm": false, + "cmov": true, + "perfctr_core": false, + "misalignsse": false, + "clflushopt": false, + "pat": true, + "lbrv": false, + "3dnowprefetch": false, + "fpu": true, + "pae": true, + "wdt": false, + "tsc_scale": false, + "skinit": false, + "fxsr_opt": false, + "kvm_nopiodelay": true, + "pmm-en": false, + "phe": false, + "3dnowext": false, + "osvw": false, + "ht": false, + "pdpe1gb": false, + "kvm-pv-eoi": true, + "npt": false, + "xsavec": false, + "lahf_lm": true, + "pclmulqdq": true, + "svm": false, + "sse3": true, + "sse2": true, + "ss": true, + "topoext": false, + "smx": false, + "bmi1": false, + "bmi2": false, + "xsaves": false, + "model": 42 + } + } + }, + "id": "model-expansion" +} diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-3740QM.json.new b/tests/cputestdata/x86_64-cpuid-Core-i7-3740QM.json.new new file mode 100644 index 000000000..2b50b3da4 --- /dev/null +++ b/tests/cputestdata/x86_64-cpuid-Core-i7-3740QM.json.new @@ -0,0 +1,203 @@ +{ + "return": { + "model": { + "name": "base", + "props": { + "pfthreshold": false, + "pku": false, + "rtm": false, + "tsc_adjust": true, + "tsc-deadline": true, + "xstore-en": false, + "tsc-scale": false, + "sse": true, + "smap": false, + "stepping": 9, + "tce": false, + "kvm_steal_time": true, + "smep": true, + "rdpid": false, + "xcrypt": false, + "sse4_2": true, + "monitor": false, + "sse4_1": true, + "kvm-mmu": false, + "flushbyasid": false, + "kvm-steal-time": true, + "lm": true, + "tsc": true, + "adx": false, + "fxsr": true, + "sha-ni": false, + "tm": false, + "pclmuldq": true, + "xgetbv1": false, + "xstore": false, + "vmcb_clean": false, + "vme": true, + "vendor": "GenuineIntel", + "arat": false, + "ffxsr": false, + "de": true, + "avx512f": false, + "pse": true, + "ds-cpl": false, + "tbm": false, + "ia64": false, + "phe-en": false, + "f16c": true, + "ds": false, + "mpx": false, + "tsc-adjust": true, + "aes": true, + "avx2": false, + "pbe": false, + "cx16": true, + "ds_cpl": false, + "movbe": false, + "perfctr-nb": false, + "nrip_save": false, + "kvm_mmu": false, + "ospke": false, + "avx512ifma": false, + "vmx": true, + "sep": true, + "xsaveopt": true, + "sse4a": false, + "avx512dq": false, + "i64": true, + "avx512-4vnniw": false, + "xsave": true, + "erms": true, + "hle": false, + "nodeid_msr": false, + "est": false, + "svm_lock": false, + "xop": false, + "model-id": " Intel(R) Core(TM) i7-3740QM CPU @ 2.70GHz", + "abm": false, + "avx512er": false, + "sse4.1": true, + "sse4.2": true, + "pause-filter": false, + "lahf-lm": true, + "kvm-nopiodelay": true, + "cmp_legacy": false, + "acpi": false, + "fma4": false, + "popcnt": true, + "mmx": true, + "osxsave": false, + "pcommit": false, + "avx512pf": false, + "clwb": false, + "dca": false, + "pdcm": false, + "xcrypt-en": false, + "3dnow": false, + "invtsc": false, + "tm2": false, + "hypervisor": true, + "kvmclock-stable-bit": true, + "fxsr-opt": false, + "pcid": true, + "sse4-1": true, + "sse4-2": true, + "avx512-vpopcntdq": false, + "avx512-4fmaps": false, + "pause_filter": false, + "svm-lock": false, + "rdrand": true, + "nrip-save": false, + "avx512vl": false, + "x2apic": true, + "kvmclock": true, + "pge": true, + "family": 6, + "dtes64": false, + "xd": true, + "kvm_pv_eoi": true, + "ace2": false, + "kvm_pv_unhalt": true, + "xtpr": false, + "perfctr_nb": false, + "avx512bw": false, + "nx": true, + "lwp": false, + "msr": true, + "ace2-en": false, + "decodeassists": false, + "perfctr-core": false, + "pn": false, + "fma": false, + "nodeid-msr": false, + "kvm_asyncpf": true, + "clflush": true, + "cx8": true, + "mce": true, + "avx512cd": false, + "cr8legacy": false, + "mca": true, + "pni": true, + "rdseed": false, + "apic": true, + "fsgsbase": true, + "cmp-legacy": false, + "kvm-pv-unhalt": true, + "rdtscp": true, + "mmxext": false, + "cid": false, + "ssse3": true, + "extapic": false, + "pse36": true, + "mtrr": true, + "ibs": false, + "la57": false, + "avx": true, + "syscall": true, + "umip": false, + "invpcid": false, + "avx512vbmi": false, + "kvm-asyncpf": true, + "vmcb-clean": false, + "pmm": false, + "cmov": true, + "perfctr_core": false, + "misalignsse": false, + "clflushopt": false, + "pat": true, + "lbrv": false, + "3dnowprefetch": false, + "fpu": true, + "pae": true, + "wdt": false, + "tsc_scale": false, + "skinit": false, + "fxsr_opt": false, + "kvm_nopiodelay": true, + "pmm-en": false, + "phe": false, + "3dnowext": false, + "osvw": false, + "ht": false, + "pdpe1gb": false, + "kvm-pv-eoi": true, + "npt": false, + "xsavec": false, + "lahf_lm": true, + "pclmulqdq": true, + "svm": false, + "sse3": true, + "sse2": true, + "ss": true, + "topoext": false, + "smx": false, + "bmi1": false, + "bmi2": false, + "xsaves": false, + "model": 58 + } + } + }, + "id": "model-expansion" +} diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-3770.json.new b/tests/cputestdata/x86_64-cpuid-Core-i7-3770.json.new new file mode 100644 index 000000000..b0a8e8b1c --- /dev/null +++ b/tests/cputestdata/x86_64-cpuid-Core-i7-3770.json.new @@ -0,0 +1,203 @@ +{ + "return": { + "model": { + "name": "base", + "props": { + "pfthreshold": false, + "pku": false, + "rtm": false, + "tsc_adjust": true, + "tsc-deadline": true, + "xstore-en": false, + "tsc-scale": false, + "sse": true, + "smap": false, + "stepping": 9, + "tce": false, + "kvm_steal_time": true, + "smep": true, + "rdpid": false, + "xcrypt": false, + "sse4_2": true, + "monitor": false, + "sse4_1": true, + "kvm-mmu": false, + "flushbyasid": false, + "kvm-steal-time": true, + "lm": true, + "tsc": true, + "adx": false, + "fxsr": true, + "sha-ni": false, + "tm": false, + "pclmuldq": true, + "xgetbv1": false, + "xstore": false, + "vmcb_clean": false, + "vme": true, + "vendor": "GenuineIntel", + "arat": false, + "ffxsr": false, + "de": true, + "avx512f": false, + "pse": true, + "ds-cpl": false, + "tbm": false, + "ia64": false, + "phe-en": false, + "f16c": true, + "ds": false, + "mpx": false, + "tsc-adjust": true, + "aes": true, + "avx2": false, + "pbe": false, + "cx16": true, + "ds_cpl": false, + "movbe": false, + "perfctr-nb": false, + "nrip_save": false, + "kvm_mmu": false, + "ospke": false, + "avx512ifma": false, + "vmx": false, + "sep": true, + "xsaveopt": true, + "sse4a": false, + "avx512dq": false, + "i64": true, + "avx512-4vnniw": false, + "xsave": true, + "erms": true, + "hle": false, + "nodeid_msr": false, + "est": false, + "svm_lock": false, + "xop": false, + "model-id": " Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz", + "abm": false, + "avx512er": false, + "sse4.1": true, + "sse4.2": true, + "pause-filter": false, + "lahf-lm": true, + "kvm-nopiodelay": true, + "cmp_legacy": false, + "acpi": false, + "fma4": false, + "popcnt": true, + "mmx": true, + "osxsave": false, + "pcommit": false, + "avx512pf": false, + "clwb": false, + "dca": false, + "pdcm": false, + "xcrypt-en": false, + "3dnow": false, + "invtsc": false, + "tm2": false, + "hypervisor": true, + "kvmclock-stable-bit": true, + "fxsr-opt": false, + "pcid": true, + "sse4-1": true, + "sse4-2": true, + "avx512-vpopcntdq": false, + "avx512-4fmaps": false, + "pause_filter": false, + "svm-lock": false, + "rdrand": true, + "nrip-save": false, + "avx512vl": false, + "x2apic": true, + "kvmclock": true, + "pge": true, + "family": 6, + "dtes64": false, + "xd": true, + "kvm_pv_eoi": true, + "ace2": false, + "kvm_pv_unhalt": true, + "xtpr": false, + "perfctr_nb": false, + "avx512bw": false, + "nx": true, + "lwp": false, + "msr": true, + "ace2-en": false, + "decodeassists": false, + "perfctr-core": false, + "pn": false, + "fma": false, + "nodeid-msr": false, + "kvm_asyncpf": true, + "clflush": true, + "cx8": true, + "mce": true, + "avx512cd": false, + "cr8legacy": false, + "mca": true, + "pni": true, + "rdseed": false, + "apic": true, + "fsgsbase": true, + "cmp-legacy": false, + "kvm-pv-unhalt": true, + "rdtscp": true, + "mmxext": false, + "cid": false, + "ssse3": true, + "extapic": false, + "pse36": true, + "mtrr": true, + "ibs": false, + "la57": false, + "avx": true, + "syscall": true, + "umip": false, + "invpcid": false, + "avx512vbmi": false, + "kvm-asyncpf": true, + "vmcb-clean": false, + "pmm": false, + "cmov": true, + "perfctr_core": false, + "misalignsse": false, + "clflushopt": false, + "pat": true, + "lbrv": false, + "3dnowprefetch": false, + "fpu": true, + "pae": true, + "wdt": false, + "tsc_scale": false, + "skinit": false, + "fxsr_opt": false, + "kvm_nopiodelay": true, + "pmm-en": false, + "phe": false, + "3dnowext": false, + "osvw": false, + "ht": false, + "pdpe1gb": false, + "kvm-pv-eoi": true, + "npt": false, + "xsavec": false, + "lahf_lm": true, + "pclmulqdq": true, + "svm": false, + "sse3": true, + "sse2": true, + "ss": true, + "topoext": false, + "smx": false, + "bmi1": false, + "bmi2": false, + "xsaves": false, + "model": 58 + } + } + }, + "id": "model-expansion" +} diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-4600U.json.new b/tests/cputestdata/x86_64-cpuid-Core-i7-4600U.json.new new file mode 100644 index 000000000..1acde0a1e --- /dev/null +++ b/tests/cputestdata/x86_64-cpuid-Core-i7-4600U.json.new @@ -0,0 +1,203 @@ +{ + "return": { + "model": { + "name": "base", + "props": { + "pfthreshold": false, + "pku": false, + "rtm": false, + "tsc_adjust": true, + "tsc-deadline": true, + "xstore-en": false, + "tsc-scale": false, + "sse": true, + "smap": false, + "stepping": 1, + "tce": false, + "kvm_steal_time": true, + "smep": true, + "rdpid": false, + "xcrypt": false, + "sse4_2": true, + "monitor": false, + "sse4_1": true, + "kvm-mmu": false, + "flushbyasid": false, + "kvm-steal-time": true, + "lm": true, + "tsc": true, + "adx": false, + "fxsr": true, + "sha-ni": false, + "tm": false, + "pclmuldq": true, + "xgetbv1": false, + "xstore": false, + "vmcb_clean": false, + "vme": true, + "vendor": "GenuineIntel", + "arat": true, + "ffxsr": false, + "de": true, + "avx512f": false, + "pse": true, + "ds-cpl": false, + "tbm": false, + "ia64": false, + "phe-en": false, + "f16c": true, + "ds": false, + "mpx": false, + "tsc-adjust": true, + "aes": true, + "avx2": true, + "pbe": false, + "cx16": true, + "ds_cpl": false, + "movbe": true, + "perfctr-nb": false, + "nrip_save": false, + "kvm_mmu": false, + "ospke": false, + "avx512ifma": false, + "vmx": true, + "sep": true, + "xsaveopt": true, + "sse4a": false, + "avx512dq": false, + "i64": true, + "avx512-4vnniw": false, + "xsave": true, + "erms": true, + "hle": false, + "nodeid_msr": false, + "est": false, + "svm_lock": false, + "xop": false, + "model-id": "Intel(R) Core(TM) i7-4600U CPU @ 2.10GHz", + "abm": true, + "avx512er": false, + "sse4.1": true, + "sse4.2": true, + "pause-filter": false, + "lahf-lm": true, + "kvm-nopiodelay": true, + "cmp_legacy": false, + "acpi": false, + "fma4": false, + "popcnt": true, + "mmx": true, + "osxsave": false, + "pcommit": false, + "avx512pf": false, + "clwb": false, + "dca": false, + "pdcm": false, + "xcrypt-en": false, + "3dnow": false, + "invtsc": false, + "tm2": false, + "hypervisor": true, + "kvmclock-stable-bit": true, + "fxsr-opt": false, + "pcid": true, + "sse4-1": true, + "sse4-2": true, + "avx512-vpopcntdq": false, + "avx512-4fmaps": false, + "pause_filter": false, + "svm-lock": false, + "rdrand": true, + "nrip-save": false, + "avx512vl": false, + "x2apic": true, + "kvmclock": true, + "pge": true, + "family": 6, + "dtes64": false, + "xd": true, + "kvm_pv_eoi": true, + "ace2": false, + "kvm_pv_unhalt": true, + "xtpr": false, + "perfctr_nb": false, + "avx512bw": false, + "nx": true, + "lwp": false, + "msr": true, + "ace2-en": false, + "decodeassists": false, + "perfctr-core": false, + "pn": false, + "fma": true, + "nodeid-msr": false, + "kvm_asyncpf": true, + "clflush": true, + "cx8": true, + "mce": true, + "avx512cd": false, + "cr8legacy": false, + "mca": true, + "pni": true, + "rdseed": false, + "apic": true, + "fsgsbase": true, + "cmp-legacy": false, + "kvm-pv-unhalt": true, + "rdtscp": true, + "mmxext": false, + "cid": false, + "ssse3": true, + "extapic": false, + "pse36": true, + "mtrr": true, + "ibs": false, + "la57": false, + "avx": true, + "syscall": true, + "umip": false, + "invpcid": true, + "avx512vbmi": false, + "kvm-asyncpf": true, + "vmcb-clean": false, + "pmm": false, + "cmov": true, + "perfctr_core": false, + "misalignsse": false, + "clflushopt": false, + "pat": true, + "lbrv": false, + "3dnowprefetch": false, + "fpu": true, + "pae": true, + "wdt": false, + "tsc_scale": false, + "skinit": false, + "fxsr_opt": false, + "kvm_nopiodelay": true, + "pmm-en": false, + "phe": false, + "3dnowext": false, + "osvw": false, + "ht": false, + "pdpe1gb": true, + "kvm-pv-eoi": true, + "npt": false, + "xsavec": false, + "lahf_lm": true, + "pclmulqdq": true, + "svm": false, + "sse3": true, + "sse2": true, + "ss": true, + "topoext": false, + "smx": false, + "bmi1": true, + "bmi2": true, + "xsaves": false, + "model": 69 + } + } + }, + "id": "model-expansion" +} diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-5600U.json.new b/tests/cputestdata/x86_64-cpuid-Core-i7-5600U.json.new new file mode 100644 index 000000000..a09816078 --- /dev/null +++ b/tests/cputestdata/x86_64-cpuid-Core-i7-5600U.json.new @@ -0,0 +1,203 @@ +{ + "return": { + "model": { + "name": "base", + "props": { + "pfthreshold": false, + "pku": false, + "rtm": true, + "tsc_adjust": true, + "tsc-deadline": true, + "xstore-en": false, + "tsc-scale": false, + "sse": true, + "smap": true, + "stepping": 4, + "tce": false, + "kvm_steal_time": true, + "smep": true, + "rdpid": false, + "xcrypt": false, + "sse4_2": true, + "monitor": false, + "sse4_1": true, + "kvm-mmu": false, + "flushbyasid": false, + "kvm-steal-time": true, + "lm": true, + "tsc": true, + "adx": true, + "fxsr": true, + "sha-ni": false, + "tm": false, + "pclmuldq": true, + "xgetbv1": false, + "xstore": false, + "vmcb_clean": false, + "vme": true, + "vendor": "GenuineIntel", + "arat": true, + "ffxsr": false, + "de": true, + "avx512f": false, + "pse": true, + "ds-cpl": false, + "tbm": false, + "ia64": false, + "phe-en": false, + "f16c": true, + "ds": false, + "mpx": false, + "tsc-adjust": true, + "aes": true, + "avx2": true, + "pbe": false, + "cx16": true, + "ds_cpl": false, + "movbe": true, + "perfctr-nb": false, + "nrip_save": false, + "kvm_mmu": false, + "ospke": false, + "avx512ifma": false, + "vmx": true, + "sep": true, + "xsaveopt": true, + "sse4a": false, + "avx512dq": false, + "i64": true, + "avx512-4vnniw": false, + "xsave": true, + "erms": true, + "hle": true, + "nodeid_msr": false, + "est": false, + "svm_lock": false, + "xop": false, + "model-id": "Intel(R) Core(TM) i7-5600U CPU @ 2.60GHz", + "abm": true, + "avx512er": false, + "sse4.1": true, + "sse4.2": true, + "pause-filter": false, + "lahf-lm": true, + "kvm-nopiodelay": true, + "cmp_legacy": false, + "acpi": false, + "fma4": false, + "popcnt": true, + "mmx": true, + "osxsave": false, + "pcommit": false, + "avx512pf": false, + "clwb": false, + "dca": false, + "pdcm": false, + "xcrypt-en": false, + "3dnow": false, + "invtsc": false, + "tm2": false, + "hypervisor": true, + "kvmclock-stable-bit": true, + "fxsr-opt": false, + "pcid": true, + "sse4-1": true, + "sse4-2": true, + "avx512-vpopcntdq": false, + "avx512-4fmaps": false, + "pause_filter": false, + "svm-lock": false, + "rdrand": true, + "nrip-save": false, + "avx512vl": false, + "x2apic": true, + "kvmclock": true, + "pge": true, + "family": 6, + "dtes64": false, + "xd": true, + "kvm_pv_eoi": true, + "ace2": false, + "kvm_pv_unhalt": true, + "xtpr": false, + "perfctr_nb": false, + "avx512bw": false, + "nx": true, + "lwp": false, + "msr": true, + "ace2-en": false, + "decodeassists": false, + "perfctr-core": false, + "pn": false, + "fma": true, + "nodeid-msr": false, + "kvm_asyncpf": true, + "clflush": true, + "cx8": true, + "mce": true, + "avx512cd": false, + "cr8legacy": false, + "mca": true, + "pni": true, + "rdseed": true, + "apic": true, + "fsgsbase": true, + "cmp-legacy": false, + "kvm-pv-unhalt": true, + "rdtscp": true, + "mmxext": false, + "cid": false, + "ssse3": true, + "extapic": false, + "pse36": true, + "mtrr": true, + "ibs": false, + "la57": false, + "avx": true, + "syscall": true, + "umip": false, + "invpcid": true, + "avx512vbmi": false, + "kvm-asyncpf": true, + "vmcb-clean": false, + "pmm": false, + "cmov": true, + "perfctr_core": false, + "misalignsse": false, + "clflushopt": false, + "pat": true, + "lbrv": false, + "3dnowprefetch": true, + "fpu": true, + "pae": true, + "wdt": false, + "tsc_scale": false, + "skinit": false, + "fxsr_opt": false, + "kvm_nopiodelay": true, + "pmm-en": false, + "phe": false, + "3dnowext": false, + "osvw": false, + "ht": false, + "pdpe1gb": true, + "kvm-pv-eoi": true, + "npt": false, + "xsavec": false, + "lahf_lm": true, + "pclmulqdq": true, + "svm": false, + "sse3": true, + "sse2": true, + "ss": true, + "topoext": false, + "smx": false, + "bmi1": true, + "bmi2": true, + "xsaves": false, + "model": 61 + } + } + }, + "id": "model-expansion" +} diff --git a/tests/cputestdata/x86_64-cpuid-Core2-E6850.json.new b/tests/cputestdata/x86_64-cpuid-Core2-E6850.json.new new file mode 100644 index 000000000..164cffec9 --- /dev/null +++ b/tests/cputestdata/x86_64-cpuid-Core2-E6850.json.new @@ -0,0 +1,203 @@ +{ + "return": { + "model": { + "name": "base", + "props": { + "pfthreshold": false, + "pku": false, + "rtm": false, + "tsc_adjust": true, + "tsc-deadline": true, + "xstore-en": false, + "tsc-scale": false, + "sse": true, + "smap": false, + "stepping": 11, + "tce": false, + "kvm_steal_time": true, + "smep": false, + "rdpid": false, + "xcrypt": false, + "sse4_2": false, + "monitor": false, + "sse4_1": false, + "kvm-mmu": false, + "flushbyasid": false, + "kvm-steal-time": true, + "lm": true, + "tsc": true, + "adx": false, + "fxsr": true, + "sha-ni": false, + "tm": false, + "pclmuldq": false, + "xgetbv1": false, + "xstore": false, + "vmcb_clean": false, + "vme": true, + "vendor": "GenuineIntel", + "arat": false, + "ffxsr": false, + "de": true, + "avx512f": false, + "pse": true, + "ds-cpl": false, + "tbm": false, + "ia64": false, + "phe-en": false, + "f16c": false, + "ds": false, + "mpx": false, + "tsc-adjust": true, + "aes": false, + "avx2": false, + "pbe": false, + "cx16": true, + "ds_cpl": false, + "movbe": false, + "perfctr-nb": false, + "nrip_save": false, + "kvm_mmu": false, + "ospke": false, + "avx512ifma": false, + "vmx": false, + "sep": true, + "xsaveopt": false, + "sse4a": false, + "avx512dq": false, + "i64": true, + "avx512-4vnniw": false, + "xsave": false, + "erms": false, + "hle": false, + "nodeid_msr": false, + "est": false, + "svm_lock": false, + "xop": false, + "model-id": "Intel(R) Core(TM)2 Duo CPU E6850 @ 3.00GHz", + "abm": false, + "avx512er": false, + "sse4.1": false, + "sse4.2": false, + "pause-filter": false, + "lahf-lm": true, + "kvm-nopiodelay": true, + "cmp_legacy": false, + "acpi": false, + "fma4": false, + "popcnt": false, + "mmx": true, + "osxsave": false, + "pcommit": false, + "avx512pf": false, + "clwb": false, + "dca": false, + "pdcm": false, + "xcrypt-en": false, + "3dnow": false, + "invtsc": false, + "tm2": false, + "hypervisor": true, + "kvmclock-stable-bit": true, + "fxsr-opt": false, + "pcid": false, + "sse4-1": false, + "sse4-2": false, + "avx512-vpopcntdq": false, + "avx512-4fmaps": false, + "pause_filter": false, + "svm-lock": false, + "rdrand": false, + "nrip-save": false, + "avx512vl": false, + "x2apic": true, + "kvmclock": true, + "pge": true, + "family": 6, + "dtes64": false, + "xd": true, + "kvm_pv_eoi": true, + "ace2": false, + "kvm_pv_unhalt": true, + "xtpr": false, + "perfctr_nb": false, + "avx512bw": false, + "nx": true, + "lwp": false, + "msr": true, + "ace2-en": false, + "decodeassists": false, + "perfctr-core": false, + "pn": false, + "fma": false, + "nodeid-msr": false, + "kvm_asyncpf": true, + "clflush": true, + "cx8": true, + "mce": true, + "avx512cd": false, + "cr8legacy": false, + "mca": true, + "pni": true, + "rdseed": false, + "apic": true, + "fsgsbase": false, + "cmp-legacy": false, + "kvm-pv-unhalt": true, + "rdtscp": false, + "mmxext": false, + "cid": false, + "ssse3": true, + "extapic": false, + "pse36": true, + "mtrr": true, + "ibs": false, + "la57": false, + "avx": false, + "syscall": true, + "umip": false, + "invpcid": false, + "avx512vbmi": false, + "kvm-asyncpf": true, + "vmcb-clean": false, + "pmm": false, + "cmov": true, + "perfctr_core": false, + "misalignsse": false, + "clflushopt": false, + "pat": true, + "lbrv": false, + "3dnowprefetch": false, + "fpu": true, + "pae": true, + "wdt": false, + "tsc_scale": false, + "skinit": false, + "fxsr_opt": false, + "kvm_nopiodelay": true, + "pmm-en": false, + "phe": false, + "3dnowext": false, + "osvw": false, + "ht": false, + "pdpe1gb": false, + "kvm-pv-eoi": true, + "npt": false, + "xsavec": false, + "lahf_lm": true, + "pclmulqdq": false, + "svm": false, + "sse3": true, + "sse2": true, + "ss": true, + "topoext": false, + "smx": false, + "bmi1": false, + "bmi2": false, + "xsaves": false, + "model": 15 + } + } + }, + "id": "model-expansion" +} diff --git a/tests/cputestdata/x86_64-cpuid-Opteron-2350.json.new b/tests/cputestdata/x86_64-cpuid-Opteron-2350.json.new new file mode 100644 index 000000000..015ef1764 --- /dev/null +++ b/tests/cputestdata/x86_64-cpuid-Opteron-2350.json.new @@ -0,0 +1,203 @@ +{ + "return": { + "model": { + "name": "base", + "props": { + "pfthreshold": false, + "pku": false, + "rtm": false, + "tsc_adjust": false, + "tsc-deadline": true, + "xstore-en": false, + "tsc-scale": false, + "sse": true, + "smap": false, + "stepping": 3, + "tce": false, + "kvm_steal_time": true, + "smep": false, + "rdpid": false, + "xcrypt": false, + "sse4_2": false, + "monitor": false, + "sse4_1": false, + "kvm-mmu": false, + "flushbyasid": false, + "kvm-steal-time": true, + "lm": true, + "tsc": true, + "adx": false, + "fxsr": true, + "sha-ni": false, + "tm": false, + "pclmuldq": false, + "xgetbv1": false, + "xstore": false, + "vmcb_clean": false, + "vme": true, + "vendor": "AuthenticAMD", + "arat": false, + "ffxsr": true, + "de": true, + "avx512f": false, + "pse": true, + "ds-cpl": false, + "tbm": false, + "ia64": false, + "phe-en": false, + "f16c": false, + "ds": false, + "mpx": false, + "tsc-adjust": false, + "aes": false, + "avx2": false, + "pbe": false, + "cx16": true, + "ds_cpl": false, + "movbe": false, + "perfctr-nb": false, + "nrip_save": false, + "kvm_mmu": false, + "ospke": false, + "avx512ifma": false, + "vmx": false, + "sep": true, + "xsaveopt": false, + "sse4a": true, + "avx512dq": false, + "i64": true, + "avx512-4vnniw": false, + "xsave": false, + "erms": false, + "hle": false, + "nodeid_msr": false, + "est": false, + "svm_lock": false, + "xop": false, + "model-id": "Quad-Core AMD Opteron(tm) Processor 2350", + "abm": true, + "avx512er": false, + "sse4.1": false, + "sse4.2": false, + "pause-filter": false, + "lahf-lm": true, + "kvm-nopiodelay": true, + "cmp_legacy": true, + "acpi": false, + "fma4": false, + "popcnt": true, + "mmx": true, + "osxsave": false, + "pcommit": false, + "avx512pf": false, + "clwb": false, + "dca": false, + "pdcm": false, + "xcrypt-en": false, + "3dnow": true, + "invtsc": false, + "tm2": false, + "hypervisor": true, + "kvmclock-stable-bit": true, + "fxsr-opt": true, + "pcid": false, + "sse4-1": false, + "sse4-2": false, + "avx512-vpopcntdq": false, + "avx512-4fmaps": false, + "pause_filter": false, + "svm-lock": false, + "rdrand": false, + "nrip-save": false, + "avx512vl": false, + "x2apic": true, + "kvmclock": true, + "pge": true, + "family": 16, + "dtes64": false, + "xd": true, + "kvm_pv_eoi": true, + "ace2": false, + "kvm_pv_unhalt": true, + "xtpr": false, + "perfctr_nb": false, + "avx512bw": false, + "nx": true, + "lwp": false, + "msr": true, + "ace2-en": false, + "decodeassists": false, + "perfctr-core": false, + "pn": false, + "fma": false, + "nodeid-msr": false, + "kvm_asyncpf": true, + "clflush": true, + "cx8": true, + "mce": true, + "avx512cd": false, + "cr8legacy": true, + "mca": true, + "pni": true, + "rdseed": false, + "apic": true, + "fsgsbase": false, + "cmp-legacy": true, + "kvm-pv-unhalt": true, + "rdtscp": false, + "mmxext": true, + "cid": false, + "ssse3": false, + "extapic": false, + "pse36": true, + "mtrr": true, + "ibs": false, + "la57": false, + "avx": false, + "syscall": true, + "umip": false, + "invpcid": false, + "avx512vbmi": false, + "kvm-asyncpf": true, + "vmcb-clean": false, + "pmm": false, + "cmov": true, + "perfctr_core": false, + "misalignsse": true, + "clflushopt": false, + "pat": true, + "lbrv": false, + "3dnowprefetch": true, + "fpu": true, + "pae": true, + "wdt": false, + "tsc_scale": false, + "skinit": false, + "fxsr_opt": true, + "kvm_nopiodelay": true, + "pmm-en": false, + "phe": false, + "3dnowext": true, + "osvw": true, + "ht": false, + "pdpe1gb": true, + "kvm-pv-eoi": true, + "npt": true, + "xsavec": false, + "lahf_lm": true, + "pclmulqdq": false, + "svm": true, + "sse3": true, + "sse2": true, + "ss": false, + "topoext": false, + "smx": false, + "bmi1": false, + "bmi2": false, + "xsaves": false, + "model": 2 + } + } + }, + "id": "model-expansion" +} diff --git a/tests/cputestdata/x86_64-cpuid-Opteron-6234.json.new b/tests/cputestdata/x86_64-cpuid-Opteron-6234.json.new new file mode 100644 index 000000000..adfdfadde --- /dev/null +++ b/tests/cputestdata/x86_64-cpuid-Opteron-6234.json.new @@ -0,0 +1,203 @@ +{ + "return": { + "model": { + "name": "base", + "props": { + "pfthreshold": false, + "pku": false, + "rtm": false, + "tsc_adjust": true, + "tsc-deadline": true, + "xstore-en": false, + "tsc-scale": false, + "sse": true, + "smap": false, + "stepping": 2, + "tce": false, + "kvm_steal_time": true, + "smep": false, + "rdpid": false, + "xcrypt": false, + "sse4_2": true, + "monitor": false, + "sse4_1": true, + "kvm-mmu": false, + "flushbyasid": false, + "kvm-steal-time": true, + "lm": true, + "tsc": true, + "adx": false, + "fxsr": true, + "sha-ni": false, + "tm": false, + "pclmuldq": true, + "xgetbv1": false, + "xstore": false, + "vmcb_clean": false, + "vme": true, + "vendor": "AuthenticAMD", + "arat": true, + "ffxsr": true, + "de": true, + "avx512f": false, + "pse": true, + "ds-cpl": false, + "tbm": false, + "ia64": false, + "phe-en": false, + "f16c": false, + "ds": false, + "mpx": false, + "tsc-adjust": true, + "aes": true, + "avx2": false, + "pbe": false, + "cx16": true, + "ds_cpl": false, + "movbe": false, + "perfctr-nb": false, + "nrip_save": true, + "kvm_mmu": false, + "ospke": false, + "avx512ifma": false, + "vmx": false, + "sep": true, + "xsaveopt": false, + "sse4a": true, + "avx512dq": false, + "i64": true, + "avx512-4vnniw": false, + "xsave": true, + "erms": false, + "hle": false, + "nodeid_msr": false, + "est": false, + "svm_lock": false, + "xop": true, + "model-id": "AMD Opteron(TM) Processor 6234 ", + "abm": true, + "avx512er": false, + "sse4.1": true, + "sse4.2": true, + "pause-filter": false, + "lahf-lm": true, + "kvm-nopiodelay": true, + "cmp_legacy": true, + "acpi": false, + "fma4": true, + "popcnt": true, + "mmx": true, + "osxsave": false, + "pcommit": false, + "avx512pf": false, + "clwb": false, + "dca": false, + "pdcm": false, + "xcrypt-en": false, + "3dnow": false, + "invtsc": false, + "tm2": false, + "hypervisor": true, + "kvmclock-stable-bit": true, + "fxsr-opt": true, + "pcid": false, + "sse4-1": true, + "sse4-2": true, + "avx512-vpopcntdq": false, + "avx512-4fmaps": false, + "pause_filter": false, + "svm-lock": false, + "rdrand": false, + "nrip-save": true, + "avx512vl": false, + "x2apic": true, + "kvmclock": true, + "pge": true, + "family": 21, + "dtes64": false, + "xd": true, + "kvm_pv_eoi": true, + "ace2": false, + "kvm_pv_unhalt": true, + "xtpr": false, + "perfctr_nb": false, + "avx512bw": false, + "nx": true, + "lwp": false, + "msr": true, + "ace2-en": false, + "decodeassists": false, + "perfctr-core": false, + "pn": false, + "fma": false, + "nodeid-msr": false, + "kvm_asyncpf": true, + "clflush": true, + "cx8": true, + "mce": true, + "avx512cd": false, + "cr8legacy": true, + "mca": true, + "pni": true, + "rdseed": false, + "apic": true, + "fsgsbase": false, + "cmp-legacy": true, + "kvm-pv-unhalt": true, + "rdtscp": false, + "mmxext": true, + "cid": false, + "ssse3": true, + "extapic": false, + "pse36": true, + "mtrr": true, + "ibs": false, + "la57": false, + "avx": true, + "syscall": true, + "umip": false, + "invpcid": false, + "avx512vbmi": false, + "kvm-asyncpf": true, + "vmcb-clean": false, + "pmm": false, + "cmov": true, + "perfctr_core": false, + "misalignsse": true, + "clflushopt": false, + "pat": true, + "lbrv": false, + "3dnowprefetch": true, + "fpu": true, + "pae": true, + "wdt": false, + "tsc_scale": false, + "skinit": false, + "fxsr_opt": true, + "kvm_nopiodelay": true, + "pmm-en": false, + "phe": false, + "3dnowext": false, + "osvw": true, + "ht": false, + "pdpe1gb": true, + "kvm-pv-eoi": true, + "npt": true, + "xsavec": false, + "lahf_lm": true, + "pclmulqdq": true, + "svm": false, + "sse3": true, + "sse2": true, + "ss": false, + "topoext": false, + "smx": false, + "bmi1": false, + "bmi2": false, + "xsaves": false, + "model": 1 + } + } + }, + "id": "model-expansion" +} diff --git a/tests/cputestdata/x86_64-cpuid-Phenom-B95.json.new b/tests/cputestdata/x86_64-cpuid-Phenom-B95.json.new new file mode 100644 index 000000000..05e8a444e --- /dev/null +++ b/tests/cputestdata/x86_64-cpuid-Phenom-B95.json.new @@ -0,0 +1,203 @@ +{ + "return": { + "model": { + "name": "base", + "props": { + "pfthreshold": false, + "pku": false, + "rtm": false, + "tsc_adjust": false, + "tsc-deadline": false, + "xstore-en": false, + "tsc-scale": false, + "sse": true, + "smap": false, + "stepping": 2, + "tce": false, + "kvm_steal_time": true, + "smep": false, + "rdpid": false, + "xcrypt": false, + "sse4_2": false, + "monitor": false, + "sse4_1": false, + "kvm-mmu": false, + "flushbyasid": false, + "kvm-steal-time": true, + "lm": true, + "tsc": true, + "adx": false, + "fxsr": true, + "sha-ni": false, + "tm": false, + "pclmuldq": false, + "xgetbv1": false, + "xstore": false, + "vmcb_clean": false, + "vme": true, + "vendor": "AuthenticAMD", + "arat": false, + "ffxsr": true, + "de": true, + "avx512f": false, + "pse": true, + "ds-cpl": false, + "tbm": false, + "ia64": false, + "phe-en": false, + "f16c": false, + "ds": false, + "mpx": false, + "tsc-adjust": false, + "aes": false, + "avx2": false, + "pbe": false, + "cx16": true, + "ds_cpl": false, + "movbe": false, + "perfctr-nb": false, + "nrip_save": true, + "kvm_mmu": false, + "ospke": false, + "avx512ifma": false, + "vmx": false, + "sep": true, + "xsaveopt": false, + "sse4a": true, + "avx512dq": false, + "i64": true, + "avx512-4vnniw": false, + "xsave": false, + "erms": false, + "hle": false, + "nodeid_msr": false, + "est": false, + "svm_lock": false, + "xop": false, + "model-id": "AMD Phenom(tm) II X4 B95 Processor", + "abm": true, + "avx512er": false, + "sse4.1": false, + "sse4.2": false, + "pause-filter": false, + "lahf-lm": true, + "kvm-nopiodelay": true, + "cmp_legacy": true, + "acpi": false, + "fma4": false, + "popcnt": true, + "mmx": true, + "osxsave": false, + "pcommit": false, + "avx512pf": false, + "clwb": false, + "dca": false, + "pdcm": false, + "xcrypt-en": false, + "3dnow": true, + "invtsc": false, + "tm2": false, + "hypervisor": true, + "kvmclock-stable-bit": true, + "fxsr-opt": true, + "pcid": false, + "sse4-1": false, + "sse4-2": false, + "avx512-vpopcntdq": false, + "avx512-4fmaps": false, + "pause_filter": false, + "svm-lock": false, + "rdrand": false, + "nrip-save": true, + "avx512vl": false, + "x2apic": true, + "kvmclock": true, + "pge": true, + "family": 16, + "dtes64": false, + "xd": false, + "kvm_pv_eoi": true, + "ace2": false, + "kvm_pv_unhalt": true, + "xtpr": false, + "perfctr_nb": false, + "avx512bw": false, + "nx": false, + "lwp": false, + "msr": true, + "ace2-en": false, + "decodeassists": false, + "perfctr-core": false, + "pn": false, + "fma": false, + "nodeid-msr": false, + "kvm_asyncpf": true, + "clflush": true, + "cx8": true, + "mce": true, + "avx512cd": false, + "cr8legacy": true, + "mca": true, + "pni": true, + "rdseed": false, + "apic": true, + "fsgsbase": false, + "cmp-legacy": true, + "kvm-pv-unhalt": true, + "rdtscp": false, + "mmxext": true, + "cid": false, + "ssse3": false, + "extapic": false, + "pse36": true, + "mtrr": true, + "ibs": false, + "la57": false, + "avx": false, + "syscall": true, + "umip": false, + "invpcid": false, + "avx512vbmi": false, + "kvm-asyncpf": true, + "vmcb-clean": false, + "pmm": false, + "cmov": true, + "perfctr_core": false, + "misalignsse": true, + "clflushopt": false, + "pat": true, + "lbrv": false, + "3dnowprefetch": true, + "fpu": true, + "pae": true, + "wdt": false, + "tsc_scale": false, + "skinit": false, + "fxsr_opt": true, + "kvm_nopiodelay": true, + "pmm-en": false, + "phe": false, + "3dnowext": true, + "osvw": true, + "ht": false, + "pdpe1gb": true, + "kvm-pv-eoi": true, + "npt": true, + "xsavec": false, + "lahf_lm": true, + "pclmulqdq": false, + "svm": false, + "sse3": true, + "sse2": true, + "ss": false, + "topoext": false, + "smx": false, + "bmi1": false, + "bmi2": false, + "xsaves": false, + "model": 4 + } + } + }, + "id": "model-expansion" +} diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E3-1245.json.new b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1245.json.new new file mode 100644 index 000000000..4828da588 --- /dev/null +++ b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1245.json.new @@ -0,0 +1,203 @@ +{ + "return": { + "model": { + "name": "base", + "props": { + "pfthreshold": false, + "pku": false, + "rtm": true, + "tsc_adjust": true, + "tsc-deadline": true, + "xstore-en": false, + "tsc-scale": false, + "sse": true, + "smap": true, + "stepping": 3, + "tce": false, + "kvm_steal_time": true, + "smep": true, + "rdpid": false, + "xcrypt": false, + "sse4_2": true, + "monitor": false, + "sse4_1": true, + "kvm-mmu": false, + "flushbyasid": false, + "kvm-steal-time": true, + "lm": true, + "tsc": true, + "adx": true, + "fxsr": true, + "sha-ni": false, + "tm": false, + "pclmuldq": true, + "xgetbv1": true, + "xstore": false, + "vmcb_clean": false, + "vme": true, + "vendor": "GenuineIntel", + "arat": true, + "ffxsr": false, + "de": true, + "avx512f": false, + "pse": true, + "ds-cpl": false, + "tbm": false, + "ia64": false, + "phe-en": false, + "f16c": true, + "ds": false, + "mpx": true, + "tsc-adjust": true, + "aes": true, + "avx2": true, + "pbe": false, + "cx16": true, + "ds_cpl": false, + "movbe": true, + "perfctr-nb": false, + "nrip_save": false, + "kvm_mmu": false, + "ospke": false, + "avx512ifma": false, + "vmx": true, + "sep": true, + "xsaveopt": true, + "sse4a": false, + "avx512dq": false, + "i64": true, + "avx512-4vnniw": false, + "xsave": true, + "erms": true, + "hle": true, + "nodeid_msr": false, + "est": false, + "svm_lock": false, + "xop": false, + "model-id": "Intel(R) Xeon(R) CPU E3-1245 v5 @ 3.50GHz", + "abm": true, + "avx512er": false, + "sse4.1": true, + "sse4.2": true, + "pause-filter": false, + "lahf-lm": true, + "kvm-nopiodelay": true, + "cmp_legacy": false, + "acpi": false, + "fma4": false, + "popcnt": true, + "mmx": true, + "osxsave": false, + "pcommit": false, + "avx512pf": false, + "clwb": false, + "dca": false, + "pdcm": false, + "xcrypt-en": false, + "3dnow": false, + "invtsc": false, + "tm2": false, + "hypervisor": true, + "kvmclock-stable-bit": true, + "fxsr-opt": false, + "pcid": true, + "sse4-1": true, + "sse4-2": true, + "avx512-vpopcntdq": false, + "avx512-4fmaps": false, + "pause_filter": false, + "svm-lock": false, + "rdrand": true, + "nrip-save": false, + "avx512vl": false, + "x2apic": true, + "kvmclock": true, + "pge": true, + "family": 6, + "dtes64": false, + "xd": true, + "kvm_pv_eoi": true, + "ace2": false, + "kvm_pv_unhalt": true, + "xtpr": false, + "perfctr_nb": false, + "avx512bw": false, + "nx": true, + "lwp": false, + "msr": true, + "ace2-en": false, + "decodeassists": false, + "perfctr-core": false, + "pn": false, + "fma": true, + "nodeid-msr": false, + "kvm_asyncpf": true, + "clflush": true, + "cx8": true, + "mce": true, + "avx512cd": false, + "cr8legacy": false, + "mca": true, + "pni": true, + "rdseed": true, + "apic": true, + "fsgsbase": true, + "cmp-legacy": false, + "kvm-pv-unhalt": true, + "rdtscp": true, + "mmxext": false, + "cid": false, + "ssse3": true, + "extapic": false, + "pse36": true, + "mtrr": true, + "ibs": false, + "la57": false, + "avx": true, + "syscall": true, + "umip": false, + "invpcid": true, + "avx512vbmi": false, + "kvm-asyncpf": true, + "vmcb-clean": false, + "pmm": false, + "cmov": true, + "perfctr_core": false, + "misalignsse": false, + "clflushopt": true, + "pat": true, + "lbrv": false, + "3dnowprefetch": true, + "fpu": true, + "pae": true, + "wdt": false, + "tsc_scale": false, + "skinit": false, + "fxsr_opt": false, + "kvm_nopiodelay": true, + "pmm-en": false, + "phe": false, + "3dnowext": false, + "osvw": false, + "ht": false, + "pdpe1gb": true, + "kvm-pv-eoi": true, + "npt": false, + "xsavec": true, + "lahf_lm": true, + "pclmulqdq": true, + "svm": false, + "sse3": true, + "sse2": true, + "ss": true, + "topoext": false, + "smx": false, + "bmi1": true, + "bmi2": true, + "xsaves": false, + "model": 94 + } + } + }, + "id": "model-expansion" +} diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E5-2630.json.new b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2630.json.new new file mode 100644 index 000000000..52a52b35e --- /dev/null +++ b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2630.json.new @@ -0,0 +1,203 @@ +{ + "return": { + "model": { + "name": "base", + "props": { + "pfthreshold": false, + "pku": false, + "rtm": false, + "tsc_adjust": true, + "tsc-deadline": true, + "xstore-en": false, + "tsc-scale": false, + "sse": true, + "smap": false, + "stepping": 2, + "tce": false, + "kvm_steal_time": true, + "smep": true, + "rdpid": false, + "xcrypt": false, + "sse4_2": true, + "monitor": false, + "sse4_1": true, + "kvm-mmu": false, + "flushbyasid": false, + "kvm-steal-time": true, + "lm": true, + "tsc": true, + "adx": false, + "fxsr": true, + "sha-ni": false, + "tm": false, + "pclmuldq": true, + "xgetbv1": false, + "xstore": false, + "vmcb_clean": false, + "vme": true, + "vendor": "GenuineIntel", + "arat": false, + "ffxsr": false, + "de": true, + "avx512f": false, + "pse": true, + "ds-cpl": false, + "tbm": false, + "ia64": false, + "phe-en": false, + "f16c": true, + "ds": false, + "mpx": false, + "tsc-adjust": true, + "aes": true, + "avx2": true, + "pbe": false, + "cx16": true, + "ds_cpl": false, + "movbe": true, + "perfctr-nb": false, + "nrip_save": false, + "kvm_mmu": false, + "ospke": false, + "avx512ifma": false, + "vmx": false, + "sep": true, + "xsaveopt": true, + "sse4a": false, + "avx512dq": false, + "i64": true, + "avx512-4vnniw": false, + "xsave": true, + "erms": true, + "hle": false, + "nodeid_msr": false, + "est": false, + "svm_lock": false, + "xop": false, + "model-id": "Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz", + "abm": true, + "avx512er": false, + "sse4.1": true, + "sse4.2": true, + "pause-filter": false, + "lahf-lm": true, + "kvm-nopiodelay": true, + "cmp_legacy": false, + "acpi": false, + "fma4": false, + "popcnt": true, + "mmx": true, + "osxsave": false, + "pcommit": false, + "avx512pf": false, + "clwb": false, + "dca": false, + "pdcm": false, + "xcrypt-en": false, + "3dnow": false, + "invtsc": false, + "tm2": false, + "hypervisor": true, + "kvmclock-stable-bit": true, + "fxsr-opt": false, + "pcid": true, + "sse4-1": true, + "sse4-2": true, + "avx512-vpopcntdq": false, + "avx512-4fmaps": false, + "pause_filter": false, + "svm-lock": false, + "rdrand": true, + "nrip-save": false, + "avx512vl": false, + "x2apic": true, + "kvmclock": true, + "pge": true, + "family": 6, + "dtes64": false, + "xd": true, + "kvm_pv_eoi": true, + "ace2": false, + "kvm_pv_unhalt": true, + "xtpr": false, + "perfctr_nb": false, + "avx512bw": false, + "nx": true, + "lwp": false, + "msr": true, + "ace2-en": false, + "decodeassists": false, + "perfctr-core": false, + "pn": false, + "fma": true, + "nodeid-msr": false, + "kvm_asyncpf": true, + "clflush": true, + "cx8": true, + "mce": true, + "avx512cd": false, + "cr8legacy": false, + "mca": true, + "pni": true, + "rdseed": false, + "apic": true, + "fsgsbase": true, + "cmp-legacy": false, + "kvm-pv-unhalt": true, + "rdtscp": true, + "mmxext": false, + "cid": false, + "ssse3": true, + "extapic": false, + "pse36": true, + "mtrr": true, + "ibs": false, + "la57": false, + "avx": true, + "syscall": true, + "umip": false, + "invpcid": true, + "avx512vbmi": false, + "kvm-asyncpf": true, + "vmcb-clean": false, + "pmm": false, + "cmov": true, + "perfctr_core": false, + "misalignsse": false, + "clflushopt": false, + "pat": true, + "lbrv": false, + "3dnowprefetch": false, + "fpu": true, + "pae": true, + "wdt": false, + "tsc_scale": false, + "skinit": false, + "fxsr_opt": false, + "kvm_nopiodelay": true, + "pmm-en": false, + "phe": false, + "3dnowext": false, + "osvw": false, + "ht": false, + "pdpe1gb": true, + "kvm-pv-eoi": true, + "npt": false, + "xsavec": false, + "lahf_lm": true, + "pclmulqdq": true, + "svm": false, + "sse3": true, + "sse2": true, + "ss": true, + "topoext": false, + "smx": false, + "bmi1": true, + "bmi2": true, + "xsaves": false, + "model": 63 + } + } + }, + "id": "model-expansion" +} diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E5-2650.json.new b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2650.json.new new file mode 100644 index 000000000..bd0ab9ca4 --- /dev/null +++ b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2650.json.new @@ -0,0 +1,203 @@ +{ + "return": { + "model": { + "name": "base", + "props": { + "pfthreshold": false, + "pku": false, + "rtm": false, + "tsc_adjust": false, + "tsc-deadline": true, + "xstore-en": false, + "tsc-scale": false, + "sse": true, + "smap": false, + "stepping": 2, + "tce": false, + "kvm_steal_time": true, + "smep": true, + "rdpid": false, + "xcrypt": false, + "sse4_2": true, + "monitor": false, + "sse4_1": true, + "kvm-mmu": false, + "flushbyasid": false, + "kvm-steal-time": true, + "lm": true, + "tsc": true, + "adx": false, + "fxsr": true, + "sha-ni": false, + "tm": false, + "pclmuldq": true, + "xgetbv1": false, + "xstore": false, + "vmcb_clean": false, + "vme": true, + "vendor": "GenuineIntel", + "arat": false, + "ffxsr": false, + "de": true, + "avx512f": false, + "pse": true, + "ds-cpl": false, + "tbm": false, + "ia64": false, + "phe-en": false, + "f16c": true, + "ds": false, + "mpx": false, + "tsc-adjust": false, + "aes": true, + "avx2": true, + "pbe": false, + "cx16": true, + "ds_cpl": false, + "movbe": true, + "perfctr-nb": false, + "nrip_save": false, + "kvm_mmu": false, + "ospke": false, + "avx512ifma": false, + "vmx": true, + "sep": true, + "xsaveopt": false, + "sse4a": false, + "avx512dq": false, + "i64": true, + "avx512-4vnniw": false, + "xsave": true, + "erms": true, + "hle": false, + "nodeid_msr": false, + "est": false, + "svm_lock": false, + "xop": false, + "model-id": "Intel(R) Xeon(R) CPU E5-2650 v3 @ 2.30GHz", + "abm": true, + "avx512er": false, + "sse4.1": true, + "sse4.2": true, + "pause-filter": false, + "lahf-lm": true, + "kvm-nopiodelay": true, + "cmp_legacy": false, + "acpi": false, + "fma4": false, + "popcnt": true, + "mmx": true, + "osxsave": false, + "pcommit": false, + "avx512pf": false, + "clwb": false, + "dca": false, + "pdcm": false, + "xcrypt-en": false, + "3dnow": false, + "invtsc": false, + "tm2": false, + "hypervisor": true, + "kvmclock-stable-bit": true, + "fxsr-opt": false, + "pcid": true, + "sse4-1": true, + "sse4-2": true, + "avx512-vpopcntdq": false, + "avx512-4fmaps": false, + "pause_filter": false, + "svm-lock": false, + "rdrand": true, + "nrip-save": false, + "avx512vl": false, + "x2apic": true, + "kvmclock": true, + "pge": true, + "family": 6, + "dtes64": false, + "xd": true, + "kvm_pv_eoi": true, + "ace2": false, + "kvm_pv_unhalt": true, + "xtpr": false, + "perfctr_nb": false, + "avx512bw": false, + "nx": true, + "lwp": false, + "msr": true, + "ace2-en": false, + "decodeassists": false, + "perfctr-core": false, + "pn": false, + "fma": true, + "nodeid-msr": false, + "kvm_asyncpf": true, + "clflush": true, + "cx8": true, + "mce": true, + "avx512cd": false, + "cr8legacy": false, + "mca": true, + "pni": true, + "rdseed": false, + "apic": true, + "fsgsbase": true, + "cmp-legacy": false, + "kvm-pv-unhalt": true, + "rdtscp": true, + "mmxext": false, + "cid": false, + "ssse3": true, + "extapic": false, + "pse36": true, + "mtrr": true, + "ibs": false, + "la57": false, + "avx": true, + "syscall": true, + "umip": false, + "invpcid": true, + "avx512vbmi": false, + "kvm-asyncpf": true, + "vmcb-clean": false, + "pmm": false, + "cmov": true, + "perfctr_core": false, + "misalignsse": false, + "clflushopt": false, + "pat": true, + "lbrv": false, + "3dnowprefetch": false, + "fpu": true, + "pae": true, + "wdt": false, + "tsc_scale": false, + "skinit": false, + "fxsr_opt": false, + "kvm_nopiodelay": true, + "pmm-en": false, + "phe": false, + "3dnowext": false, + "osvw": false, + "ht": false, + "pdpe1gb": true, + "kvm-pv-eoi": true, + "npt": false, + "xsavec": false, + "lahf_lm": true, + "pclmulqdq": true, + "svm": false, + "sse3": true, + "sse2": true, + "ss": true, + "topoext": false, + "smx": false, + "bmi1": true, + "bmi2": true, + "xsaves": false, + "model": 63 + } + } + }, + "id": "model-expansion" +} diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E7-4820.json.new b/tests/cputestdata/x86_64-cpuid-Xeon-E7-4820.json.new new file mode 100644 index 000000000..ece950390 --- /dev/null +++ b/tests/cputestdata/x86_64-cpuid-Xeon-E7-4820.json.new @@ -0,0 +1,203 @@ +{ + "return": { + "model": { + "name": "base", + "props": { + "pfthreshold": false, + "pku": false, + "rtm": false, + "tsc_adjust": true, + "tsc-deadline": true, + "xstore-en": false, + "tsc-scale": false, + "sse": true, + "smap": false, + "stepping": 2, + "tce": false, + "kvm_steal_time": true, + "smep": false, + "rdpid": false, + "xcrypt": false, + "sse4_2": true, + "monitor": false, + "sse4_1": true, + "kvm-mmu": false, + "flushbyasid": false, + "kvm-steal-time": true, + "lm": true, + "tsc": true, + "adx": false, + "fxsr": true, + "sha-ni": false, + "tm": false, + "pclmuldq": true, + "xgetbv1": false, + "xstore": false, + "vmcb_clean": false, + "vme": true, + "vendor": "GenuineIntel", + "arat": false, + "ffxsr": false, + "de": true, + "avx512f": false, + "pse": true, + "ds-cpl": false, + "tbm": false, + "ia64": false, + "phe-en": false, + "f16c": false, + "ds": false, + "mpx": false, + "tsc-adjust": true, + "aes": true, + "avx2": false, + "pbe": false, + "cx16": true, + "ds_cpl": false, + "movbe": false, + "perfctr-nb": false, + "nrip_save": false, + "kvm_mmu": false, + "ospke": false, + "avx512ifma": false, + "vmx": false, + "sep": true, + "xsaveopt": false, + "sse4a": false, + "avx512dq": false, + "i64": true, + "avx512-4vnniw": false, + "xsave": false, + "erms": false, + "hle": false, + "nodeid_msr": false, + "est": false, + "svm_lock": false, + "xop": false, + "model-id": " Intel(R) Xeon(R) CPU E7- 4820 @ 2.00GHz", + "abm": false, + "avx512er": false, + "sse4.1": true, + "sse4.2": true, + "pause-filter": false, + "lahf-lm": true, + "kvm-nopiodelay": true, + "cmp_legacy": false, + "acpi": false, + "fma4": false, + "popcnt": true, + "mmx": true, + "osxsave": false, + "pcommit": false, + "avx512pf": false, + "clwb": false, + "dca": false, + "pdcm": false, + "xcrypt-en": false, + "3dnow": false, + "invtsc": false, + "tm2": false, + "hypervisor": true, + "kvmclock-stable-bit": true, + "fxsr-opt": false, + "pcid": true, + "sse4-1": true, + "sse4-2": true, + "avx512-vpopcntdq": false, + "avx512-4fmaps": false, + "pause_filter": false, + "svm-lock": false, + "rdrand": false, + "nrip-save": false, + "avx512vl": false, + "x2apic": true, + "kvmclock": true, + "pge": true, + "family": 6, + "dtes64": false, + "xd": true, + "kvm_pv_eoi": true, + "ace2": false, + "kvm_pv_unhalt": true, + "xtpr": false, + "perfctr_nb": false, + "avx512bw": false, + "nx": true, + "lwp": false, + "msr": true, + "ace2-en": false, + "decodeassists": false, + "perfctr-core": false, + "pn": false, + "fma": false, + "nodeid-msr": false, + "kvm_asyncpf": true, + "clflush": true, + "cx8": true, + "mce": true, + "avx512cd": false, + "cr8legacy": false, + "mca": true, + "pni": true, + "rdseed": false, + "apic": true, + "fsgsbase": false, + "cmp-legacy": false, + "kvm-pv-unhalt": true, + "rdtscp": true, + "mmxext": false, + "cid": false, + "ssse3": true, + "extapic": false, + "pse36": true, + "mtrr": true, + "ibs": false, + "la57": false, + "avx": false, + "syscall": true, + "umip": false, + "invpcid": false, + "avx512vbmi": false, + "kvm-asyncpf": true, + "vmcb-clean": false, + "pmm": false, + "cmov": true, + "perfctr_core": false, + "misalignsse": false, + "clflushopt": false, + "pat": true, + "lbrv": false, + "3dnowprefetch": false, + "fpu": true, + "pae": true, + "wdt": false, + "tsc_scale": false, + "skinit": false, + "fxsr_opt": false, + "kvm_nopiodelay": true, + "pmm-en": false, + "phe": false, + "3dnowext": false, + "osvw": false, + "ht": false, + "pdpe1gb": true, + "kvm-pv-eoi": true, + "npt": false, + "xsavec": false, + "lahf_lm": true, + "pclmulqdq": true, + "svm": false, + "sse3": true, + "sse2": true, + "ss": true, + "topoext": false, + "smx": false, + "bmi1": false, + "bmi2": false, + "xsaves": false, + "model": 47 + } + } + }, + "id": "model-expansion" +} diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-W3520.json.new b/tests/cputestdata/x86_64-cpuid-Xeon-W3520.json.new new file mode 100644 index 000000000..29e28dc00 --- /dev/null +++ b/tests/cputestdata/x86_64-cpuid-Xeon-W3520.json.new @@ -0,0 +1,203 @@ +{ + "return": { + "model": { + "name": "base", + "props": { + "pfthreshold": false, + "pku": false, + "rtm": false, + "tsc_adjust": true, + "tsc-deadline": false, + "xstore-en": false, + "tsc-scale": false, + "sse": true, + "smap": false, + "stepping": 5, + "tce": false, + "kvm_steal_time": true, + "smep": false, + "rdpid": false, + "xcrypt": false, + "sse4_2": true, + "monitor": false, + "sse4_1": true, + "kvm-mmu": false, + "flushbyasid": false, + "kvm-steal-time": true, + "lm": true, + "tsc": true, + "adx": false, + "fxsr": true, + "sha-ni": false, + "tm": false, + "pclmuldq": false, + "xgetbv1": false, + "xstore": false, + "vmcb_clean": false, + "vme": true, + "vendor": "GenuineIntel", + "arat": false, + "ffxsr": false, + "de": true, + "avx512f": false, + "pse": true, + "ds-cpl": false, + "tbm": false, + "ia64": false, + "phe-en": false, + "f16c": false, + "ds": false, + "mpx": false, + "tsc-adjust": true, + "aes": false, + "avx2": false, + "pbe": false, + "cx16": true, + "ds_cpl": false, + "movbe": false, + "perfctr-nb": false, + "nrip_save": false, + "kvm_mmu": false, + "ospke": false, + "avx512ifma": false, + "vmx": false, + "sep": true, + "xsaveopt": false, + "sse4a": false, + "avx512dq": false, + "i64": true, + "avx512-4vnniw": false, + "xsave": false, + "erms": false, + "hle": false, + "nodeid_msr": false, + "est": false, + "svm_lock": false, + "xop": false, + "model-id": "Intel(R) Xeon(R) CPU W3520 @ 2.67GHz", + "abm": false, + "avx512er": false, + "sse4.1": true, + "sse4.2": true, + "pause-filter": false, + "lahf-lm": true, + "kvm-nopiodelay": true, + "cmp_legacy": false, + "acpi": false, + "fma4": false, + "popcnt": true, + "mmx": true, + "osxsave": false, + "pcommit": false, + "avx512pf": false, + "clwb": false, + "dca": false, + "pdcm": false, + "xcrypt-en": false, + "3dnow": false, + "invtsc": false, + "tm2": false, + "hypervisor": true, + "kvmclock-stable-bit": true, + "fxsr-opt": false, + "pcid": false, + "sse4-1": true, + "sse4-2": true, + "avx512-vpopcntdq": false, + "avx512-4fmaps": false, + "pause_filter": false, + "svm-lock": false, + "rdrand": false, + "nrip-save": false, + "avx512vl": false, + "x2apic": true, + "kvmclock": true, + "pge": true, + "family": 6, + "dtes64": false, + "xd": true, + "kvm_pv_eoi": true, + "ace2": false, + "kvm_pv_unhalt": true, + "xtpr": false, + "perfctr_nb": false, + "avx512bw": false, + "nx": true, + "lwp": false, + "msr": true, + "ace2-en": false, + "decodeassists": false, + "perfctr-core": false, + "pn": false, + "fma": false, + "nodeid-msr": false, + "kvm_asyncpf": true, + "clflush": true, + "cx8": true, + "mce": true, + "avx512cd": false, + "cr8legacy": false, + "mca": true, + "pni": true, + "rdseed": false, + "apic": true, + "fsgsbase": false, + "cmp-legacy": false, + "kvm-pv-unhalt": true, + "rdtscp": true, + "mmxext": false, + "cid": false, + "ssse3": true, + "extapic": false, + "pse36": true, + "mtrr": true, + "ibs": false, + "la57": false, + "avx": false, + "syscall": true, + "umip": false, + "invpcid": false, + "avx512vbmi": false, + "kvm-asyncpf": true, + "vmcb-clean": false, + "pmm": false, + "cmov": true, + "perfctr_core": false, + "misalignsse": false, + "clflushopt": false, + "pat": true, + "lbrv": false, + "3dnowprefetch": false, + "fpu": true, + "pae": true, + "wdt": false, + "tsc_scale": false, + "skinit": false, + "fxsr_opt": false, + "kvm_nopiodelay": true, + "pmm-en": false, + "phe": false, + "3dnowext": false, + "osvw": false, + "ht": false, + "pdpe1gb": false, + "kvm-pv-eoi": true, + "npt": false, + "xsavec": false, + "lahf_lm": true, + "pclmulqdq": false, + "svm": false, + "sse3": true, + "sse2": true, + "ss": true, + "topoext": false, + "smx": false, + "bmi1": false, + "bmi2": false, + "xsaves": false, + "model": 26 + } + } + }, + "id": "model-expansion" +} -- 2.11.1

The original test didn't use family/model numbers to make better decisions about the CPU model and thus mis-detected the model in the two cases which are modified in this commit. The detected CPU models now match those obtained from raw CPUID data. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - updated test results to include vendors tests/cputest.c | 28 +++++++++++++++------- tests/cputestdata/x86_64-cpuid-A10-5800K-json.xml | 1 + .../cputestdata/x86_64-cpuid-Core-i5-2500-json.xml | 1 + .../x86_64-cpuid-Core-i5-2540M-json.xml | 1 + .../x86_64-cpuid-Core-i5-4670T-json.xml | 1 + .../cputestdata/x86_64-cpuid-Core-i5-6600-json.xml | 1 + .../cputestdata/x86_64-cpuid-Core-i7-2600-json.xml | 1 + .../x86_64-cpuid-Core-i7-3740QM-json.xml | 1 + .../cputestdata/x86_64-cpuid-Core-i7-3770-json.xml | 1 + .../x86_64-cpuid-Core-i7-4600U-json.xml | 1 + .../x86_64-cpuid-Core-i7-5600U-json.xml | 12 ++++++---- .../cputestdata/x86_64-cpuid-Core2-E6850-json.xml | 5 ++-- .../cputestdata/x86_64-cpuid-Opteron-2350-json.xml | 1 + .../cputestdata/x86_64-cpuid-Opteron-6234-json.xml | 1 + tests/cputestdata/x86_64-cpuid-Phenom-B95-json.xml | 1 + .../cputestdata/x86_64-cpuid-Xeon-E3-1245-json.xml | 1 + .../cputestdata/x86_64-cpuid-Xeon-E5-2630-json.xml | 1 + .../cputestdata/x86_64-cpuid-Xeon-E5-2650-json.xml | 1 + .../cputestdata/x86_64-cpuid-Xeon-E7-4820-json.xml | 1 + tests/cputestdata/x86_64-cpuid-Xeon-W3520-json.xml | 1 + 20 files changed, 48 insertions(+), 14 deletions(-) diff --git a/tests/cputest.c b/tests/cputest.c index c0a816b60..8c16fb95c 100644 --- a/tests/cputest.c +++ b/tests/cputest.c @@ -43,7 +43,9 @@ #if WITH_QEMU && WITH_YAJL # include "testutilsqemu.h" # include "qemumonitortestutils.h" -# include "qemu/qemu_monitor_json.h" +# define __QEMU_CAPSRIV_H_ALLOW__ +# include "qemu/qemu_capspriv.h" +# undef __QEMU_CAPSRIV_H_ALLOW__ #endif #define VIR_FROM_THIS VIR_FROM_CPU @@ -517,14 +519,15 @@ static int cpuTestJSONCPUID(const void *arg) { const struct data *data = arg; - virCPUDataPtr cpuData = NULL; + qemuMonitorCPUModelInfoPtr model = NULL; + virQEMUCapsPtr qemuCaps = NULL; virCPUDefPtr cpu = NULL; qemuMonitorTestPtr testMon = NULL; char *json = NULL; char *result = NULL; int ret = -1; - if (virAsprintf(&json, "%s/cputestdata/%s-cpuid-%s.json", + if (virAsprintf(&json, "%s/cputestdata/%s-cpuid-%s.json.new", abs_srcdir, virArchToString(data->arch), data->host) < 0 || virAsprintf(&result, "cpuid-%s-json", data->host) < 0) goto cleanup; @@ -532,26 +535,35 @@ cpuTestJSONCPUID(const void *arg) if (!(testMon = qemuMonitorTestNewFromFile(json, driver.xmlopt, true))) goto cleanup; - if (qemuMonitorJSONGetCPUx86Data(qemuMonitorTestGetMonitor(testMon), - "feature-words", &cpuData) < 0) + if (qemuMonitorGetCPUModelExpansion(qemuMonitorTestGetMonitor(testMon), + QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC, + "host", &model) < 0) goto cleanup; + if (!(qemuCaps = virQEMUCapsNew())) + goto cleanup; + + virQEMUCapsSetArch(qemuCaps, data->arch); + virQEMUCapsSetCPUModelInfo(qemuCaps, VIR_DOMAIN_VIRT_KVM, model); + model = NULL; + if (VIR_ALLOC(cpu) < 0) goto cleanup; - cpu->arch = cpuData->arch; + cpu->arch = data->arch; cpu->type = VIR_CPU_TYPE_GUEST; cpu->match = VIR_CPU_MATCH_EXACT; cpu->fallback = VIR_CPU_FALLBACK_FORBID; - if (cpuDecode(cpu, cpuData, NULL, 0, NULL) < 0) + if (virQEMUCapsInitCPUModel(qemuCaps, VIR_DOMAIN_VIRT_KVM, cpu) != 0) goto cleanup; ret = cpuTestCompareXML(data->arch, cpu, result, false); cleanup: + qemuMonitorCPUModelInfoFree(model); + virObjectUnref(qemuCaps); qemuMonitorTestFree(testMon); - virCPUDataFree(cpuData); virCPUDefFree(cpu); VIR_FREE(result); VIR_FREE(json); diff --git a/tests/cputestdata/x86_64-cpuid-A10-5800K-json.xml b/tests/cputestdata/x86_64-cpuid-A10-5800K-json.xml index 7a38f0fd4..c021fcddf 100644 --- a/tests/cputestdata/x86_64-cpuid-A10-5800K-json.xml +++ b/tests/cputestdata/x86_64-cpuid-A10-5800K-json.xml @@ -1,6 +1,7 @@ <cpu mode='custom' match='exact'> <arch>x86_64</arch> <model fallback='forbid'>Opteron_G5</model> + <vendor>AMD</vendor> <feature policy='require' name='vme'/> <feature policy='require' name='x2apic'/> <feature policy='require' name='hypervisor'/> diff --git a/tests/cputestdata/x86_64-cpuid-Core-i5-2500-json.xml b/tests/cputestdata/x86_64-cpuid-Core-i5-2500-json.xml index 980cf74a0..2e2430e78 100644 --- a/tests/cputestdata/x86_64-cpuid-Core-i5-2500-json.xml +++ b/tests/cputestdata/x86_64-cpuid-Core-i5-2500-json.xml @@ -1,6 +1,7 @@ <cpu mode='custom' match='exact'> <arch>x86_64</arch> <model fallback='forbid'>SandyBridge</model> + <vendor>Intel</vendor> <feature policy='require' name='vme'/> <feature policy='require' name='ss'/> <feature policy='require' name='pcid'/> diff --git a/tests/cputestdata/x86_64-cpuid-Core-i5-2540M-json.xml b/tests/cputestdata/x86_64-cpuid-Core-i5-2540M-json.xml index 980cf74a0..2e2430e78 100644 --- a/tests/cputestdata/x86_64-cpuid-Core-i5-2540M-json.xml +++ b/tests/cputestdata/x86_64-cpuid-Core-i5-2540M-json.xml @@ -1,6 +1,7 @@ <cpu mode='custom' match='exact'> <arch>x86_64</arch> <model fallback='forbid'>SandyBridge</model> + <vendor>Intel</vendor> <feature policy='require' name='vme'/> <feature policy='require' name='ss'/> <feature policy='require' name='pcid'/> diff --git a/tests/cputestdata/x86_64-cpuid-Core-i5-4670T-json.xml b/tests/cputestdata/x86_64-cpuid-Core-i5-4670T-json.xml index c93688b89..cf23f59d7 100644 --- a/tests/cputestdata/x86_64-cpuid-Core-i5-4670T-json.xml +++ b/tests/cputestdata/x86_64-cpuid-Core-i5-4670T-json.xml @@ -1,6 +1,7 @@ <cpu mode='custom' match='exact'> <arch>x86_64</arch> <model fallback='forbid'>Haswell</model> + <vendor>Intel</vendor> <feature policy='require' name='vme'/> <feature policy='require' name='ss'/> <feature policy='require' name='vmx'/> diff --git a/tests/cputestdata/x86_64-cpuid-Core-i5-6600-json.xml b/tests/cputestdata/x86_64-cpuid-Core-i5-6600-json.xml index 171b482c3..e768aa674 100644 --- a/tests/cputestdata/x86_64-cpuid-Core-i5-6600-json.xml +++ b/tests/cputestdata/x86_64-cpuid-Core-i5-6600-json.xml @@ -1,6 +1,7 @@ <cpu mode='custom' match='exact'> <arch>x86_64</arch> <model fallback='forbid'>Skylake-Client</model> + <vendor>Intel</vendor> <feature policy='require' name='ss'/> <feature policy='require' name='hypervisor'/> <feature policy='require' name='tsc_adjust'/> diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-2600-json.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-2600-json.xml index 27d9f3580..4e721aba4 100644 --- a/tests/cputestdata/x86_64-cpuid-Core-i7-2600-json.xml +++ b/tests/cputestdata/x86_64-cpuid-Core-i7-2600-json.xml @@ -1,6 +1,7 @@ <cpu mode='custom' match='exact'> <arch>x86_64</arch> <model fallback='forbid'>SandyBridge</model> + <vendor>Intel</vendor> <feature policy='require' name='vme'/> <feature policy='require' name='ss'/> <feature policy='require' name='pcid'/> diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-3740QM-json.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-3740QM-json.xml index 9adeecc80..03c22de4b 100644 --- a/tests/cputestdata/x86_64-cpuid-Core-i7-3740QM-json.xml +++ b/tests/cputestdata/x86_64-cpuid-Core-i7-3740QM-json.xml @@ -1,6 +1,7 @@ <cpu mode='custom' match='exact'> <arch>x86_64</arch> <model fallback='forbid'>IvyBridge</model> + <vendor>Intel</vendor> <feature policy='require' name='ss'/> <feature policy='require' name='vmx'/> <feature policy='require' name='pcid'/> diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-3770-json.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-3770-json.xml index a70ae4866..c1544afd3 100644 --- a/tests/cputestdata/x86_64-cpuid-Core-i7-3770-json.xml +++ b/tests/cputestdata/x86_64-cpuid-Core-i7-3770-json.xml @@ -1,6 +1,7 @@ <cpu mode='custom' match='exact'> <arch>x86_64</arch> <model fallback='forbid'>IvyBridge</model> + <vendor>Intel</vendor> <feature policy='require' name='ss'/> <feature policy='require' name='pcid'/> <feature policy='require' name='hypervisor'/> diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-4600U-json.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-4600U-json.xml index 5fa3146a7..8e4e9d96a 100644 --- a/tests/cputestdata/x86_64-cpuid-Core-i7-4600U-json.xml +++ b/tests/cputestdata/x86_64-cpuid-Core-i7-4600U-json.xml @@ -1,6 +1,7 @@ <cpu mode='custom' match='exact'> <arch>x86_64</arch> <model fallback='forbid'>Haswell-noTSX</model> + <vendor>Intel</vendor> <feature policy='require' name='vme'/> <feature policy='require' name='ss'/> <feature policy='require' name='vmx'/> diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-json.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-json.xml index 159797178..be11fa061 100644 --- a/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-json.xml +++ b/tests/cputestdata/x86_64-cpuid-Core-i7-5600U-json.xml @@ -1,12 +1,16 @@ <cpu mode='custom' match='exact'> <arch>x86_64</arch> - <model fallback='forbid'>Skylake-Client</model> + <model fallback='forbid'>Broadwell</model> + <vendor>Intel</vendor> + <feature policy='require' name='vme'/> <feature policy='require' name='ss'/> <feature policy='require' name='vmx'/> + <feature policy='require' name='f16c'/> + <feature policy='require' name='rdrand'/> <feature policy='require' name='hypervisor'/> + <feature policy='require' name='arat'/> <feature policy='require' name='tsc_adjust'/> + <feature policy='require' name='xsaveopt'/> <feature policy='require' name='pdpe1gb'/> - <feature policy='disable' name='mpx'/> - <feature policy='disable' name='xsavec'/> - <feature policy='disable' name='xgetbv1'/> + <feature policy='require' name='abm'/> </cpu> diff --git a/tests/cputestdata/x86_64-cpuid-Core2-E6850-json.xml b/tests/cputestdata/x86_64-cpuid-Core2-E6850-json.xml index ddd730735..8950119a1 100644 --- a/tests/cputestdata/x86_64-cpuid-Core2-E6850-json.xml +++ b/tests/cputestdata/x86_64-cpuid-Core2-E6850-json.xml @@ -1,11 +1,12 @@ <cpu mode='custom' match='exact'> <arch>x86_64</arch> - <model fallback='forbid'>Penryn</model> + <model fallback='forbid'>Conroe</model> + <vendor>Intel</vendor> <feature policy='require' name='vme'/> <feature policy='require' name='ss'/> + <feature policy='require' name='cx16'/> <feature policy='require' name='x2apic'/> <feature policy='require' name='tsc-deadline'/> <feature policy='require' name='hypervisor'/> <feature policy='require' name='tsc_adjust'/> - <feature policy='disable' name='sse4.1'/> </cpu> diff --git a/tests/cputestdata/x86_64-cpuid-Opteron-2350-json.xml b/tests/cputestdata/x86_64-cpuid-Opteron-2350-json.xml index be4cf5c74..302d6562c 100644 --- a/tests/cputestdata/x86_64-cpuid-Opteron-2350-json.xml +++ b/tests/cputestdata/x86_64-cpuid-Opteron-2350-json.xml @@ -1,6 +1,7 @@ <cpu mode='custom' match='exact'> <arch>x86_64</arch> <model fallback='forbid'>Opteron_G3</model> + <vendor>AMD</vendor> <feature policy='require' name='vme'/> <feature policy='require' name='x2apic'/> <feature policy='require' name='tsc-deadline'/> diff --git a/tests/cputestdata/x86_64-cpuid-Opteron-6234-json.xml b/tests/cputestdata/x86_64-cpuid-Opteron-6234-json.xml index 2e28342fd..cc8918661 100644 --- a/tests/cputestdata/x86_64-cpuid-Opteron-6234-json.xml +++ b/tests/cputestdata/x86_64-cpuid-Opteron-6234-json.xml @@ -1,6 +1,7 @@ <cpu mode='custom' match='exact'> <arch>x86_64</arch> <model fallback='forbid'>Opteron_G4</model> + <vendor>AMD</vendor> <feature policy='require' name='vme'/> <feature policy='require' name='x2apic'/> <feature policy='require' name='tsc-deadline'/> diff --git a/tests/cputestdata/x86_64-cpuid-Phenom-B95-json.xml b/tests/cputestdata/x86_64-cpuid-Phenom-B95-json.xml index c1070de74..d4605263b 100644 --- a/tests/cputestdata/x86_64-cpuid-Phenom-B95-json.xml +++ b/tests/cputestdata/x86_64-cpuid-Phenom-B95-json.xml @@ -1,6 +1,7 @@ <cpu mode='custom' match='exact'> <arch>x86_64</arch> <model fallback='forbid'>Opteron_G3</model> + <vendor>AMD</vendor> <feature policy='require' name='vme'/> <feature policy='require' name='x2apic'/> <feature policy='require' name='hypervisor'/> diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E3-1245-json.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1245-json.xml index 7a8246e5c..e0e060691 100644 --- a/tests/cputestdata/x86_64-cpuid-Xeon-E3-1245-json.xml +++ b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1245-json.xml @@ -1,6 +1,7 @@ <cpu mode='custom' match='exact'> <arch>x86_64</arch> <model fallback='forbid'>Skylake-Client</model> + <vendor>Intel</vendor> <feature policy='require' name='ss'/> <feature policy='require' name='vmx'/> <feature policy='require' name='hypervisor'/> diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E5-2630-json.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2630-json.xml index 6b4edc389..ec5f56205 100644 --- a/tests/cputestdata/x86_64-cpuid-Xeon-E5-2630-json.xml +++ b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2630-json.xml @@ -1,6 +1,7 @@ <cpu mode='custom' match='exact'> <arch>x86_64</arch> <model fallback='forbid'>Haswell-noTSX</model> + <vendor>Intel</vendor> <feature policy='require' name='vme'/> <feature policy='require' name='ss'/> <feature policy='require' name='f16c'/> diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E5-2650-json.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2650-json.xml index 36b7bf20f..6e4aff07a 100644 --- a/tests/cputestdata/x86_64-cpuid-Xeon-E5-2650-json.xml +++ b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2650-json.xml @@ -1,6 +1,7 @@ <cpu mode='custom' match='exact'> <arch>x86_64</arch> <model fallback='forbid'>Haswell-noTSX</model> + <vendor>Intel</vendor> <feature policy='require' name='vme'/> <feature policy='require' name='ss'/> <feature policy='require' name='vmx'/> diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E7-4820-json.xml b/tests/cputestdata/x86_64-cpuid-Xeon-E7-4820-json.xml index ff6ab65d9..cb69ff56f 100644 --- a/tests/cputestdata/x86_64-cpuid-Xeon-E7-4820-json.xml +++ b/tests/cputestdata/x86_64-cpuid-Xeon-E7-4820-json.xml @@ -1,6 +1,7 @@ <cpu mode='custom' match='exact'> <arch>x86_64</arch> <model fallback='forbid'>SandyBridge</model> + <vendor>Intel</vendor> <feature policy='require' name='vme'/> <feature policy='require' name='ss'/> <feature policy='require' name='pcid'/> diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-W3520-json.xml b/tests/cputestdata/x86_64-cpuid-Xeon-W3520-json.xml index 1aadbf3d2..348bef829 100644 --- a/tests/cputestdata/x86_64-cpuid-Xeon-W3520-json.xml +++ b/tests/cputestdata/x86_64-cpuid-Xeon-W3520-json.xml @@ -1,6 +1,7 @@ <cpu mode='custom' match='exact'> <arch>x86_64</arch> <model fallback='forbid'>Nehalem</model> + <vendor>Intel</vendor> <feature policy='require' name='vme'/> <feature policy='require' name='ss'/> <feature policy='require' name='x2apic'/> -- 2.11.1

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - no change tests/cputestdata/x86_64-cpuid-A10-5800K.json | 77 ------------------- tests/cputestdata/x86_64-cpuid-Core-i5-2500.json | 88 ---------------------- tests/cputestdata/x86_64-cpuid-Core-i5-2540M.json | 82 -------------------- tests/cputestdata/x86_64-cpuid-Core-i5-4670T.json | 77 ------------------- tests/cputestdata/x86_64-cpuid-Core-i5-6600.json | 82 -------------------- tests/cputestdata/x86_64-cpuid-Core-i7-2600.json | 77 ------------------- tests/cputestdata/x86_64-cpuid-Core-i7-3740QM.json | 77 ------------------- tests/cputestdata/x86_64-cpuid-Core-i7-3770.json | 77 ------------------- tests/cputestdata/x86_64-cpuid-Core-i7-4600U.json | 82 -------------------- tests/cputestdata/x86_64-cpuid-Core-i7-5600U.json | 88 ---------------------- tests/cputestdata/x86_64-cpuid-Core2-E6850.json | 77 ------------------- tests/cputestdata/x86_64-cpuid-Opteron-2350.json | 71 ----------------- tests/cputestdata/x86_64-cpuid-Opteron-6234.json | 88 ---------------------- tests/cputestdata/x86_64-cpuid-Phenom-B95.json | 77 ------------------- tests/cputestdata/x86_64-cpuid-Xeon-E3-1245.json | 88 ---------------------- tests/cputestdata/x86_64-cpuid-Xeon-E5-2630.json | 77 ------------------- tests/cputestdata/x86_64-cpuid-Xeon-E5-2650.json | 71 ----------------- tests/cputestdata/x86_64-cpuid-Xeon-E7-4820.json | 77 ------------------- tests/cputestdata/x86_64-cpuid-Xeon-W3520.json | 77 ------------------- 19 files changed, 1510 deletions(-) delete mode 100644 tests/cputestdata/x86_64-cpuid-A10-5800K.json delete mode 100644 tests/cputestdata/x86_64-cpuid-Core-i5-2500.json delete mode 100644 tests/cputestdata/x86_64-cpuid-Core-i5-2540M.json delete mode 100644 tests/cputestdata/x86_64-cpuid-Core-i5-4670T.json delete mode 100644 tests/cputestdata/x86_64-cpuid-Core-i5-6600.json delete mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-2600.json delete mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-3740QM.json delete mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-3770.json delete mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-4600U.json delete mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-5600U.json delete mode 100644 tests/cputestdata/x86_64-cpuid-Core2-E6850.json delete mode 100644 tests/cputestdata/x86_64-cpuid-Opteron-2350.json delete mode 100644 tests/cputestdata/x86_64-cpuid-Opteron-6234.json delete mode 100644 tests/cputestdata/x86_64-cpuid-Phenom-B95.json delete mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E3-1245.json delete mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E5-2630.json delete mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E5-2650.json delete mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7-4820.json delete mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-W3520.json diff --git a/tests/cputestdata/x86_64-cpuid-A10-5800K.json b/tests/cputestdata/x86_64-cpuid-A10-5800K.json deleted file mode 100644 index 53b39ad03..000000000 --- a/tests/cputestdata/x86_64-cpuid-A10-5800K.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "return": [ - { - "cpuid-register": "EAX", - "cpuid-input-ecx": 1, - "cpuid-input-eax": 13, - "features": 0 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483658, - "features": 9 - }, - { - "cpuid-register": "EAX", - "cpuid-input-eax": 1073741825, - "features": 16777467 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 3221225473, - "features": 0 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483655, - "features": 0 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 2147483649, - "features": 2165747 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483649, - "features": 642779136 - }, - { - "cpuid-register": "EBX", - "cpuid-input-ecx": 0, - "cpuid-input-eax": 7, - "features": 10 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 1, - "features": 3065524739 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 1, - "features": 126614527 - } - ], - "id": "feature-words" -} - -{ - "return": 21, - "id": "family" -} - -{ - "return": 16, - "id": "model" -} - -{ - "return": 1, - "id": "stepping" -} - -{ - "return": "AMD A10-5800K APU with Radeon(tm) HD Graphics ", - "id": "model-id" -} diff --git a/tests/cputestdata/x86_64-cpuid-Core-i5-2500.json b/tests/cputestdata/x86_64-cpuid-Core-i5-2500.json deleted file mode 100644 index 156b77248..000000000 --- a/tests/cputestdata/x86_64-cpuid-Core-i5-2500.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "return": [ - { - "cpuid-register": "EAX", - "cpuid-input-eax": 6, - "features": 4 - }, - { - "cpuid-register": "EAX", - "cpuid-input-ecx": 1, - "cpuid-input-eax": 13, - "features": 1 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483658, - "features": 0 - }, - { - "cpuid-register": "EAX", - "cpuid-input-eax": 1073741825, - "features": 16777467 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 3221225473, - "features": 0 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483655, - "features": 0 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 2147483649, - "features": 1 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483649, - "features": 672139264 - }, - { - "cpuid-register": "ECX", - "cpuid-input-ecx": 0, - "cpuid-input-eax": 7, - "features": 0 - }, - { - "cpuid-register": "EBX", - "cpuid-input-ecx": 0, - "cpuid-input-eax": 7, - "features": 2 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 1, - "features": 2545558019 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 1, - "features": 260832255 - } - ], - "id": "feature-words" -} - -{ - "return": 6, - "id": "family" -} - -{ - "return": 42, - "id": "model" -} - -{ - "return": 7, - "id": "stepping" -} - -{ - "return": " Intel(R) Core(TM) i5-2500 CPU @ 3.30GHz", - "id": "model-id" -} diff --git a/tests/cputestdata/x86_64-cpuid-Core-i5-2540M.json b/tests/cputestdata/x86_64-cpuid-Core-i5-2540M.json deleted file mode 100644 index 6dc2a803a..000000000 --- a/tests/cputestdata/x86_64-cpuid-Core-i5-2540M.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "return": [ - { - "cpuid-register": "EAX", - "cpuid-input-eax": 6, - "features": 4 - }, - { - "cpuid-register": "EAX", - "cpuid-input-ecx": 1, - "cpuid-input-eax": 13, - "features": 1 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483658, - "features": 0 - }, - { - "cpuid-register": "EAX", - "cpuid-input-eax": 1073741825, - "features": 16777467 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 3221225473, - "features": 0 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483655, - "features": 0 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 2147483649, - "features": 1 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483649, - "features": 672139264 - }, - { - "cpuid-register": "EBX", - "cpuid-input-ecx": 0, - "cpuid-input-eax": 7, - "features": 2 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 1, - "features": 2545558019 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 1, - "features": 260832255 - } - ], - "id": "feature-words" -} - -{ - "return": 6, - "id": "family" -} - -{ - "return": 42, - "id": "model" -} - -{ - "return": 7, - "id": "stepping" -} - -{ - "return": " Intel(R) Core(TM) i5-2540M CPU @ 2.60GHz", - "id": "model-id" -} diff --git a/tests/cputestdata/x86_64-cpuid-Core-i5-4670T.json b/tests/cputestdata/x86_64-cpuid-Core-i5-4670T.json deleted file mode 100644 index e715ca082..000000000 --- a/tests/cputestdata/x86_64-cpuid-Core-i5-4670T.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "return": [ - { - "cpuid-register": "EAX", - "cpuid-input-ecx": 1, - "cpuid-input-eax": 13, - "features": 1 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483658, - "features": 0 - }, - { - "cpuid-register": "EAX", - "cpuid-input-eax": 1073741825, - "features": 16777467 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 3221225473, - "features": 0 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483655, - "features": 0 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 2147483649, - "features": 33 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483649, - "features": 739248128 - }, - { - "cpuid-register": "EBX", - "cpuid-input-ecx": 0, - "cpuid-input-eax": 7, - "features": 4027 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 1, - "features": 4160369187 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 1, - "features": 260832255 - } - ], - "id": "feature-words" -} - -{ - "return": 6, - "id": "family" -} - -{ - "return": 60, - "id": "model" -} - -{ - "return": 3, - "id": "stepping" -} - -{ - "return": "Intel(R) Core(TM) i5-4670T CPU @ 2.30GHz", - "id": "model-id" -} diff --git a/tests/cputestdata/x86_64-cpuid-Core-i5-6600.json b/tests/cputestdata/x86_64-cpuid-Core-i5-6600.json deleted file mode 100644 index da296f945..000000000 --- a/tests/cputestdata/x86_64-cpuid-Core-i5-6600.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "return": [ - { - "cpuid-register": "EAX", - "cpuid-input-eax": 6, - "features": 4 - }, - { - "cpuid-register": "EAX", - "cpuid-input-ecx": 1, - "cpuid-input-eax": 13, - "features": 15 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483658, - "features": 0 - }, - { - "cpuid-register": "EAX", - "cpuid-input-eax": 1073741825, - "features": 16777467 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 3221225473, - "features": 0 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483655, - "features": 0 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 2147483649, - "features": 289 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483649, - "features": 739248128 - }, - { - "cpuid-register": "EBX", - "cpuid-input-ecx": 0, - "cpuid-input-eax": 7, - "features": 10244027 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 1, - "features": 4160369155 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 1, - "features": 260832255 - } - ], - "id": "feature-words" -} - -{ - "return": 6, - "id": "family" -} - -{ - "return": 94, - "id": "model" -} - -{ - "return": 3, - "id": "stepping" -} - -{ - "return": "Intel(R) Core(TM) i5-6600 CPU @ 3.30GHz", - "id": "model-id" -} diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-2600.json b/tests/cputestdata/x86_64-cpuid-Core-i7-2600.json deleted file mode 100644 index dd3544900..000000000 --- a/tests/cputestdata/x86_64-cpuid-Core-i7-2600.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "return": [ - { - "cpuid-register": "EAX", - "cpuid-input-ecx": 1, - "cpuid-input-eax": 13, - "features": 1 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483658, - "features": 0 - }, - { - "cpuid-register": "EAX", - "cpuid-input-eax": 1073741825, - "features": 16777467 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 3221225473, - "features": 0 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483655, - "features": 0 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 2147483649, - "features": 1 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483649, - "features": 672139264 - }, - { - "cpuid-register": "EBX", - "cpuid-input-ecx": 0, - "cpuid-input-eax": 7, - "features": 2 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 1, - "features": 2545558019 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 1, - "features": 260832255 - } - ], - "id": "feature-words" -} - -{ - "return": 6, - "id": "family" -} - -{ - "return": 42, - "id": "model" -} - -{ - "return": 7, - "id": "stepping" -} - -{ - "return": " Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz", - "id": "model-id" -} diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-3740QM.json b/tests/cputestdata/x86_64-cpuid-Core-i7-3740QM.json deleted file mode 100644 index 2b1349f17..000000000 --- a/tests/cputestdata/x86_64-cpuid-Core-i7-3740QM.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "return": [ - { - "cpuid-register": "EAX", - "cpuid-input-ecx": 1, - "cpuid-input-eax": 13, - "features": 1 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483658, - "features": 0 - }, - { - "cpuid-register": "EAX", - "cpuid-input-eax": 1073741825, - "features": 16777467 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 3221225473, - "features": 0 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483655, - "features": 0 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 2147483649, - "features": 1 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483649, - "features": 672139264 - }, - { - "cpuid-register": "EBX", - "cpuid-input-ecx": 0, - "cpuid-input-eax": 7, - "features": 643 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 1, - "features": 4156170787 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 1, - "features": 260832255 - } - ], - "id": "feature-words" -} - -{ - "return": 6, - "id": "family" -} - -{ - "return": 58, - "id": "model" -} - -{ - "return": 9, - "id": "stepping" -} - -{ - "return": " Intel(R) Core(TM) i7-3740QM CPU @ 2.70GHz", - "id": "model-id" -} diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-3770.json b/tests/cputestdata/x86_64-cpuid-Core-i7-3770.json deleted file mode 100644 index d83e7788b..000000000 --- a/tests/cputestdata/x86_64-cpuid-Core-i7-3770.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "return": [ - { - "cpuid-register": "EAX", - "cpuid-input-ecx": 1, - "cpuid-input-eax": 13, - "features": 1 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483658, - "features": 0 - }, - { - "cpuid-register": "EAX", - "cpuid-input-eax": 1073741825, - "features": 16777467 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 3221225473, - "features": 0 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483655, - "features": 0 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 2147483649, - "features": 1 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483649, - "features": 672139264 - }, - { - "cpuid-register": "EBX", - "cpuid-input-ecx": 0, - "cpuid-input-eax": 7, - "features": 643 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 1, - "features": 4156170755 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 1, - "features": 260832255 - } - ], - "id": "feature-words" -} - -{ - "return": 6, - "id": "family" -} - -{ - "return": 58, - "id": "model" -} - -{ - "return": 9, - "id": "stepping" -} - -{ - "return": " Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz", - "id": "model-id" -} diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-4600U.json b/tests/cputestdata/x86_64-cpuid-Core-i7-4600U.json deleted file mode 100644 index 2b15fadfd..000000000 --- a/tests/cputestdata/x86_64-cpuid-Core-i7-4600U.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "return": [ - { - "cpuid-register": "EAX", - "cpuid-input-eax": 6, - "features": 4 - }, - { - "cpuid-register": "EAX", - "cpuid-input-ecx": 1, - "cpuid-input-eax": 13, - "features": 1 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483658, - "features": 0 - }, - { - "cpuid-register": "EAX", - "cpuid-input-eax": 1073741825, - "features": 16777467 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 3221225473, - "features": 0 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483655, - "features": 0 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 2147483649, - "features": 33 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483649, - "features": 739248128 - }, - { - "cpuid-register": "EBX", - "cpuid-input-ecx": 0, - "cpuid-input-eax": 7, - "features": 1963 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 1, - "features": 4160369187 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 1, - "features": 260832255 - } - ], - "id": "feature-words" -} - -{ - "return": 6, - "id": "family" -} - -{ - "return": 69, - "id": "model" -} - -{ - "return": 1, - "id": "stepping" -} - -{ - "return": "Intel(R) Core(TM) i7-4600U CPU @ 2.10GHz", - "id": "model-id" -} diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-5600U.json b/tests/cputestdata/x86_64-cpuid-Core-i7-5600U.json deleted file mode 100644 index b570d46b7..000000000 --- a/tests/cputestdata/x86_64-cpuid-Core-i7-5600U.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "return": [ - { - "cpuid-register": "EAX", - "cpuid-input-eax": 6, - "features": 4 - }, - { - "cpuid-register": "EAX", - "cpuid-input-ecx": 1, - "cpuid-input-eax": 13, - "features": 1 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483658, - "features": 0 - }, - { - "cpuid-register": "EAX", - "cpuid-input-eax": 1073741825, - "features": 16777467 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 3221225473, - "features": 0 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483655, - "features": 0 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 2147483649, - "features": 289 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483649, - "features": 739248128 - }, - { - "cpuid-register": "ECX", - "cpuid-input-ecx": 0, - "cpuid-input-eax": 7, - "features": 0 - }, - { - "cpuid-register": "EBX", - "cpuid-input-ecx": 0, - "cpuid-input-eax": 7, - "features": 1839035 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 1, - "features": 4160369187 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 1, - "features": 260832255 - } - ], - "id": "feature-words" -} - -{ - "return": 6, - "id": "family" -} - -{ - "return": 61, - "id": "model" -} - -{ - "return": 4, - "id": "stepping" -} - -{ - "return": "Intel(R) Core(TM) i7-5600U CPU @ 2.60GHz", - "id": "model-id" -} diff --git a/tests/cputestdata/x86_64-cpuid-Core2-E6850.json b/tests/cputestdata/x86_64-cpuid-Core2-E6850.json deleted file mode 100644 index 44be368f7..000000000 --- a/tests/cputestdata/x86_64-cpuid-Core2-E6850.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "return": [ - { - "cpuid-register": "EAX", - "cpuid-input-ecx": 1, - "cpuid-input-eax": 13, - "features": 0 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483658, - "features": 0 - }, - { - "cpuid-register": "EAX", - "cpuid-input-eax": 1073741825, - "features": 16777467 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 3221225473, - "features": 0 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483655, - "features": 0 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 2147483649, - "features": 1 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483649, - "features": 537921536 - }, - { - "cpuid-register": "EBX", - "cpuid-input-ecx": 0, - "cpuid-input-eax": 7, - "features": 2 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 1, - "features": 2166366721 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 1, - "features": 260832255 - } - ], - "id": "feature-words" -} - -{ - "return": 6, - "id": "family" -} - -{ - "return": 15, - "id": "model" -} - -{ - "return": 11, - "id": "stepping" -} - -{ - "return": "Intel(R) Core(TM)2 Duo CPU E6850 @ 3.00GHz", - "id": "model-id" -} diff --git a/tests/cputestdata/x86_64-cpuid-Opteron-2350.json b/tests/cputestdata/x86_64-cpuid-Opteron-2350.json deleted file mode 100644 index 79b5afad0..000000000 --- a/tests/cputestdata/x86_64-cpuid-Opteron-2350.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "return": [ - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483658, - "features": 1 - }, - { - "cpuid-register": "EAX", - "cpuid-input-eax": 1073741825, - "features": 16777467 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 3221225473, - "features": 0 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483655, - "features": 0 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 2147483649, - "features": 1015 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483649, - "features": 3864004608 - }, - { - "cpuid-register": "EBX", - "cpuid-input-ecx": 0, - "cpuid-input-eax": 7, - "features": 0 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 1, - "features": 2174754817 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 1, - "features": 126614527 - } - ], - "id": "feature-words" -} - -{ - "return": 16, - "id": "family" -} - -{ - "return": 2, - "id": "model" -} - -{ - "return": 3, - "id": "stepping" -} - -{ - "return": "Quad-Core AMD Opteron(tm) Processor 2350", - "id": "model-id" -} diff --git a/tests/cputestdata/x86_64-cpuid-Opteron-6234.json b/tests/cputestdata/x86_64-cpuid-Opteron-6234.json deleted file mode 100644 index 0df386076..000000000 --- a/tests/cputestdata/x86_64-cpuid-Opteron-6234.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "return": [ - { - "cpuid-register": "EAX", - "cpuid-input-eax": 6, - "features": 4 - }, - { - "cpuid-register": "EAX", - "cpuid-input-ecx": 1, - "cpuid-input-eax": 13, - "features": 0 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483658, - "features": 9 - }, - { - "cpuid-register": "EAX", - "cpuid-input-eax": 1073741825, - "features": 16777467 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 3221225473, - "features": 0 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483655, - "features": 0 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 2147483649, - "features": 68595 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483649, - "features": 668204031 - }, - { - "cpuid-register": "ECX", - "cpuid-input-ecx": 0, - "cpuid-input-eax": 7, - "features": 0 - }, - { - "cpuid-register": "EBX", - "cpuid-input-ecx": 0, - "cpuid-input-eax": 7, - "features": 2 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 1, - "features": 2545426947 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 1, - "features": 126614527 - } - ], - "id": "feature-words" -} - -{ - "return": 21, - "id": "family" -} - -{ - "return": 1, - "id": "model" -} - -{ - "return": 2, - "id": "stepping" -} - -{ - "return": "AMD Opteron(TM) Processor 6234 ", - "id": "model-id" -} diff --git a/tests/cputestdata/x86_64-cpuid-Phenom-B95.json b/tests/cputestdata/x86_64-cpuid-Phenom-B95.json deleted file mode 100644 index 5f5badda9..000000000 --- a/tests/cputestdata/x86_64-cpuid-Phenom-B95.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "return": [ - { - "cpuid-register": "EAX", - "cpuid-input-ecx": 1, - "cpuid-input-eax": 13, - "features": 0 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483658, - "features": 9 - }, - { - "cpuid-register": "EAX", - "cpuid-input-eax": 1073741825, - "features": 16777467 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 3221225473, - "features": 0 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483655, - "features": 0 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 2147483649, - "features": 1011 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483649, - "features": 3862956032 - }, - { - "cpuid-register": "EBX", - "cpuid-input-ecx": 0, - "cpuid-input-eax": 7, - "features": 0 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 1, - "features": 2157977601 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 1, - "features": 126614527 - } - ], - "id": "feature-words" -} - -{ - "return": 16, - "id": "family" -} - -{ - "return": 4, - "id": "model" -} - -{ - "return": 2, - "id": "stepping" -} - -{ - "return": "AMD Phenom(tm) II X4 B95 Processor", - "id": "model-id" -} diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E3-1245.json b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1245.json deleted file mode 100644 index 10fbe069f..000000000 --- a/tests/cputestdata/x86_64-cpuid-Xeon-E3-1245.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "return": [ - { - "cpuid-register": "EAX", - "cpuid-input-eax": 6, - "features": 4 - }, - { - "cpuid-register": "EAX", - "cpuid-input-ecx": 1, - "cpuid-input-eax": 13, - "features": 7 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483658, - "features": 0 - }, - { - "cpuid-register": "EAX", - "cpuid-input-eax": 1073741825, - "features": 16777467 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 3221225473, - "features": 0 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483655, - "features": 0 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 2147483649, - "features": 289 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483649, - "features": 739248128 - }, - { - "cpuid-register": "ECX", - "cpuid-input-ecx": 0, - "cpuid-input-eax": 7, - "features": 0 - }, - { - "cpuid-register": "EBX", - "cpuid-input-ecx": 0, - "cpuid-input-eax": 7, - "features": 10244027 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 1, - "features": 4160369187 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 1, - "features": 260832255 - } - ], - "id": "feature-words" -} - -{ - "return": 6, - "id": "family" -} - -{ - "return": 94, - "id": "model" -} - -{ - "return": 3, - "id": "stepping" -} - -{ - "return": "Intel(R) Xeon(R) CPU E3-1245 v5 @ 3.50GHz", - "id": "model-id" -} diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E5-2630.json b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2630.json deleted file mode 100644 index f1affa46b..000000000 --- a/tests/cputestdata/x86_64-cpuid-Xeon-E5-2630.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "return": [ - { - "cpuid-register": "EAX", - "cpuid-input-ecx": 1, - "cpuid-input-eax": 13, - "features": 1 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483658, - "features": 0 - }, - { - "cpuid-register": "EAX", - "cpuid-input-eax": 1073741825, - "features": 16777467 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 3221225473, - "features": 0 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483655, - "features": 0 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 2147483649, - "features": 33 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483649, - "features": 739248128 - }, - { - "cpuid-register": "EBX", - "cpuid-input-ecx": 0, - "cpuid-input-eax": 7, - "features": 1963 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 1, - "features": 4160369155 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 1, - "features": 260832255 - } - ], - "id": "feature-words" -} - -{ - "return": 6, - "id": "family" -} - -{ - "return": 63, - "id": "model" -} - -{ - "return": 2, - "id": "stepping" -} - -{ - "return": "Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz", - "id": "model-id" -} diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E5-2650.json b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2650.json deleted file mode 100644 index 2cd15f64b..000000000 --- a/tests/cputestdata/x86_64-cpuid-Xeon-E5-2650.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "return": [ - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483658, - "features": 0 - }, - { - "cpuid-register": "EAX", - "cpuid-input-eax": 1073741825, - "features": 16777467 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 3221225473, - "features": 0 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483655, - "features": 0 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 2147483649, - "features": 33 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483649, - "features": 739248128 - }, - { - "cpuid-register": "EBX", - "cpuid-input-ecx": 0, - "cpuid-input-eax": 7, - "features": 1961 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 1, - "features": 4160369187 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 1, - "features": 260832255 - } - ], - "id": "feature-words" -} - -{ - "return": 6, - "id": "family" -} - -{ - "return": 63, - "id": "model" -} - -{ - "return": 2, - "id": "stepping" -} - -{ - "return": "Intel(R) Xeon(R) CPU E5-2650 v3 @ 2.30GHz", - "id": "model-id" -} diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E7-4820.json b/tests/cputestdata/x86_64-cpuid-Xeon-E7-4820.json deleted file mode 100644 index a8846132e..000000000 --- a/tests/cputestdata/x86_64-cpuid-Xeon-E7-4820.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "return": [ - { - "cpuid-register": "EAX", - "cpuid-input-ecx": 1, - "cpuid-input-eax": 13, - "features": 0 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483658, - "features": 0 - }, - { - "cpuid-register": "EAX", - "cpuid-input-eax": 1073741825, - "features": 16777467 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 3221225473, - "features": 0 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483655, - "features": 0 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 2147483649, - "features": 1 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483649, - "features": 739248128 - }, - { - "cpuid-register": "EBX", - "cpuid-input-ecx": 0, - "cpuid-input-eax": 7, - "features": 2 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 1, - "features": 2210013699 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 1, - "features": 260832255 - } - ], - "id": "feature-words" -} - -{ - "return": 6, - "id": "family" -} - -{ - "return": 47, - "id": "model" -} - -{ - "return": 2, - "id": "stepping" -} - -{ - "return": " Intel(R) Xeon(R) CPU E7- 4820 @ 2.00GHz", - "id": "model-id" -} diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-W3520.json b/tests/cputestdata/x86_64-cpuid-Xeon-W3520.json deleted file mode 100644 index c75594d4e..000000000 --- a/tests/cputestdata/x86_64-cpuid-Xeon-W3520.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "return": [ - { - "cpuid-register": "EAX", - "cpuid-input-ecx": 1, - "cpuid-input-eax": 13, - "features": 0 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483658, - "features": 0 - }, - { - "cpuid-register": "EAX", - "cpuid-input-eax": 1073741825, - "features": 16777467 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 3221225473, - "features": 0 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483655, - "features": 0 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 2147483649, - "features": 1 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 2147483649, - "features": 672139264 - }, - { - "cpuid-register": "EBX", - "cpuid-input-ecx": 0, - "cpuid-input-eax": 7, - "features": 2 - }, - { - "cpuid-register": "ECX", - "cpuid-input-eax": 1, - "features": 2159550977 - }, - { - "cpuid-register": "EDX", - "cpuid-input-eax": 1, - "features": 260832255 - } - ], - "id": "feature-words" -} - -{ - "return": 6, - "id": "family" -} - -{ - "return": 26, - "id": "model" -} - -{ - "return": 5, - "id": "stepping" -} - -{ - "return": "Intel(R) Xeon(R) CPU W3520 @ 2.67GHz", - "id": "model-id" -} -- 2.11.1

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - no change tests/cputest.c | 2 +- .../{x86_64-cpuid-A10-5800K.json.new => x86_64-cpuid-A10-5800K.json} | 0 ...86_64-cpuid-Core-i5-2500.json.new => x86_64-cpuid-Core-i5-2500.json} | 0 ..._64-cpuid-Core-i5-2540M.json.new => x86_64-cpuid-Core-i5-2540M.json} | 0 ..._64-cpuid-Core-i5-4670T.json.new => x86_64-cpuid-Core-i5-4670T.json} | 0 ...86_64-cpuid-Core-i5-6600.json.new => x86_64-cpuid-Core-i5-6600.json} | 0 ...86_64-cpuid-Core-i7-2600.json.new => x86_64-cpuid-Core-i7-2600.json} | 0 ...4-cpuid-Core-i7-3740QM.json.new => x86_64-cpuid-Core-i7-3740QM.json} | 0 ...86_64-cpuid-Core-i7-3770.json.new => x86_64-cpuid-Core-i7-3770.json} | 0 ..._64-cpuid-Core-i7-4600U.json.new => x86_64-cpuid-Core-i7-4600U.json} | 0 ..._64-cpuid-Core-i7-5600U.json.new => x86_64-cpuid-Core-i7-5600U.json} | 0 ...{x86_64-cpuid-Core2-E6850.json.new => x86_64-cpuid-Core2-E6850.json} | 0 ...86_64-cpuid-Opteron-2350.json.new => x86_64-cpuid-Opteron-2350.json} | 0 ...86_64-cpuid-Opteron-6234.json.new => x86_64-cpuid-Opteron-6234.json} | 0 .../{x86_64-cpuid-Phenom-B95.json.new => x86_64-cpuid-Phenom-B95.json} | 0 ...86_64-cpuid-Xeon-E3-1245.json.new => x86_64-cpuid-Xeon-E3-1245.json} | 0 ...86_64-cpuid-Xeon-E5-2630.json.new => x86_64-cpuid-Xeon-E5-2630.json} | 0 ...86_64-cpuid-Xeon-E5-2650.json.new => x86_64-cpuid-Xeon-E5-2650.json} | 0 ...86_64-cpuid-Xeon-E7-4820.json.new => x86_64-cpuid-Xeon-E7-4820.json} | 0 .../{x86_64-cpuid-Xeon-W3520.json.new => x86_64-cpuid-Xeon-W3520.json} | 0 20 files changed, 1 insertion(+), 1 deletion(-) rename tests/cputestdata/{x86_64-cpuid-A10-5800K.json.new => x86_64-cpuid-A10-5800K.json} (100%) rename tests/cputestdata/{x86_64-cpuid-Core-i5-2500.json.new => x86_64-cpuid-Core-i5-2500.json} (100%) rename tests/cputestdata/{x86_64-cpuid-Core-i5-2540M.json.new => x86_64-cpuid-Core-i5-2540M.json} (100%) rename tests/cputestdata/{x86_64-cpuid-Core-i5-4670T.json.new => x86_64-cpuid-Core-i5-4670T.json} (100%) rename tests/cputestdata/{x86_64-cpuid-Core-i5-6600.json.new => x86_64-cpuid-Core-i5-6600.json} (100%) rename tests/cputestdata/{x86_64-cpuid-Core-i7-2600.json.new => x86_64-cpuid-Core-i7-2600.json} (100%) rename tests/cputestdata/{x86_64-cpuid-Core-i7-3740QM.json.new => x86_64-cpuid-Core-i7-3740QM.json} (100%) rename tests/cputestdata/{x86_64-cpuid-Core-i7-3770.json.new => x86_64-cpuid-Core-i7-3770.json} (100%) rename tests/cputestdata/{x86_64-cpuid-Core-i7-4600U.json.new => x86_64-cpuid-Core-i7-4600U.json} (100%) rename tests/cputestdata/{x86_64-cpuid-Core-i7-5600U.json.new => x86_64-cpuid-Core-i7-5600U.json} (100%) rename tests/cputestdata/{x86_64-cpuid-Core2-E6850.json.new => x86_64-cpuid-Core2-E6850.json} (100%) rename tests/cputestdata/{x86_64-cpuid-Opteron-2350.json.new => x86_64-cpuid-Opteron-2350.json} (100%) rename tests/cputestdata/{x86_64-cpuid-Opteron-6234.json.new => x86_64-cpuid-Opteron-6234.json} (100%) rename tests/cputestdata/{x86_64-cpuid-Phenom-B95.json.new => x86_64-cpuid-Phenom-B95.json} (100%) rename tests/cputestdata/{x86_64-cpuid-Xeon-E3-1245.json.new => x86_64-cpuid-Xeon-E3-1245.json} (100%) rename tests/cputestdata/{x86_64-cpuid-Xeon-E5-2630.json.new => x86_64-cpuid-Xeon-E5-2630.json} (100%) rename tests/cputestdata/{x86_64-cpuid-Xeon-E5-2650.json.new => x86_64-cpuid-Xeon-E5-2650.json} (100%) rename tests/cputestdata/{x86_64-cpuid-Xeon-E7-4820.json.new => x86_64-cpuid-Xeon-E7-4820.json} (100%) rename tests/cputestdata/{x86_64-cpuid-Xeon-W3520.json.new => x86_64-cpuid-Xeon-W3520.json} (100%) diff --git a/tests/cputest.c b/tests/cputest.c index 8c16fb95c..b7dd95d84 100644 --- a/tests/cputest.c +++ b/tests/cputest.c @@ -527,7 +527,7 @@ cpuTestJSONCPUID(const void *arg) char *result = NULL; int ret = -1; - if (virAsprintf(&json, "%s/cputestdata/%s-cpuid-%s.json.new", + if (virAsprintf(&json, "%s/cputestdata/%s-cpuid-%s.json", abs_srcdir, virArchToString(data->arch), data->host) < 0 || virAsprintf(&result, "cpuid-%s-json", data->host) < 0) goto cleanup; diff --git a/tests/cputestdata/x86_64-cpuid-A10-5800K.json.new b/tests/cputestdata/x86_64-cpuid-A10-5800K.json similarity index 100% rename from tests/cputestdata/x86_64-cpuid-A10-5800K.json.new rename to tests/cputestdata/x86_64-cpuid-A10-5800K.json diff --git a/tests/cputestdata/x86_64-cpuid-Core-i5-2500.json.new b/tests/cputestdata/x86_64-cpuid-Core-i5-2500.json similarity index 100% rename from tests/cputestdata/x86_64-cpuid-Core-i5-2500.json.new rename to tests/cputestdata/x86_64-cpuid-Core-i5-2500.json diff --git a/tests/cputestdata/x86_64-cpuid-Core-i5-2540M.json.new b/tests/cputestdata/x86_64-cpuid-Core-i5-2540M.json similarity index 100% rename from tests/cputestdata/x86_64-cpuid-Core-i5-2540M.json.new rename to tests/cputestdata/x86_64-cpuid-Core-i5-2540M.json diff --git a/tests/cputestdata/x86_64-cpuid-Core-i5-4670T.json.new b/tests/cputestdata/x86_64-cpuid-Core-i5-4670T.json similarity index 100% rename from tests/cputestdata/x86_64-cpuid-Core-i5-4670T.json.new rename to tests/cputestdata/x86_64-cpuid-Core-i5-4670T.json diff --git a/tests/cputestdata/x86_64-cpuid-Core-i5-6600.json.new b/tests/cputestdata/x86_64-cpuid-Core-i5-6600.json similarity index 100% rename from tests/cputestdata/x86_64-cpuid-Core-i5-6600.json.new rename to tests/cputestdata/x86_64-cpuid-Core-i5-6600.json diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-2600.json.new b/tests/cputestdata/x86_64-cpuid-Core-i7-2600.json similarity index 100% rename from tests/cputestdata/x86_64-cpuid-Core-i7-2600.json.new rename to tests/cputestdata/x86_64-cpuid-Core-i7-2600.json diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-3740QM.json.new b/tests/cputestdata/x86_64-cpuid-Core-i7-3740QM.json similarity index 100% rename from tests/cputestdata/x86_64-cpuid-Core-i7-3740QM.json.new rename to tests/cputestdata/x86_64-cpuid-Core-i7-3740QM.json diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-3770.json.new b/tests/cputestdata/x86_64-cpuid-Core-i7-3770.json similarity index 100% rename from tests/cputestdata/x86_64-cpuid-Core-i7-3770.json.new rename to tests/cputestdata/x86_64-cpuid-Core-i7-3770.json diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-4600U.json.new b/tests/cputestdata/x86_64-cpuid-Core-i7-4600U.json similarity index 100% rename from tests/cputestdata/x86_64-cpuid-Core-i7-4600U.json.new rename to tests/cputestdata/x86_64-cpuid-Core-i7-4600U.json diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-5600U.json.new b/tests/cputestdata/x86_64-cpuid-Core-i7-5600U.json similarity index 100% rename from tests/cputestdata/x86_64-cpuid-Core-i7-5600U.json.new rename to tests/cputestdata/x86_64-cpuid-Core-i7-5600U.json diff --git a/tests/cputestdata/x86_64-cpuid-Core2-E6850.json.new b/tests/cputestdata/x86_64-cpuid-Core2-E6850.json similarity index 100% rename from tests/cputestdata/x86_64-cpuid-Core2-E6850.json.new rename to tests/cputestdata/x86_64-cpuid-Core2-E6850.json diff --git a/tests/cputestdata/x86_64-cpuid-Opteron-2350.json.new b/tests/cputestdata/x86_64-cpuid-Opteron-2350.json similarity index 100% rename from tests/cputestdata/x86_64-cpuid-Opteron-2350.json.new rename to tests/cputestdata/x86_64-cpuid-Opteron-2350.json diff --git a/tests/cputestdata/x86_64-cpuid-Opteron-6234.json.new b/tests/cputestdata/x86_64-cpuid-Opteron-6234.json similarity index 100% rename from tests/cputestdata/x86_64-cpuid-Opteron-6234.json.new rename to tests/cputestdata/x86_64-cpuid-Opteron-6234.json diff --git a/tests/cputestdata/x86_64-cpuid-Phenom-B95.json.new b/tests/cputestdata/x86_64-cpuid-Phenom-B95.json similarity index 100% rename from tests/cputestdata/x86_64-cpuid-Phenom-B95.json.new rename to tests/cputestdata/x86_64-cpuid-Phenom-B95.json diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E3-1245.json.new b/tests/cputestdata/x86_64-cpuid-Xeon-E3-1245.json similarity index 100% rename from tests/cputestdata/x86_64-cpuid-Xeon-E3-1245.json.new rename to tests/cputestdata/x86_64-cpuid-Xeon-E3-1245.json diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E5-2630.json.new b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2630.json similarity index 100% rename from tests/cputestdata/x86_64-cpuid-Xeon-E5-2630.json.new rename to tests/cputestdata/x86_64-cpuid-Xeon-E5-2630.json diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E5-2650.json.new b/tests/cputestdata/x86_64-cpuid-Xeon-E5-2650.json similarity index 100% rename from tests/cputestdata/x86_64-cpuid-Xeon-E5-2650.json.new rename to tests/cputestdata/x86_64-cpuid-Xeon-E5-2650.json diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-E7-4820.json.new b/tests/cputestdata/x86_64-cpuid-Xeon-E7-4820.json similarity index 100% rename from tests/cputestdata/x86_64-cpuid-Xeon-E7-4820.json.new rename to tests/cputestdata/x86_64-cpuid-Xeon-E7-4820.json diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-W3520.json.new b/tests/cputestdata/x86_64-cpuid-Xeon-W3520.json similarity index 100% rename from tests/cputestdata/x86_64-cpuid-Xeon-W3520.json.new rename to tests/cputestdata/x86_64-cpuid-Xeon-W3520.json -- 2.11.1

Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- Notes: Version 2: - no change docs/news.xml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/news.xml b/docs/news.xml index b756a970f..798687407 100644 --- a/docs/news.xml +++ b/docs/news.xml @@ -73,6 +73,17 @@ and network. </description> </change> + <change> + <summary> + qemu: Detect host CPU model by asking QEMU on x86_64 + </summary> + <description> + Previously, libvirt detected the host CPU model using CPUID + instruction, which cased libvirt to detect a lot of CPU features + that are not supported by QEMU/KVM. Asking QEMU makes sure we + don't ask for unsupported features. + </description> + </change> </section> <section title="Bug fixes"> <change> -- 2.11.1

On Wed, Feb 15, 2017 at 05:44:34PM +0100, Jiri Denemark wrote:
Until now host-model CPU mode tried to enable all CPU features supported by the host CPU even if QEMU/KVM did not support them. This caused a number of issues and made host-model quite unreliable. Asking QEMU for the CPU it can provide and the current host makes host-model much more robust.
This series fixes the following bugs:
https://bugzilla.redhat.com/show_bug.cgi?id=1018251 https://bugzilla.redhat.com/show_bug.cgi?id=1371617 https://bugzilla.redhat.com/show_bug.cgi?id=1372581 https://bugzilla.redhat.com/show_bug.cgi?id=1404627 https://bugzilla.redhat.com/show_bug.cgi?id=870071
In addition to that, the following bug should be mostly limited to cases when an unsupported feature is explicitly requested:
Hi Jiri, A small meta-comment. If I may suggest: When mentioning one or more bugs, it would be nice if the said bug's summary is also added next to the URL. This would be useful when reading the mailing list offline, as it'd give some idea as to what the bug is about without firing up the browser. [I realize cover letter doesn't go into Git commits, but have seen number of commits with Bugzilla URLs, without its corresponding bug summary next to it. Not a catastrophe, just inconvenience.] [...] -- /kashyap
participants (3)
-
Jiri Denemark
-
John Ferlan
-
Kashyap Chamarthy