|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: live migration fails: qemu placing pci devices at different locations
On Tue, Oct 31, 2023 at 10:07:29AM +0000, James Dingwall wrote:
> Hi,
>
> I'm having a bit of trouble performing live migration between hvm guests. The
> sending side is xen 4.14.5 (qemu 5.0), receiving 4.15.5 (qemu 5.1). The error
> message recorded in qemu-dm-<name>--incoming.log:
>
> qemu-system-i386: Unknown savevm section or instance '0000:00:04.0/vga' 0.
> Make sure that your current VM setup matches your saved VM setup, including
> any hotplugged devices
>
> I have patched libxl_dm.c to explicitly assign `addr=xx` values for various
> devices and when these are correct the domain migrates correctly. However
> the configuration differences between guests means that the values are not
> consistent. The domain config file doesn't allow the pci address to be
> expressed in the configuration for, e.g. `soundhw="DEVICE"`
>
> e.g.
>
> diff --git a/tools/libs/light/libxl_dm.c b/tools/libs/light/libxl_dm.c
> index 6e531863ac0..daa7c49846f 100644
> --- a/tools/libs/light/libxl_dm.c
> +++ b/tools/libs/light/libxl_dm.c
> @@ -1441,7 +1441,7 @@ static int libxl__build_device_model_args_new(libxl__gc
> *gc,
> flexarray_append(dm_args, "-spice");
> flexarray_append(dm_args, spiceoptions);
> if (libxl_defbool_val(b_info->u.hvm.spice.vdagent)) {
> - flexarray_vappend(dm_args, "-device", "virtio-serial",
> + flexarray_vappend(dm_args, "-device",
> "virtio-serial,addr=04",
> "-chardev", "spicevmc,id=vdagent,name=vdagent",
> "-device",
> "virtserialport,chardev=vdagent,name=com.redhat.spice.0",
> NULL);
>
> The order of devices on the qemu command line (below) appears to be the same
> so my assumption is that the internals of qemu have resulted in things being
> connected in a different order. The output of a Windows `lspci` tool is
> also included.
>
> Could anyone make any additional suggestions on how I could try to gain
> consistency between the different qemu versions?
After a bit more head scratching we worked out the cause and a solution for
our case. In xen 4.15.4 d65ebacb78901b695bc5e8a075ad1ad865a78928 was
introduced to stop using the deprecated qemu `-soundhw` option. The qemu
device initialisation code looks like:
...
soundhw_init(); // handles old -soundhw option
...
/* init generic devices */
rom_set_order_override(FW_CFG_ORDER_OVERRIDE_DEVICE);
qemu_opts_foreach(qemu_find_opts("device"),
device_init_func, NULL, &error_fatal);
...
So for the old -soundhw option this was processed before any -device options
and the sound card was assigned the next available slot on the bus and then
any further -devices were added according to the command line order. After
that xen change the sound card was added as a -device and depending on the
other emulated hardware would be added at a different point to the equivalent
-soundhw option. By re-ordering the qemu command line building in libxl_dm.c
we can make the sound card be the first -device which resolves the migration
problem.
I think this would also have been a problem for live migration between 4.15.3
and 4.15.4 for a vm with a sound card and not just the major version jump we
are doing.
James
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |