This call to qemuMigrationSrcIsAllowedHostdev() (which does a hardcoded fail of the migration if there is any PCI or mdev hostdev device in the domain) while doing the destination side of migration prep was found once the call to that same function was removed from the source side migration prep (commit 25883cd5). According to jdenemar, for the V2 migration protocol, prep of the destination is the first step, so this *was* the proper place to do the check, but for V3 migration this is in a way redundant (since we will have already done the check on the source side (updated by 25883cd5 to query QEMU rather than do a hardcoded fail)). Of course it's possible that the source could support migration of a particular VFIO device, but the destination doesn't. But the current check on the destination side is worthless even in that case, since it is just *always* failing rather than querying QEMU; and QEMU can't be queried at the point where the destination check is happening, since it isn't yet running. Anyway QEMU should complain when it's started if it's going to fail, so removing this check should just move the failure to happen a bit later. So the best solution to this problem is to simply remove the hardcoded check/fail from qemuMigrationDstPrepareFresh() and rely on QEMU to fail if it needs to. Fixes: 25883cd5f0b188f2417f294b7d219a77b219f7c2 Signed-off-by: Laine Stump <laine@redhat.com> Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
Libvirt API for virtualization
Libvirt provides a portable, long term stable C API for managing the virtualization technologies provided by many operating systems. It includes support for QEMU, KVM, Xen, LXC, bhyve, Virtuozzo, VMware vCenter and ESX, VMware Desktop, Hyper-V, VirtualBox and the POWER Hypervisor.
For some of these hypervisors, it provides a stateful management daemon which runs on the virtualization host allowing access to the API both by non-privileged local users and remote users.
Layered packages provide bindings of the libvirt C API into other languages including Python, Perl, PHP, Go, Java, OCaml, as well as mappings into object systems such as GObject, CIM and SNMP.
Further information about the libvirt project can be found on the website:
License
The libvirt C API is distributed under the terms of GNU Lesser General Public License, version 2.1 (or later). Some parts of the code that are not part of the C library may have the more restrictive GNU General Public License, version 2.0 (or later). See the files COPYING.LESSER
and COPYING
for full license terms & conditions.
Installation
Instructions on building and installing libvirt can be found on the website:
https://libvirt.org/compiling.html
Contributing
The libvirt project welcomes contributions in many ways. For most components the best way to contribute is to send patches to the primary development mailing list. Further guidance on this can be found on the website:
https://libvirt.org/contribute.html
Contact
The libvirt project has two primary mailing lists:
- libvirt-users@redhat.com (for user discussions)
- libvir-list@redhat.com (for development only)
Further details on contacting the project are available on the website: