diff options
| author | Avihai Horon <avihaih@nvidia.com> | 2023-06-21 14:12:00 +0300 |
|---|---|---|
| committer | Cédric Le Goater <clg@redhat.com> | 2023-06-30 06:02:51 +0200 |
| commit | eda7362af9595a9c6b1f1fefdd94b5ef711c250c (patch) | |
| tree | 53fe4bd1738e3c95a5d18e58f17bfada5e48692d /hw/vfio/common.c | |
| parent | 6cd1fe11598a304b8d22203365f4fc39172ec9b2 (diff) | |
| download | focaccia-qemu-eda7362af9595a9c6b1f1fefdd94b5ef711c250c.tar.gz focaccia-qemu-eda7362af9595a9c6b1f1fefdd94b5ef711c250c.zip | |
vfio/migration: Add VFIO migration pre-copy support
Pre-copy support allows the VFIO device data to be transferred while the
VM is running. This helps to accommodate VFIO devices that have a large
amount of data that needs to be transferred, and it can reduce migration
downtime.
Pre-copy support is optional in VFIO migration protocol v2.
Implement pre-copy of VFIO migration protocol v2 and use it for devices
that support it. Full description of it can be found in the following
Linux commit: 4db52602a607 ("vfio: Extend the device migration protocol
with PRE_COPY").
Signed-off-by: Avihai Horon <avihaih@nvidia.com>
Reviewed-by: Cédric Le Goater <clg@redhat.com>
Tested-by: YangHang Liu <yanghliu@redhat.com>
Acked-by: Alex Williamson <alex.williamson@redhat.com>
Signed-off-by: Cédric Le Goater <clg@redhat.com>
Diffstat (limited to 'hw/vfio/common.c')
| -rw-r--r-- | hw/vfio/common.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/hw/vfio/common.c b/hw/vfio/common.c index fa8fd949b1..25801de173 100644 --- a/hw/vfio/common.c +++ b/hw/vfio/common.c @@ -492,7 +492,8 @@ static bool vfio_devices_all_dirty_tracking(VFIOContainer *container) } if (vbasedev->pre_copy_dirty_page_tracking == ON_OFF_AUTO_OFF && - migration->device_state == VFIO_DEVICE_STATE_RUNNING) { + (migration->device_state == VFIO_DEVICE_STATE_RUNNING || + migration->device_state == VFIO_DEVICE_STATE_PRE_COPY)) { return false; } } @@ -537,7 +538,8 @@ static bool vfio_devices_all_running_and_mig_active(VFIOContainer *container) return false; } - if (migration->device_state == VFIO_DEVICE_STATE_RUNNING) { + if (migration->device_state == VFIO_DEVICE_STATE_RUNNING || + migration->device_state == VFIO_DEVICE_STATE_PRE_COPY) { continue; } else { return false; |