[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v4] piix: fix xenfv regression, add compat machine xenfv-qemu
From: |
Paolo Bonzini |
Subject: |
Re: [PATCH v4] piix: fix xenfv regression, add compat machine xenfv-qemu4 |
Date: |
Fri, 27 Mar 2020 16:59:01 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.5.0 |
Looks good, I would just do the following adjustments to have more
consistency between pc and xenfv machine types:
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index c565f41791..eb7b273508 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -948,26 +948,26 @@ DEFINE_PC_MACHINE(isapc, "isapc", pc_init_isa,
#ifdef CONFIG_XEN
-static void xenfv_qemu_4_x_machine_options(MachineClass *m)
+static void xenfv_4_2_machine_options(MachineClass *m)
{
pc_i440fx_4_2_machine_options(m);
- m->desc = "Xen Fully-virtualized PC (qemu 4.x compat)";
+ m->desc = "Xen Fully-virtualized PC";
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);
+DEFINE_PC_MACHINE(xenfv_4_2, "xenfv-4.2", pc_xen_hvm_init,
+ xenfv_4_2_machine_options);
-static void xenfv_machine_options(MachineClass *m)
+static void xenfv_3_1_machine_options(MachineClass *m)
{
pc_i440fx_3_1_machine_options(m);
m->desc = "Xen Fully-virtualized PC";
+ m->alias = "xenfv";
m->max_cpus = HVM_MAX_VCPUS;
m->default_machine_opts = "accel=xen";
}
-DEFINE_PC_MACHINE(xenfv, "xenfv", pc_xen_hvm_init,
- xenfv_machine_options);
+DEFINE_PC_MACHINE(xenfv, "xenfv-3.1", pc_xen_hvm_init,
+ xenfv_3_1_machine_options);
#endif
On 27/03/20 16:18, Olaf Hering wrote:
> 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 <address@hidden>
> ---
> hw/i386/pc_piix.c | 13 +++++++++++++
> 1 file changed, 13 insertions(+)
>
> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> index e6756216f9..c565f41791 100644
> --- a/hw/i386/pc_piix.c
> +++ b/hw/i386/pc_piix.c
> @@ -948,8 +948,21 @@ DEFINE_PC_MACHINE(isapc, "isapc", pc_init_isa,
>
>
> #ifdef CONFIG_XEN
> +static void xenfv_qemu_4_x_machine_options(MachineClass *m)
> +{
> + pc_i440fx_4_2_machine_options(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)
> {
> + pc_i440fx_3_1_machine_options(m);
> m->desc = "Xen Fully-virtualized PC";
> m->max_cpus = HVM_MAX_VCPUS;
> m->default_machine_opts = "accel=xen";
>