vfio: initialize the virqfd workqueue in VFIO generic code
Now we have finally completely decoupled virqfd from VFIO_PCI. We can initialize it from the VFIO generic code, in order to safely use it from multiple independent VFIO bus drivers. Signed-off-by: Antonios Motakis <a.motakis@virtualopensystems.com> Signed-off-by: Baptiste Reynal <b.reynal@virtualopensystems.com> Reviewed-by: Eric Auger <eric.auger@linaro.org> Tested-by: Eric Auger <eric.auger@linaro.org> Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
This commit is contained in:
		
							parent
							
								
									7e992d6927
								
							
						
					
					
						commit
						42ac9bd18d
					
				| @ -1,4 +1,6 @@ | ||||
| obj-$(CONFIG_VFIO) += vfio.o | ||||
| vfio_core-y := vfio.o virqfd.o | ||||
| 
 | ||||
| obj-$(CONFIG_VFIO) += vfio_core.o | ||||
| obj-$(CONFIG_VFIO_IOMMU_TYPE1) += vfio_iommu_type1.o | ||||
| obj-$(CONFIG_VFIO_IOMMU_SPAPR_TCE) += vfio_iommu_spapr_tce.o | ||||
| obj-$(CONFIG_VFIO_SPAPR_EEH) += vfio_spapr_eeh.o | ||||
|  | ||||
| @ -1,5 +1,4 @@ | ||||
| 
 | ||||
| vfio-pci-y := vfio_pci.o vfio_pci_intrs.o vfio_pci_rdwr.o vfio_pci_config.o \
 | ||||
| 	      ../virqfd.o | ||||
| vfio-pci-y := vfio_pci.o vfio_pci_intrs.o vfio_pci_rdwr.o vfio_pci_config.o | ||||
| 
 | ||||
| obj-$(CONFIG_VFIO_PCI) += vfio-pci.o | ||||
|  | ||||
| @ -1030,7 +1030,6 @@ put_devs: | ||||
| static void __exit vfio_pci_cleanup(void) | ||||
| { | ||||
| 	pci_unregister_driver(&vfio_pci_driver); | ||||
| 	vfio_virqfd_exit(); | ||||
| 	vfio_pci_uninit_perm_bits(); | ||||
| } | ||||
| 
 | ||||
| @ -1043,11 +1042,6 @@ static int __init vfio_pci_init(void) | ||||
| 	if (ret) | ||||
| 		return ret; | ||||
| 
 | ||||
| 	/* Start the virqfd cleanup handler */ | ||||
| 	ret = vfio_virqfd_init(); | ||||
| 	if (ret) | ||||
| 		goto out_virqfd; | ||||
| 
 | ||||
| 	/* Register and scan for devices */ | ||||
| 	ret = pci_register_driver(&vfio_pci_driver); | ||||
| 	if (ret) | ||||
| @ -1056,8 +1050,6 @@ static int __init vfio_pci_init(void) | ||||
| 	return 0; | ||||
| 
 | ||||
| out_driver: | ||||
| 	vfio_virqfd_exit(); | ||||
| out_virqfd: | ||||
| 	vfio_pci_uninit_perm_bits(); | ||||
| 	return ret; | ||||
| } | ||||
|  | ||||
| @ -1553,6 +1553,11 @@ static int __init vfio_init(void) | ||||
| 	if (ret) | ||||
| 		goto err_cdev_add; | ||||
| 
 | ||||
| 	/* Start the virqfd cleanup handler used by some VFIO bus drivers */ | ||||
| 	ret = vfio_virqfd_init(); | ||||
| 	if (ret) | ||||
| 		goto err_virqfd; | ||||
| 
 | ||||
| 	pr_info(DRIVER_DESC " version: " DRIVER_VERSION "\n"); | ||||
| 
 | ||||
| 	/*
 | ||||
| @ -1565,6 +1570,8 @@ static int __init vfio_init(void) | ||||
| 
 | ||||
| 	return 0; | ||||
| 
 | ||||
| err_virqfd: | ||||
| 	cdev_del(&vfio.group_cdev); | ||||
| err_cdev_add: | ||||
| 	unregister_chrdev_region(vfio.group_devt, MINORMASK); | ||||
| err_alloc_chrdev: | ||||
| @ -1579,6 +1586,7 @@ static void __exit vfio_cleanup(void) | ||||
| { | ||||
| 	WARN_ON(!list_empty(&vfio.group_list)); | ||||
| 
 | ||||
| 	vfio_virqfd_exit(); | ||||
| 	idr_destroy(&vfio.group_idr); | ||||
| 	cdev_del(&vfio.group_cdev); | ||||
| 	unregister_chrdev_region(vfio.group_devt, MINORMASK); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user