This series implements basic infrastructure for CPU model versioning, as discussed before[1][2][3]. This will finally allow us to update CPU models in ways that introduce new software or hardware requirements.
My original plan was to use "query-cpu-model-expansion mode=static" to resolve aliases, but I dropped that plan because it would increase complexity for management software a lot. static CPU models are documented as not being affected by the machine type and accelerator at all, which would make the versioned CPU models very inconvenient to use in the command line. e.g.: users would be forced to replace: -cpu Haswell with: -cpu Haswell-4.1,+2apic,+monitor,+kvmclock,+kvm-nopiodelay,+kvm-asyncpf,+kvm-steal-time,+kvm-pv-eoi,+kvmclock-stable-bit,+x2apic,-acpi,-monitor,-svm In the end, making the versioned CPU models static is not a requirement at all: what we really need is to drop the runnability guarantees from unversioned CPU model names, and require management software to resolve the unversioned alias before saving the VM configuration. Guest ABI compatibility and live migration guarantees are going to be kept: unversioned CPU models will still be usable with live migration. Only runnability guarantees when updating the machine type will be dropped. This means unversioned CPU models are still reported as migration-safe in query-cpu-definitions. The last patch in the series demonstrates how the new feature can be used to update a CPU model: it adds a Cascadelake-Server-4.1.1 CPU model, including "arch-capabilities=on" and "stepping=5". Unfortunately we can't enable arch-capabilities in the -4.1 version of Cascadelake-Server because it would break our existing runnability guarantees. [1] https://www.mail-archive.com/libvir-list@redhat.com/msg167342.html [2] https://www.mail-archive.com/qemu-devel@nongnu.org/msg590034.html [3] https://www.mail-archive.com/qemu-devel@nongnu.org/msg611244.html --- Cc: Paolo Bonzini <pbonz...@redhat.com> Cc: Pavel Hrdina <phrd...@redhat.com> Cc: Jiri Denemark <jdene...@redhat.com> Cc: "Hu, Robert" <robert...@intel.com> Cc: Tao Xu <tao3...@intel.com> Cc: Richard Henderson <r...@twiddle.net> Eduardo Habkost (6): i386: Add x-force-features option for testing i386: Remove unused host_cpudef variable qmp: Add "alias-of" field to query-cpu-definitions i386: Infrastructure for versioned CPU models docs: Deprecate CPU model runnability guarantees i386: Add Cascadelake-Server-4.1.1 CPU model qapi/target.json | 9 +- include/hw/i386/pc.h | 3 + target/i386/cpu-qom.h | 10 +- target/i386/cpu.h | 16 ++ hw/i386/pc.c | 3 + hw/i386/pc_piix.c | 4 + hw/i386/pc_q35.c | 4 + target/i386/cpu.c | 188 +++++++++++++++++---- qemu-deprecated.texi | 19 +++ tests/acceptance/x86_cpu_model_versions.py | 173 +++++++++++++++++++ 10 files changed, 388 insertions(+), 41 deletions(-) create mode 100644 tests/acceptance/x86_cpu_model_versions.py -- 2.18.0.rc1.1.g3f1ff2140