[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] live migration from 4.12 to 4.13 fails due to qemu-xen bug
Am Mon, 13 Jan 2020 11:36:27 +0100 schrieb Olaf Hering <olaf@xxxxxxxxx>: > This HVM domU fails to live migrate from staging-4.12 to staging-4.13: It turned out libxl does not configure qemu correctly at runtime: libxl__build_device_model_args_new() uses 'qemu -machine xenfv', perhaps with the assumption that 'xenfv' does the right thing. Unfortunately, 'xenfv' entirely ignores compatibility of "pc-i440fx" between qemu versions, 'xenfv' just maps to 'pc' aka 'the lastest'. Instead of 'qemu -machine xenfv', libxl should run 'qemu -machine pc-i440fx-3.0 -device xen-platform -accel xen' to make sure the domU can be migrated safely to future versions of qemu. Maybe there should also be a way to select a specific variant of "pc-i440fx". Currently the only way to do that is to use device_model_args_hvm= in xl.cfg. Unfortunately libvirt does not support "b_info->extra*". Should the string "pc-i440fx-3.0" become a configure option? I think this (untested) patch has to be applied to staging-4.13: --- a/tools/libxl/libxl_dm.c +++ b/tools/libxl/libxl_dm.c @@ -1715,23 +1715,20 @@ static int libxl__build_device_model_args_new(libxl__gc *gc, for (i = 0; b_info->extra && b_info->extra[i] != NULL; i++) flexarray_append(dm_args, b_info->extra[i]); - flexarray_append(dm_args, "-machine"); switch (b_info->type) { case LIBXL_DOMAIN_TYPE_PVH: case LIBXL_DOMAIN_TYPE_PV: + flexarray_append(dm_args, "-machine"); flexarray_append(dm_args, "xenpv"); for (i = 0; b_info->extra_pv && b_info->extra_pv[i] != NULL; i++) flexarray_append(dm_args, b_info->extra_pv[i]); break; case LIBXL_DOMAIN_TYPE_HVM: - if (!libxl_defbool_val(b_info->u.hvm.xen_platform_pci)) { - /* Switching here to the machine "pc" which does not add - * the xen-platform device instead of the default "xenfv" machine. - */ - machinearg = libxl__strdup(gc, "pc,accel=xen"); - } else { - machinearg = libxl__strdup(gc, "xenfv"); + if (libxl_defbool_val(b_info->u.hvm.xen_platform_pci)) { + flexarray_append(dm_args, "-device"); + flexarray_append(dm_args, "xen-platform"); } + machinearg = libxl__strdup(gc, "pc-i440fx-3.0,accel=xen"); if (b_info->u.hvm.mmio_hole_memkb) { uint64_t max_ram_below_4g = (1ULL << 32) - (b_info->u.hvm.mmio_hole_memkb << 10); @@ -1762,6 +1759,7 @@ static int libxl__build_device_model_args_new(libxl__gc *gc, } } + flexarray_append(dm_args, "-machine"); flexarray_append(dm_args, machinearg); for (i = 0; b_info->extra_hvm && b_info->extra_hvm[i] != NULL; i++) flexarray_append(dm_args, b_info->extra_hvm[i]); Olaf Attachment:
pgpN3Smc8kbHQ.pgp _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |