mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-17 01:54:01 +08:00
vfio/fsl-mc: Use vfio_init/register/unregister_group_dev
fsl-mc already allocates a struct vfio_fsl_mc_device with exactly the same lifetime as vfio_device, switch to the new API and embed vfio_device in vfio_fsl_mc_device. While here remove the devm usage for the vdev, this code is clean and doesn't need devm. Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Cornelia Huck <cohuck@redhat.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> Message-Id: <6-v3-225de1400dfc+4e074-vfio1_jgg@nvidia.com> Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
This commit is contained in:
parent
2b1fe162e5
commit
0ca78666fa
@ -616,24 +616,25 @@ static int vfio_fsl_mc_probe(struct fsl_mc_device *mc_dev)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
vdev = devm_kzalloc(dev, sizeof(*vdev), GFP_KERNEL);
|
||||
vdev = kzalloc(sizeof(*vdev), GFP_KERNEL);
|
||||
if (!vdev) {
|
||||
ret = -ENOMEM;
|
||||
goto out_group_put;
|
||||
}
|
||||
|
||||
vfio_init_group_dev(&vdev->vdev, dev, &vfio_fsl_mc_ops, vdev);
|
||||
vdev->mc_dev = mc_dev;
|
||||
mutex_init(&vdev->igate);
|
||||
|
||||
ret = vfio_fsl_mc_reflck_attach(vdev);
|
||||
if (ret)
|
||||
goto out_group_put;
|
||||
goto out_kfree;
|
||||
|
||||
ret = vfio_fsl_mc_init_device(vdev);
|
||||
if (ret)
|
||||
goto out_reflck;
|
||||
|
||||
ret = vfio_add_group_dev(dev, &vfio_fsl_mc_ops, vdev);
|
||||
ret = vfio_register_group_dev(&vdev->vdev);
|
||||
if (ret) {
|
||||
dev_err(dev, "VFIO_FSL_MC: Failed to add to vfio group\n");
|
||||
goto out_device;
|
||||
@ -648,14 +649,17 @@ static int vfio_fsl_mc_probe(struct fsl_mc_device *mc_dev)
|
||||
ret = vfio_fsl_mc_scan_container(mc_dev);
|
||||
if (ret)
|
||||
goto out_group_dev;
|
||||
dev_set_drvdata(dev, vdev);
|
||||
return 0;
|
||||
|
||||
out_group_dev:
|
||||
vfio_del_group_dev(dev);
|
||||
vfio_unregister_group_dev(&vdev->vdev);
|
||||
out_device:
|
||||
vfio_fsl_uninit_device(vdev);
|
||||
out_reflck:
|
||||
vfio_fsl_mc_reflck_put(vdev->reflck);
|
||||
out_kfree:
|
||||
kfree(vdev);
|
||||
out_group_put:
|
||||
vfio_iommu_group_put(group, dev);
|
||||
return ret;
|
||||
@ -663,19 +667,17 @@ out_group_put:
|
||||
|
||||
static int vfio_fsl_mc_remove(struct fsl_mc_device *mc_dev)
|
||||
{
|
||||
struct vfio_fsl_mc_device *vdev;
|
||||
struct device *dev = &mc_dev->dev;
|
||||
struct vfio_fsl_mc_device *vdev = dev_get_drvdata(dev);
|
||||
|
||||
vdev = vfio_del_group_dev(dev);
|
||||
if (!vdev)
|
||||
return -EINVAL;
|
||||
|
||||
vfio_unregister_group_dev(&vdev->vdev);
|
||||
mutex_destroy(&vdev->igate);
|
||||
|
||||
dprc_remove_devices(mc_dev, NULL, 0);
|
||||
vfio_fsl_uninit_device(vdev);
|
||||
vfio_fsl_mc_reflck_put(vdev->reflck);
|
||||
|
||||
kfree(vdev);
|
||||
vfio_iommu_group_put(mc_dev->dev.iommu_group, dev);
|
||||
|
||||
return 0;
|
||||
|
@ -36,6 +36,7 @@ struct vfio_fsl_mc_region {
|
||||
};
|
||||
|
||||
struct vfio_fsl_mc_device {
|
||||
struct vfio_device vdev;
|
||||
struct fsl_mc_device *mc_dev;
|
||||
struct notifier_block nb;
|
||||
int refcnt;
|
||||
|
Loading…
Reference in New Issue
Block a user