On Sun, 21 Jun 2020 01:51:25 +0530 Kirti Wankhede <kwankh...@nvidia.com> wrote:
> If device is not failover primary device call vfio_migration_probe() > and vfio_migration_finalize() functions for vfio-pci device to enable > migration for vfio PCI device which support migration. "If the device is not a failover primary device, call vfio_migration_probe() and vfio_migration_finalize() to enable migration support for those devices that support it respectively to tear it down again." ? > Removed vfio_pci_vmstate structure. > Removed migration blocker from VFIO PCI device specific structure and use > migration blocker from generic structure of VFIO device. > > Signed-off-by: Kirti Wankhede <kwankh...@nvidia.com> > Reviewed-by: Neo Jia <c...@nvidia.com> > Reviewed-by: Dr. David Alan Gilbert <dgilb...@redhat.com> > --- > hw/vfio/pci.c | 32 +++++++++++--------------------- > hw/vfio/pci.h | 1 - > 2 files changed, 11 insertions(+), 22 deletions(-) > > diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c > index 5ba340aee1d4..9dc2868993fb 100644 > --- a/hw/vfio/pci.c > +++ b/hw/vfio/pci.c > @@ -2841,22 +2841,11 @@ static void vfio_realize(PCIDevice *pdev, Error > **errp) > return; > } > > - if (!pdev->failover_pair_id) { > - error_setg(&vdev->migration_blocker, > - "VFIO device doesn't support migration"); > - ret = migrate_add_blocker(vdev->migration_blocker, &err); > - if (ret) { > - error_propagate(errp, err); > - error_free(vdev->migration_blocker); > - vdev->migration_blocker = NULL; > - return; > - } > - } > - > vdev->vbasedev.name = g_path_get_basename(vdev->vbasedev.sysfsdev); > vdev->vbasedev.ops = &vfio_pci_ops; > vdev->vbasedev.type = VFIO_DEVICE_TYPE_PCI; > vdev->vbasedev.dev = DEVICE(vdev); > + vdev->vbasedev.device_state = 0; > > tmp = g_strdup_printf("%s/iommu_group", vdev->vbasedev.sysfsdev); > len = readlink(tmp, group_path, sizeof(group_path)); > @@ -3120,6 +3109,14 @@ static void vfio_realize(PCIDevice *pdev, Error **errp) > } > } > > + if (!pdev->failover_pair_id) { > + ret = vfio_migration_probe(&vdev->vbasedev, errp); > + if (ret) { > + error_report("%s: Failed to setup for migration", "%s: migration not enabled" ? (Although I wonder how often we need to moan here, given that the called function already prints error reports.) > + vdev->vbasedev.name); > + } > + } > + > vfio_register_err_notifier(vdev); > vfio_register_req_notifier(vdev); > vfio_setup_resetfn_quirk(vdev); LGTM.