This series implements query-cpu-model-expansion on target-i386. QAPI / interface changes ------------------------ When implementing this, I have noticed that the "host" CPU model in i386 includes some migration-unsafe features that can't be translated to any migration-safe representation: "pmu", and "host-cache-info". To be able to handle the migration-unsafe features, I have extended the query-cpu-model-expansion definition to be clear about what happens to those features when the CPU model is expanded (in short: static expansion removes them, full expansion keeps them). I also added "static" and "migration-safe" fields to the return value of query-cpu-model-expansion, so callers can know if the the expanded representation is static and migration-safe. Test code --------- I have added a Python test script for the feature, that will try multiple combinations of the expansion operation, and see if the returned data keeps matches some constratins. The test script works with the s390x query-cpu-model-expansion command, except that: 1) I couldn't test it with KVM; 2) qtest.py error handling when QEMU refuses to run is unreliable (so the script needs runnability information to be availble in TCG mode, too, to skip not-runnable CPU models and avoid problems). Future versions of the test script could run a arch-specific CPUID-dump guest binary, and validate data seen by the guest directly. While we don't do that, the script validates all QOM properties on the CPU objects looking for unexpected changes. At least in the case of x86, the QOM properties will include lots of the CPUID data seen by the guest, giving us decent coverage. Patches from other series ------------------------- This series includes patches from other series, just to help on the implementation of the test code: * "qmp: Report QOM type name on query-cpu-definitions", that was already submitted for 2.9 * qemu.py, qtest.py, and tests/Makefile.include changes --- Cc: Cornelia Huck <cornelia.huck@xxxxxxxxxx> Cc: Christian Borntraeger <borntraeger@xxxxxxxxxx> Cc: David Hildenbrand <david@xxxxxxxxxx> Cc: libvir-list@xxxxxxxxxx Cc: Jiri Denemark <jdenemar@xxxxxxxxxx> Cc: "Jason J. Herne" <jjherne@xxxxxxxxxxxxxxxxxx> Cc: Markus Armbruster <armbru@xxxxxxxxxx> Cc: Richard Henderson <rth@xxxxxxxxxxx> Cc: Igor Mammedov <imammedo@xxxxxxxxxx> Cc: Eric Blake <eblake@xxxxxxxxxx> Eduardo Habkost (17): qmp: Report QOM type name on query-cpu-definitions qemu.py: Make logging optional qtest.py: Support QTEST_LOG environment variable qtest.py: make logging optional qtest.py: Make 'binary' parameter optional tests: Add rules to non-gtester qtest test cases target-i386: Reorganize and document CPUID initialization steps target-i386: Support "-cpu host" on TCG too target-i386: Move "host" properties to base class target-i386: Allow short strings to be used as vendor ID target-i386: Remove AMD feature flag aliases from Opteron models target-i386: Return migration-safe field on query-cpu-definitions cpu: Support comma escaping when parsing -cpu qapi: add static/migration-safe info to query-cpu-model-expansion target-i386: Define static "base" CPU model tests: query-cpu-model-test.py test code target-i386: Implement query-cpu-model-expansion QMP command qapi-schema.json | 30 ++- scripts/qemu.py | 25 ++- scripts/qtest.py | 15 +- target-i386/cpu-qom.h | 8 +- tests/Makefile.include | 40 +++- tests/query-cpu-model-test.py | 421 ++++++++++++++++++++++++++++++++++++ tests/test-x86-cpuid-compat.c | 19 ++ monitor.c | 4 +- qom/cpu.c | 32 ++- target-arm/helper.c | 1 + target-i386/cpu.c | 481 +++++++++++++++++++++++++++++++----------- target-ppc/translate_init.c | 1 + target-s390x/cpu_models.c | 5 + 13 files changed, 928 insertions(+), 154 deletions(-) create mode 100755 tests/query-cpu-model-test.py -- 2.7.4 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list