[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 06/13] vfio/migration: Allow migration of multiple P2P supporting
From: |
Cédric Le Goater |
Subject: |
[PULL 06/13] vfio/migration: Allow migration of multiple P2P supporting devices |
Date: |
Mon, 11 Sep 2023 09:50:01 +0200 |
From: Avihai Horon <avihaih@nvidia.com>
Now that P2P support has been added to VFIO migration, allow migration
of multiple devices if all of them support P2P migration.
Single device migration is allowed regardless of P2P migration support.
Signed-off-by: Avihai Horon <avihaih@nvidia.com>
Signed-off-by: Joao Martins <joao.m.martins@oracle.com>
Reviewed-by: Cédric Le Goater <clg@redhat.com>
Tested-by: YangHang Liu <yanghliu@redhat.com>
Signed-off-by: Cédric Le Goater <clg@redhat.com>
---
hw/vfio/common.c | 26 ++++++++++++++++++--------
1 file changed, 18 insertions(+), 8 deletions(-)
diff --git a/hw/vfio/common.c b/hw/vfio/common.c
index
7c3d636025695641299f306c2afe12fa3e990736..8a8d074e1863ec40b00a424bbe50494ce8391301
100644
--- a/hw/vfio/common.c
+++ b/hw/vfio/common.c
@@ -363,21 +363,31 @@ bool vfio_mig_active(void)
static Error *multiple_devices_migration_blocker;
-static unsigned int vfio_migratable_device_num(void)
+/*
+ * Multiple devices migration is allowed only if all devices support P2P
+ * migration. Single device migration is allowed regardless of P2P migration
+ * support.
+ */
+static bool vfio_multiple_devices_migration_is_supported(void)
{
VFIOGroup *group;
VFIODevice *vbasedev;
unsigned int device_num = 0;
+ bool all_support_p2p = true;
QLIST_FOREACH(group, &vfio_group_list, next) {
QLIST_FOREACH(vbasedev, &group->device_list, next) {
if (vbasedev->migration) {
device_num++;
+
+ if (!(vbasedev->migration->mig_flags & VFIO_MIGRATION_P2P)) {
+ all_support_p2p = false;
+ }
}
}
}
- return device_num;
+ return all_support_p2p || device_num <= 1;
}
int vfio_block_multiple_devices_migration(VFIODevice *vbasedev, Error **errp)
@@ -385,19 +395,19 @@ int vfio_block_multiple_devices_migration(VFIODevice
*vbasedev, Error **errp)
int ret;
if (multiple_devices_migration_blocker ||
- vfio_migratable_device_num() <= 1) {
+ vfio_multiple_devices_migration_is_supported()) {
return 0;
}
if (vbasedev->enable_migration == ON_OFF_AUTO_ON) {
- error_setg(errp, "Migration is currently not supported with multiple "
- "VFIO devices");
+ error_setg(errp, "Multiple VFIO devices migration is supported only if
"
+ "all of them support P2P migration");
return -EINVAL;
}
error_setg(&multiple_devices_migration_blocker,
- "Migration is currently not supported with multiple "
- "VFIO devices");
+ "Multiple VFIO devices migration is supported only if all of "
+ "them support P2P migration");
ret = migrate_add_blocker(multiple_devices_migration_blocker, errp);
if (ret < 0) {
error_free(multiple_devices_migration_blocker);
@@ -410,7 +420,7 @@ int vfio_block_multiple_devices_migration(VFIODevice
*vbasedev, Error **errp)
void vfio_unblock_multiple_devices_migration(void)
{
if (!multiple_devices_migration_blocker ||
- vfio_migratable_device_num() > 1) {
+ !vfio_multiple_devices_migration_is_supported()) {
return;
}
--
2.41.0
- [PULL 00/13] vfio queue, Cédric Le Goater, 2023/09/11
- [PULL 01/13] vfio/migration: Move from STOP_COPY to STOP in vfio_save_cleanup(), Cédric Le Goater, 2023/09/11
- [PULL 02/13] sysemu: Add prepare callback to struct VMChangeStateEntry, Cédric Le Goater, 2023/09/11
- [PULL 03/13] qdev: Add qdev_add_vm_change_state_handler_full(), Cédric Le Goater, 2023/09/11
- [PULL 05/13] vfio/migration: Add P2P support for VFIO migration, Cédric Le Goater, 2023/09/11
- [PULL 08/13] vfio/migration: Fail adding device with enable-migration=on and existing blocker, Cédric Le Goater, 2023/09/11
- [PULL 06/13] vfio/migration: Allow migration of multiple P2P supporting devices,
Cédric Le Goater <=
- [PULL 07/13] migration: Add migration prefix to functions in target.c, Cédric Le Goater, 2023/09/11
- [PULL 10/13] migration: Add .save_prepare() handler to struct SaveVMHandlers, Cédric Le Goater, 2023/09/11
- [PULL 04/13] vfio/migration: Refactor PRE_COPY and RUNNING state checks, Cédric Le Goater, 2023/09/11
- [PULL 09/13] migration: Move more initializations to migrate_init(), Cédric Le Goater, 2023/09/11
- [PULL 11/13] vfio/migration: Block VFIO migration with postcopy migration, Cédric Le Goater, 2023/09/11
- [PULL 13/13] vfio/common: Separate vfio-pci ranges, Cédric Le Goater, 2023/09/11
- [PULL 12/13] vfio/migration: Block VFIO migration with background snapshot, Cédric Le Goater, 2023/09/11
- Re: [PULL 00/13] vfio queue, Stefan Hajnoczi, 2023/09/11