vfio/mdev: Use vfio_init/register/unregister_group_dev
mdev gets little benefit because it doesn't actually do anything, however it is the last user, so move the vfio_init/register/unregister_group_dev() code here for now. 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> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> Message-Id: <10-v3-225de1400dfc+4e074-vfio1_jgg@nvidia.com> Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
This commit is contained in:
parent
6b018e203d
commit
1ae1b20f6f
@ -124,13 +124,29 @@ static const struct vfio_device_ops vfio_mdev_dev_ops = {
|
||||
static int vfio_mdev_probe(struct device *dev)
|
||||
{
|
||||
struct mdev_device *mdev = to_mdev_device(dev);
|
||||
struct vfio_device *vdev;
|
||||
int ret;
|
||||
|
||||
return vfio_add_group_dev(dev, &vfio_mdev_dev_ops, mdev);
|
||||
vdev = kzalloc(sizeof(*vdev), GFP_KERNEL);
|
||||
if (!vdev)
|
||||
return -ENOMEM;
|
||||
|
||||
vfio_init_group_dev(vdev, &mdev->dev, &vfio_mdev_dev_ops, mdev);
|
||||
ret = vfio_register_group_dev(vdev);
|
||||
if (ret) {
|
||||
kfree(vdev);
|
||||
return ret;
|
||||
}
|
||||
dev_set_drvdata(&mdev->dev, vdev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void vfio_mdev_remove(struct device *dev)
|
||||
{
|
||||
vfio_del_group_dev(dev);
|
||||
struct vfio_device *vdev = dev_get_drvdata(dev);
|
||||
|
||||
vfio_unregister_group_dev(vdev);
|
||||
kfree(vdev);
|
||||
}
|
||||
|
||||
static struct mdev_driver vfio_mdev_driver = {
|
||||
|
@ -99,8 +99,8 @@ MODULE_PARM_DESC(enable_unsafe_noiommu_mode, "Enable UNSAFE, no-IOMMU mode. Thi
|
||||
/*
|
||||
* vfio_iommu_group_{get,put} are only intended for VFIO bus driver probe
|
||||
* and remove functions, any use cases other than acquiring the first
|
||||
* reference for the purpose of calling vfio_add_group_dev() or removing
|
||||
* that symmetric reference after vfio_del_group_dev() should use the raw
|
||||
* reference for the purpose of calling vfio_register_group_dev() or removing
|
||||
* that symmetric reference after vfio_unregister_group_dev() should use the raw
|
||||
* iommu_group_{get,put} functions. In particular, vfio_iommu_group_put()
|
||||
* removes the device from the dummy group and cannot be nested.
|
||||
*/
|
||||
@ -799,29 +799,6 @@ int vfio_register_group_dev(struct vfio_device *device)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(vfio_register_group_dev);
|
||||
|
||||
int vfio_add_group_dev(struct device *dev, const struct vfio_device_ops *ops,
|
||||
void *device_data)
|
||||
{
|
||||
struct vfio_device *device;
|
||||
int ret;
|
||||
|
||||
device = kzalloc(sizeof(*device), GFP_KERNEL);
|
||||
if (!device)
|
||||
return -ENOMEM;
|
||||
|
||||
vfio_init_group_dev(device, dev, ops, device_data);
|
||||
ret = vfio_register_group_dev(device);
|
||||
if (ret)
|
||||
goto err_kfree;
|
||||
dev_set_drvdata(dev, device);
|
||||
return 0;
|
||||
|
||||
err_kfree:
|
||||
kfree(device);
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(vfio_add_group_dev);
|
||||
|
||||
/**
|
||||
* Get a reference to the vfio_device for a device. Even if the
|
||||
* caller thinks they own the device, they could be racing with a
|
||||
@ -962,18 +939,6 @@ void vfio_unregister_group_dev(struct vfio_device *device)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(vfio_unregister_group_dev);
|
||||
|
||||
void *vfio_del_group_dev(struct device *dev)
|
||||
{
|
||||
struct vfio_device *device = dev_get_drvdata(dev);
|
||||
void *device_data = device->device_data;
|
||||
|
||||
vfio_unregister_group_dev(device);
|
||||
dev_set_drvdata(dev, NULL);
|
||||
kfree(device);
|
||||
return device_data;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(vfio_del_group_dev);
|
||||
|
||||
/**
|
||||
* VFIO base fd, /dev/vfio/vfio
|
||||
*/
|
||||
|
@ -63,11 +63,6 @@ extern void vfio_iommu_group_put(struct iommu_group *group, struct device *dev);
|
||||
void vfio_init_group_dev(struct vfio_device *device, struct device *dev,
|
||||
const struct vfio_device_ops *ops, void *device_data);
|
||||
int vfio_register_group_dev(struct vfio_device *device);
|
||||
extern int vfio_add_group_dev(struct device *dev,
|
||||
const struct vfio_device_ops *ops,
|
||||
void *device_data);
|
||||
|
||||
extern void *vfio_del_group_dev(struct device *dev);
|
||||
void vfio_unregister_group_dev(struct vfio_device *device);
|
||||
extern struct vfio_device *vfio_device_get_from_dev(struct device *dev);
|
||||
extern void vfio_device_put(struct vfio_device *device);
|
||||
|
Loading…
Reference in New Issue
Block a user