This series is a significant rework to how we handle CPU compatibility modes on ppc.
* Information about compatibility modes was previously open coded and scattered across a number of functions in both target-ppc and spapr code. It's now brought together into a common table of compatibility modes. * There was significant conceptual confusion about what a compatibility mode means, and how it interacts with the machine type. This cleans that up, clarifying that a compatibility mode (as an externally set option) only makes sense on machine types that don't permit the guest hypervisor privilege (i.e. 'pseries') * It was previously the user's (or management layer's) responsibility to determine compatibility of CPUs on either end for migration. This uses the compatibility modes to check that properly during an incoming migration. * Some ill-considered sanity checks broke migration from 2.6 to 2.7, due to some new instruction classes being added. This should avoid a repeat of that problem for 2.8 (we may be able to backport a minimal subset to 2.7-stable to fix the existing problem). Patches 1-5 are preliminary cleanups which could stand on their own. Patches 6-16 are the compatibility mode cleanup proper. So far, this has been mimimally tested. There are quite a few migration cases to check. David Gibson (17): ppc: Remove some stub POWER6 models powernv: CPU compatibility modes don't make sense for powernv pseries: Always use core objects for CPU construction pseries: Make cpu_update during CAS unconditional ppc: Clean up and QOMify hypercall emulation ppc: Rename cpu_version to compat_pvr ppc: Rewrite ppc_set_compat() ppc: Rewrite ppc_get_compat_smt_threads() ppc: Validate compatibility modes when setting pseries: Rewrite CAS PVR compatibility logic ppc: Add ppc_set_compat_all() ppc: Migrate compatibility mode pseries: Move CPU compatibility property to machine pseries: Reset CPU compatibility mode ppc: Check that CPU model stays consistent across migration ppc: Remove counter-productive "sanity checks" in migration pseries: Default to POWER8 compatibility mode hw/ppc/pnv.c | 6 +- hw/ppc/spapr.c | 159 ++++++++++++++++------------ hw/ppc/spapr_cpu_core.c | 84 +++++++++++---- hw/ppc/spapr_hcall.c | 142 ++++++++----------------- hw/ppc/trace-events | 2 +- include/hw/ppc/spapr.h | 12 ++- target-ppc/Makefile.objs | 1 + target-ppc/compat.c | 251 ++++++++++++++++++++++++++++++++++++++++++++ target-ppc/cpu-models.c | 4 - target-ppc/cpu-models.h | 2 - target-ppc/cpu.h | 49 +++++++-- target-ppc/excp_helper.c | 11 +- target-ppc/kvm.c | 4 +- target-ppc/kvm_ppc.h | 4 +- target-ppc/machine.c | 55 ++++++++-- target-ppc/translate_init.c | 146 +++----------------------- 16 files changed, 564 insertions(+), 368 deletions(-) create mode 100644 target-ppc/compat.c -- 2.7.4