mirror of https://github.com/xemu-project/xemu.git
vfio/migration: Block VFIO migration with postcopy migration
VFIO migration is not compatible with postcopy migration. A VFIO device in the destination can't handle page faults for pages that have not been sent yet. Doing such migration will cause the VM to crash in the destination: qemu-system-x86_64: VFIO_MAP_DMA failed: Bad address qemu-system-x86_64: vfio_dma_map(0x55a28c7659d0, 0xc0000, 0xb000, 0x7f1b11a00000) = -14 (Bad address) qemu: hardware error: vfio: DMA mapping failed, unable to continue To prevent this, block VFIO migration with postcopy migration. Reported-by: Yanghang Liu <yanghliu@redhat.com> Signed-off-by: Avihai Horon <avihaih@nvidia.com> Tested-by: Yanghang Liu <yanghliu@redhat.com> Reviewed-by: Peter Xu <peterx@redhat.com> Signed-off-by: Cédric Le Goater <clg@redhat.com>
This commit is contained in:
parent
08fc4cb517
commit
bf7ef7a2da
|
@ -335,6 +335,27 @@ static bool vfio_precopy_supported(VFIODevice *vbasedev)
|
|||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
static int vfio_save_prepare(void *opaque, Error **errp)
|
||||
{
|
||||
VFIODevice *vbasedev = opaque;
|
||||
|
||||
/*
|
||||
* Snapshot doesn't use postcopy, so allow snapshot even if postcopy is on.
|
||||
*/
|
||||
if (runstate_check(RUN_STATE_SAVE_VM)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (migrate_postcopy_ram()) {
|
||||
error_setg(
|
||||
errp, "%s: VFIO migration is not supported with postcopy migration",
|
||||
vbasedev->name);
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int vfio_save_setup(QEMUFile *f, void *opaque)
|
||||
{
|
||||
VFIODevice *vbasedev = opaque;
|
||||
|
@ -640,6 +661,7 @@ static bool vfio_switchover_ack_needed(void *opaque)
|
|||
}
|
||||
|
||||
static const SaveVMHandlers savevm_vfio_handlers = {
|
||||
.save_prepare = vfio_save_prepare,
|
||||
.save_setup = vfio_save_setup,
|
||||
.save_cleanup = vfio_save_cleanup,
|
||||
.state_pending_estimate = vfio_state_pending_estimate,
|
||||
|
|
Loading…
Reference in New Issue