Hi, On 3/13/21 1:56 AM, Jason Gunthorpe wrote: > 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@xxxxxx> > Reviewed-by: Liu Yi L <yi.l.liu@xxxxxxxxx> > Signed-off-by: Jason Gunthorpe <jgg@xxxxxxxxxx> Reviewed-by: Eric Auger <eric.auger@xxxxxxxxxx> Eric > --- > drivers/vfio/pci/vfio_pci.c | 10 +++++----- > drivers/vfio/pci/vfio_pci_private.h | 1 + > 2 files changed, 6 insertions(+), 5 deletions(-) > > diff --git a/drivers/vfio/pci/vfio_pci.c b/drivers/vfio/pci/vfio_pci.c > index 0e7682e7a0b478..a0ac20a499cf6c 100644 > --- a/drivers/vfio/pci/vfio_pci.c > +++ b/drivers/vfio/pci/vfio_pci.c > @@ -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 @@ static int vfio_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) > > 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); > diff --git a/drivers/vfio/pci/vfio_pci_private.h b/drivers/vfio/pci/vfio_pci_private.h > index 9cd1882a05af69..8755a0febd054a 100644 > --- a/drivers/vfio/pci/vfio_pci_private.h > +++ b/drivers/vfio/pci/vfio_pci_private.h > @@ -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]; >