Commit 9446162e authored by Jason Gunthorpe's avatar Jason Gunthorpe Committed by Alex Williamson

vfio: Split the register_device ops call into functions

This is a container item.

A following patch will move the vfio_container functions to their own .c
file.
Reviewed-by: default avatarKevin Tian <kevin.tian@intel.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
Link: https://lore.kernel.org/r/7-v3-297af71838d2+b9-vfio_container_split_jgg@nvidia.comSigned-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
parent 1408640d
...@@ -1226,9 +1226,28 @@ static void vfio_device_unassign_container(struct vfio_device *device) ...@@ -1226,9 +1226,28 @@ static void vfio_device_unassign_container(struct vfio_device *device)
up_write(&device->group->group_rwsem); up_write(&device->group->group_rwsem);
} }
static void vfio_device_container_register(struct vfio_device *device)
{
struct vfio_iommu_driver *iommu_driver =
device->group->container->iommu_driver;
if (iommu_driver && iommu_driver->ops->register_device)
iommu_driver->ops->register_device(
device->group->container->iommu_data, device);
}
static void vfio_device_container_unregister(struct vfio_device *device)
{
struct vfio_iommu_driver *iommu_driver =
device->group->container->iommu_driver;
if (iommu_driver && iommu_driver->ops->unregister_device)
iommu_driver->ops->unregister_device(
device->group->container->iommu_data, device);
}
static struct file *vfio_device_open(struct vfio_device *device) static struct file *vfio_device_open(struct vfio_device *device)
{ {
struct vfio_iommu_driver *iommu_driver;
struct file *filep; struct file *filep;
int ret; int ret;
...@@ -1259,12 +1278,7 @@ static struct file *vfio_device_open(struct vfio_device *device) ...@@ -1259,12 +1278,7 @@ static struct file *vfio_device_open(struct vfio_device *device)
if (ret) if (ret)
goto err_undo_count; goto err_undo_count;
} }
vfio_device_container_register(device);
iommu_driver = device->group->container->iommu_driver;
if (iommu_driver && iommu_driver->ops->register_device)
iommu_driver->ops->register_device(
device->group->container->iommu_data, device);
up_read(&device->group->group_rwsem); up_read(&device->group->group_rwsem);
} }
mutex_unlock(&device->dev_set->lock); mutex_unlock(&device->dev_set->lock);
...@@ -1302,10 +1316,7 @@ static struct file *vfio_device_open(struct vfio_device *device) ...@@ -1302,10 +1316,7 @@ static struct file *vfio_device_open(struct vfio_device *device)
if (device->open_count == 1 && device->ops->close_device) { if (device->open_count == 1 && device->ops->close_device) {
device->ops->close_device(device); device->ops->close_device(device);
iommu_driver = device->group->container->iommu_driver; vfio_device_container_unregister(device);
if (iommu_driver && iommu_driver->ops->unregister_device)
iommu_driver->ops->unregister_device(
device->group->container->iommu_data, device);
} }
err_undo_count: err_undo_count:
up_read(&device->group->group_rwsem); up_read(&device->group->group_rwsem);
...@@ -1513,7 +1524,6 @@ static inline void vfio_device_pm_runtime_put(struct vfio_device *device) ...@@ -1513,7 +1524,6 @@ static inline void vfio_device_pm_runtime_put(struct vfio_device *device)
static int vfio_device_fops_release(struct inode *inode, struct file *filep) static int vfio_device_fops_release(struct inode *inode, struct file *filep)
{ {
struct vfio_device *device = filep->private_data; struct vfio_device *device = filep->private_data;
struct vfio_iommu_driver *iommu_driver;
mutex_lock(&device->dev_set->lock); mutex_lock(&device->dev_set->lock);
vfio_assert_device_open(device); vfio_assert_device_open(device);
...@@ -1521,10 +1531,7 @@ static int vfio_device_fops_release(struct inode *inode, struct file *filep) ...@@ -1521,10 +1531,7 @@ static int vfio_device_fops_release(struct inode *inode, struct file *filep)
if (device->open_count == 1 && device->ops->close_device) if (device->open_count == 1 && device->ops->close_device)
device->ops->close_device(device); device->ops->close_device(device);
iommu_driver = device->group->container->iommu_driver; vfio_device_container_unregister(device);
if (iommu_driver && iommu_driver->ops->unregister_device)
iommu_driver->ops->unregister_device(
device->group->container->iommu_data, device);
up_read(&device->group->group_rwsem); up_read(&device->group->group_rwsem);
device->open_count--; device->open_count--;
if (device->open_count == 0) if (device->open_count == 0)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment