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_TYPE1) += vfio_iommu_type1.o | ||||||
| obj-$(CONFIG_VFIO_IOMMU_SPAPR_TCE) += vfio_iommu_spapr_tce.o | obj-$(CONFIG_VFIO_IOMMU_SPAPR_TCE) += vfio_iommu_spapr_tce.o | ||||||
| obj-$(CONFIG_VFIO_SPAPR_EEH) += vfio_spapr_eeh.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 \
 | vfio-pci-y := vfio_pci.o vfio_pci_intrs.o vfio_pci_rdwr.o vfio_pci_config.o | ||||||
| 	      ../virqfd.o |  | ||||||
| 
 | 
 | ||||||
| obj-$(CONFIG_VFIO_PCI) += vfio-pci.o | obj-$(CONFIG_VFIO_PCI) += vfio-pci.o | ||||||
|  | |||||||
| @ -1030,7 +1030,6 @@ put_devs: | |||||||
| static void __exit vfio_pci_cleanup(void) | static void __exit vfio_pci_cleanup(void) | ||||||
| { | { | ||||||
| 	pci_unregister_driver(&vfio_pci_driver); | 	pci_unregister_driver(&vfio_pci_driver); | ||||||
| 	vfio_virqfd_exit(); |  | ||||||
| 	vfio_pci_uninit_perm_bits(); | 	vfio_pci_uninit_perm_bits(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -1043,11 +1042,6 @@ static int __init vfio_pci_init(void) | |||||||
| 	if (ret) | 	if (ret) | ||||||
| 		return ret; | 		return ret; | ||||||
| 
 | 
 | ||||||
| 	/* Start the virqfd cleanup handler */ |  | ||||||
| 	ret = vfio_virqfd_init(); |  | ||||||
| 	if (ret) |  | ||||||
| 		goto out_virqfd; |  | ||||||
| 
 |  | ||||||
| 	/* Register and scan for devices */ | 	/* Register and scan for devices */ | ||||||
| 	ret = pci_register_driver(&vfio_pci_driver); | 	ret = pci_register_driver(&vfio_pci_driver); | ||||||
| 	if (ret) | 	if (ret) | ||||||
| @ -1056,8 +1050,6 @@ static int __init vfio_pci_init(void) | |||||||
| 	return 0; | 	return 0; | ||||||
| 
 | 
 | ||||||
| out_driver: | out_driver: | ||||||
| 	vfio_virqfd_exit(); |  | ||||||
| out_virqfd: |  | ||||||
| 	vfio_pci_uninit_perm_bits(); | 	vfio_pci_uninit_perm_bits(); | ||||||
| 	return ret; | 	return ret; | ||||||
| } | } | ||||||
|  | |||||||
| @ -1553,6 +1553,11 @@ static int __init vfio_init(void) | |||||||
| 	if (ret) | 	if (ret) | ||||||
| 		goto err_cdev_add; | 		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"); | 	pr_info(DRIVER_DESC " version: " DRIVER_VERSION "\n"); | ||||||
| 
 | 
 | ||||||
| 	/*
 | 	/*
 | ||||||
| @ -1565,6 +1570,8 @@ static int __init vfio_init(void) | |||||||
| 
 | 
 | ||||||
| 	return 0; | 	return 0; | ||||||
| 
 | 
 | ||||||
|  | err_virqfd: | ||||||
|  | 	cdev_del(&vfio.group_cdev); | ||||||
| err_cdev_add: | err_cdev_add: | ||||||
| 	unregister_chrdev_region(vfio.group_devt, MINORMASK); | 	unregister_chrdev_region(vfio.group_devt, MINORMASK); | ||||||
| err_alloc_chrdev: | err_alloc_chrdev: | ||||||
| @ -1579,6 +1586,7 @@ static void __exit vfio_cleanup(void) | |||||||
| { | { | ||||||
| 	WARN_ON(!list_empty(&vfio.group_list)); | 	WARN_ON(!list_empty(&vfio.group_list)); | ||||||
| 
 | 
 | ||||||
|  | 	vfio_virqfd_exit(); | ||||||
| 	idr_destroy(&vfio.group_idr); | 	idr_destroy(&vfio.group_idr); | ||||||
| 	cdev_del(&vfio.group_cdev); | 	cdev_del(&vfio.group_cdev); | ||||||
| 	unregister_chrdev_region(vfio.group_devt, MINORMASK); | 	unregister_chrdev_region(vfio.group_devt, MINORMASK); | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user