vfio/pci: Use vfio_init/register/unregister_group_dev
authorJason Gunthorpe <jgg@nvidia.com>
Tue, 30 Mar 2021 15:53:07 +0000 (09:53 -0600)
committerAlex Williamson <alex.williamson@redhat.com>
Tue, 6 Apr 2021 17:55:10 +0000 (11:55 -0600)
pci already allocates a struct vfio_pci_device with exactly the same
lifetime as vfio_device, switch to the new API and embed vfio_device in
vfio_pci_device.

Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Liu Yi L <yi.l.liu@intel.com>
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Message-Id: <9-v3-225de1400dfc+4e074-vfio1_jgg@nvidia.com>
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
drivers/vfio/pci/vfio_pci.c
drivers/vfio/pci/vfio_pci_private.h

index 0e7682e..a0ac20a 100644 (file)
@@ -2019,6 +2019,7 @@ static int vfio_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
                goto out_group_put;
        }
 
+       vfio_init_group_dev(&vdev->vdev, &pdev->dev, &vfio_pci_ops, vdev);
        vdev->pdev = pdev;
        vdev->irq_type = VFIO_PCI_NUM_IRQS;
        mutex_init(&vdev->igate);
@@ -2056,9 +2057,10 @@ static int vfio_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
                vfio_pci_set_power_state(vdev, PCI_D3hot);
        }
 
-       ret = vfio_add_group_dev(&pdev->dev, &vfio_pci_ops, vdev);
+       ret = vfio_register_group_dev(&vdev->vdev);
        if (ret)
                goto out_power;
+       dev_set_drvdata(&pdev->dev, vdev);
        return 0;
 
 out_power:
@@ -2078,13 +2080,11 @@ out_group_put:
 
 static void vfio_pci_remove(struct pci_dev *pdev)
 {
-       struct vfio_pci_device *vdev;
+       struct vfio_pci_device *vdev = dev_get_drvdata(&pdev->dev);
 
        pci_disable_sriov(pdev);
 
-       vdev = vfio_del_group_dev(&pdev->dev);
-       if (!vdev)
-               return;
+       vfio_unregister_group_dev(&vdev->vdev);
 
        vfio_pci_vf_uninit(vdev);
        vfio_pci_reflck_put(vdev->reflck);
index 9cd1882..8755a0f 100644 (file)
@@ -100,6 +100,7 @@ struct vfio_pci_mmap_vma {
 };
 
 struct vfio_pci_device {
+       struct vfio_device      vdev;
        struct pci_dev          *pdev;
        void __iomem            *barmap[PCI_STD_NUM_BARS];
        bool                    bar_mmap_supported[PCI_STD_NUM_BARS];