On 18/03/2025 09:53, Cédric Le Goater wrote: > Both of these routines are only used in file "migration.c". Move them > there. > > Signed-off-by: Cédric Le Goater <c...@redhat.com>
Reviewed-by: Joao Martins <joao.m.mart...@oracle.com> > --- > include/hw/vfio/vfio-common.h | 2 -- > hw/vfio/common.c | 62 ----------------------------------- > hw/vfio/migration.c | 62 +++++++++++++++++++++++++++++++++++ > 3 files changed, 62 insertions(+), 64 deletions(-) > > diff --git a/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio-common.h > index > 5fc7ee76573375bc8464baee29ab88974fac3d3b..5f082e5a321d97e90066d48cd3c1eaad56912ccb > 100644 > --- a/include/hw/vfio/vfio-common.h > +++ b/include/hw/vfio/vfio-common.h > @@ -290,8 +290,6 @@ extern VFIODeviceList vfio_device_list; > extern const MemoryListener vfio_memory_listener; > extern int vfio_kvm_device_fd; > > -int vfio_block_multiple_devices_migration(VFIODevice *vbasedev, Error > **errp); > -void vfio_unblock_multiple_devices_migration(void); > bool vfio_viommu_preset(VFIODevice *vbasedev); > bool vfio_device_state_is_running(VFIODevice *vbasedev); > bool vfio_device_state_is_precopy(VFIODevice *vbasedev); > diff --git a/hw/vfio/common.c b/hw/vfio/common.c > index > 4205f4f7ec87e1a2a5e4110eabc8fde835d39c7f..ace7a4403bd49f35cf85009015b3ba315f80cd30 > 100644 > --- a/hw/vfio/common.c > +++ b/hw/vfio/common.c > @@ -41,7 +41,6 @@ > #include "trace.h" > #include "qapi/error.h" > #include "migration/misc.h" > -#include "migration/blocker.h" > #include "migration/qemu-file.h" > #include "system/tcg.h" > #include "system/tpm.h" > @@ -66,67 +65,6 @@ int vfio_kvm_device_fd = -1; > * Device state interfaces > */ > > -static Error *multiple_devices_migration_blocker; > - > -/* > - * 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) > -{ > - VFIODevice *vbasedev; > - unsigned int device_num = 0; > - bool all_support_p2p = true; > - > - QLIST_FOREACH(vbasedev, &vfio_device_list, global_next) { > - if (vbasedev->migration) { > - device_num++; > - > - if (!(vbasedev->migration->mig_flags & VFIO_MIGRATION_P2P)) { > - all_support_p2p = false; > - } > - } > - } > - > - return all_support_p2p || device_num <= 1; > -} > - > -int vfio_block_multiple_devices_migration(VFIODevice *vbasedev, Error **errp) > -{ > - int ret; > - > - if (vfio_multiple_devices_migration_is_supported()) { > - return 0; > - } > - > - if (vbasedev->enable_migration == ON_OFF_AUTO_ON) { > - error_setg(errp, "Multiple VFIO devices migration is supported only > if " > - "all of them support P2P migration"); > - return -EINVAL; > - } > - > - if (multiple_devices_migration_blocker) { > - return 0; > - } > - > - error_setg(&multiple_devices_migration_blocker, > - "Multiple VFIO devices migration is supported only if all of " > - "them support P2P migration"); > - ret = migrate_add_blocker_normal(&multiple_devices_migration_blocker, > errp); > - > - return ret; > -} > - > -void vfio_unblock_multiple_devices_migration(void) > -{ > - if (!multiple_devices_migration_blocker || > - !vfio_multiple_devices_migration_is_supported()) { > - return; > - } > - > - migrate_del_blocker(&multiple_devices_migration_blocker); > -} > > bool vfio_viommu_preset(VFIODevice *vbasedev) > { > diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c > index > 75096377ffecf62b3bab91102a00d723827ea4c7..951e073a20287c46ca199b1648782b59415d0d2a > 100644 > --- a/hw/vfio/migration.c > +++ b/hw/vfio/migration.c > @@ -1022,6 +1022,68 @@ static int vfio_migration_init(VFIODevice *vbasedev) > return 0; > } > > +static Error *multiple_devices_migration_blocker; > + > +/* > + * 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) > +{ > + VFIODevice *vbasedev; > + unsigned int device_num = 0; > + bool all_support_p2p = true; > + > + QLIST_FOREACH(vbasedev, &vfio_device_list, global_next) { > + if (vbasedev->migration) { > + device_num++; > + > + if (!(vbasedev->migration->mig_flags & VFIO_MIGRATION_P2P)) { > + all_support_p2p = false; > + } > + } > + } > + > + return all_support_p2p || device_num <= 1; > +} > + > +static int vfio_block_multiple_devices_migration(VFIODevice *vbasedev, Error > **errp) > +{ > + int ret; > + > + if (vfio_multiple_devices_migration_is_supported()) { > + return 0; > + } > + > + if (vbasedev->enable_migration == ON_OFF_AUTO_ON) { > + error_setg(errp, "Multiple VFIO devices migration is supported only > if " > + "all of them support P2P migration"); > + return -EINVAL; > + } > + > + if (multiple_devices_migration_blocker) { > + return 0; > + } > + > + error_setg(&multiple_devices_migration_blocker, > + "Multiple VFIO devices migration is supported only if all of " > + "them support P2P migration"); > + ret = migrate_add_blocker_normal(&multiple_devices_migration_blocker, > errp); > + > + return ret; > +} > + > +static void vfio_unblock_multiple_devices_migration(void) > +{ > + if (!multiple_devices_migration_blocker || > + !vfio_multiple_devices_migration_is_supported()) { > + return; > + } > + > + migrate_del_blocker(&multiple_devices_migration_blocker); > +} > + > static void vfio_migration_deinit(VFIODevice *vbasedev) > { > VFIOMigration *migration = vbasedev->migration;