qemu-devel
[Top][All Lists]
Advanced

[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";
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]