With qemu4 an incompatible change was added to pc_piix, which makes it practical impossible to migrate domUs started with qemu2 or qemu3 to newer qemu versions. Commit 7fccf2a06890e3bc3b30e29827ad3fb93fe88fea added and enabled a new member "smbus_no_migration_support". In commit 4ab2f2a8aabfea95cc53c64e13b3f67960b27fdf the vmstate_acpi got new elements, which are conditionally filled. As a result, an incoming migration expected smbus related data unless smbus migration was disabled for a given MachineClass. Since first commit forgot to handle 'xenfv', domUs started with qemu4 are incompatible with their qemu3 siblings.
Using other existing machine types, such as 'pc-i440fx-3.1', is not possible because 'xenfv' creates the 'xen-platform' PCI device at 00:02.0, while all other variants to run a domU would create it at 00:04.0. To cover both the existing and the broken case of 'xenfv' in a single qemu binary, a new compatibility variant of 'xenfv-qemu4' must be added which targets domUs started with qemu-4.0, qemu-4.1 and qemu-4.2. The existing 'xenfv' restores compatibility of qemu5+ with qemu2/3. Host admins who started domUs with qemu-4.x have to use a wrapper script which appends '-machine xenfv-qemu4' to the device-model command line. This is only required if there is no maintenance window which allows to temporary shutdown the domU and restart it with a fixed device-model. The wrapper script is as simple as this: #!/bin/sh exec /usr/bin/qemu-system-i386 "$@" -machine xenfv-qemu4 With xl this script will be enabled with device_model_override=, see xl.cfg(5). To live migrate a domU, adjust the existing domU.cfg and pass it to xl migrate or xl save/restore: xl migrate -C new-domU.cfg domU remote-host xl save domU CheckpointFile new-domU.cfg xl restore new-domU.cfg CheckpointFile With libvirt this script will be enabled with the <emulator> element in domU.xml. Use 'virsh edit' prior 'virsh migrate' to replace the existing <emulator> element to point it to the wrapper script. Signed-off-by: Olaf Hering <o...@aepfle.de> --- hw/i386/pc_piix.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c index e6756216f9..ef23da88d9 100644 --- a/hw/i386/pc_piix.c +++ b/hw/i386/pc_piix.c @@ -948,11 +948,26 @@ DEFINE_PC_MACHINE(isapc, "isapc", pc_init_isa, #ifdef CONFIG_XEN +static void xenfv_qemu_4_x_machine_options(MachineClass *m) +{ + m->desc = "Xen Fully-virtualized PC (qemu 4.x compat)"; + m->max_cpus = HVM_MAX_VCPUS; + m->default_machine_opts = "accel=xen"; + m->smbus_no_migration_support = false; +} + +DEFINE_PC_MACHINE(xenfv_qemu4, "xenfv-qemu4", pc_xen_hvm_init, + xenfv_qemu_4_x_machine_options); + static void xenfv_machine_options(MachineClass *m) { + PCMachineClass *pcmc = PC_MACHINE_CLASS(m); + m->desc = "Xen Fully-virtualized PC"; m->max_cpus = HVM_MAX_VCPUS; m->default_machine_opts = "accel=xen"; + m->smbus_no_migration_support = true; + pcmc->pvh_enabled = false; } DEFINE_PC_MACHINE(xenfv, "xenfv", pc_xen_hvm_init,