mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-29 13:53:33 +00:00
vfio: Split out container code from the init/cleanup functions
This miscdev, noiommu driver and a couple of globals are all container items. Move this init into its own functions. A following patch will move the vfio_container functions to their own .c file. Reviewed-by: Kevin Tian <kevin.tian@intel.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> Link: https://lore.kernel.org/r/5-v3-297af71838d2+b9-vfio_container_split_jgg@nvidia.com Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
This commit is contained in:
parent
444d43ecd0
commit
c41da4622e
1 changed files with 36 additions and 18 deletions
|
@ -2397,15 +2397,11 @@ static struct miscdevice vfio_dev = {
|
|||
.mode = S_IRUGO | S_IWUGO,
|
||||
};
|
||||
|
||||
static int __init vfio_init(void)
|
||||
static int __init vfio_container_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ida_init(&vfio.group_ida);
|
||||
ida_init(&vfio.device_ida);
|
||||
mutex_init(&vfio.group_lock);
|
||||
mutex_init(&vfio.iommu_drivers_lock);
|
||||
INIT_LIST_HEAD(&vfio.group_list);
|
||||
INIT_LIST_HEAD(&vfio.iommu_drivers_list);
|
||||
|
||||
ret = misc_register(&vfio_dev);
|
||||
|
@ -2414,6 +2410,39 @@ static int __init vfio_init(void)
|
|||
return ret;
|
||||
}
|
||||
|
||||
if (IS_ENABLED(CONFIG_VFIO_NOIOMMU)) {
|
||||
ret = vfio_register_iommu_driver(&vfio_noiommu_ops);
|
||||
if (ret)
|
||||
goto err_misc;
|
||||
}
|
||||
return 0;
|
||||
|
||||
err_misc:
|
||||
misc_deregister(&vfio_dev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void vfio_container_cleanup(void)
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_VFIO_NOIOMMU))
|
||||
vfio_unregister_iommu_driver(&vfio_noiommu_ops);
|
||||
misc_deregister(&vfio_dev);
|
||||
mutex_destroy(&vfio.iommu_drivers_lock);
|
||||
}
|
||||
|
||||
static int __init vfio_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ida_init(&vfio.group_ida);
|
||||
ida_init(&vfio.device_ida);
|
||||
mutex_init(&vfio.group_lock);
|
||||
INIT_LIST_HEAD(&vfio.group_list);
|
||||
|
||||
ret = vfio_container_init();
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* /dev/vfio/$GROUP */
|
||||
vfio.class = class_create(THIS_MODULE, "vfio");
|
||||
if (IS_ERR(vfio.class)) {
|
||||
|
@ -2434,17 +2463,9 @@ static int __init vfio_init(void)
|
|||
if (ret)
|
||||
goto err_alloc_chrdev;
|
||||
|
||||
if (IS_ENABLED(CONFIG_VFIO_NOIOMMU)) {
|
||||
ret = vfio_register_iommu_driver(&vfio_noiommu_ops);
|
||||
if (ret)
|
||||
goto err_driver_register;
|
||||
}
|
||||
|
||||
pr_info(DRIVER_DESC " version: " DRIVER_VERSION "\n");
|
||||
return 0;
|
||||
|
||||
err_driver_register:
|
||||
unregister_chrdev_region(vfio.group_devt, MINORMASK + 1);
|
||||
err_alloc_chrdev:
|
||||
class_destroy(vfio.device_class);
|
||||
vfio.device_class = NULL;
|
||||
|
@ -2452,7 +2473,7 @@ static int __init vfio_init(void)
|
|||
class_destroy(vfio.class);
|
||||
vfio.class = NULL;
|
||||
err_group_class:
|
||||
misc_deregister(&vfio_dev);
|
||||
vfio_container_cleanup();
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -2460,17 +2481,14 @@ static void __exit vfio_cleanup(void)
|
|||
{
|
||||
WARN_ON(!list_empty(&vfio.group_list));
|
||||
|
||||
if (IS_ENABLED(CONFIG_VFIO_NOIOMMU))
|
||||
vfio_unregister_iommu_driver(&vfio_noiommu_ops);
|
||||
|
||||
ida_destroy(&vfio.device_ida);
|
||||
ida_destroy(&vfio.group_ida);
|
||||
unregister_chrdev_region(vfio.group_devt, MINORMASK + 1);
|
||||
class_destroy(vfio.device_class);
|
||||
vfio.device_class = NULL;
|
||||
class_destroy(vfio.class);
|
||||
vfio_container_cleanup();
|
||||
vfio.class = NULL;
|
||||
misc_deregister(&vfio_dev);
|
||||
xa_destroy(&vfio_device_set_xa);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue