CPU model driver is to get host's CPU information and it also provides one mechanism to expose host's CPU information to guests during migration. When migrating one guest from one machine to another machine, it will compare the CPU information. If it is incomptible, it won't start the guest. On x86, it uses CPUID instruction to get information. When migrating the guest, if the CPU defined in guest XML file is incompatible with host CPU, cpu-baseline will find out best features to expose to guest. Refer to [http://berrange.com/posts/2010/02/15 /guest-cpu-model-configuration-in-libvirt-with-qemukvm/]. On PowerPC, it can get CPU version by mfpvr instruction. So, if PVR is different from definition in guest XML file by cpu-compare, it will fail to start guest. The CPU infromation can be got by cpu-baseline. But only CPU vendor and model can be shown, there are no features as x86. So on PowrePC, it assumes that migration only occurs between the machines with the same type CPUs on PowerPC. In this driver, there are definitions of models and PVRs for CPUs supported on PowerPC. The relationship between models and PVRs are as the following: For one specific CPU model, its PVR is unique. And also for one PVR code, the PVR code is also unique. So from the PVR code of CPU data, it's easy to get model and vendor information. It is tested on my Power machine which CPU PVR is Power7_v2.3. * cap.xml has the same definition as the host. [root@ltckvmopal2 kvm-test]# /bin/virsh cpu-compare cap.xml CPU described in cap.xml is identical to host CPU [root@ltckvmopal2 kvm-test]# /bin/virsh cpu-baseline cap.xml <cpu mode='custom' match='exact'> <model fallback='allow'>POWER7_v2.3</model> <vendor>IBM</vendor> </cpu> * cap.xml has differnt model as the host. [root@ltckvmopal2 kvm-test]# /bin/virsh cpu-compare cap.xml CPU described in cap.xml is incompatible with host CPU [root@ltckvmopal2 kvm-test]# /bin/virsh cpu-baseline cap.xml <cpu mode='custom' match='exact'> <model fallback='allow'>POWER7_v2.1</model> <vendor>IBM</vendor> </cpu> *v1 -> v2: * Fix coding style's problems in several places. * Replace while with for loop in 2 places according to Michal Privoznik's suggestion. * Add powerpc.c to po/PORTFILES.in Li Zhang (3): libvirt: Add one file cpu_ppc_data.h to define CPU data for PPC libvirt: Implement CPU model driver for PowerPC Doc-fix for PowerPC CPU model driver po/POTFILES.in | 1 + src/cpu/cpu.h | 3 + src/cpu/cpu_map.xml | 14 ++ src/cpu/cpu_powerpc.c | 591 ++++++++++++++++++++++++++++++++++++++++++++++-- src/cpu/cpu_ppc_data.h | 33 +++ 5 files changed, 624 insertions(+), 18 deletions(-) create mode 100644 src/cpu/cpu_ppc_data.h -- 1.7.7.6 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list