> From: Jason Gunthorpe > Sent: Wednesday, June 8, 2022 7:02 AM > > Instead of bouncing the function call to the driver op through a blocking > notifier just have the iommu layer call it directly. > > Register each device that is being attached to the iommu with the lower > driver which then threads them on a linked list and calls the appropriate > driver op at the right time. > > Currently the only use is if dma_unmap() is defined. > > Also, fully lock all the debugging tests on the pinning path that a > dma_unmap is registered. > ... > Signed-off-by: Jason Gunthorpe <jgg@xxxxxxxxxx> > diff --git a/drivers/vfio/vfio_iommu_type1.c > b/drivers/vfio/vfio_iommu_type1.c > index c13b9290e35759..4ddb1f1abd238b 100644 > --- a/drivers/vfio/vfio_iommu_type1.c > +++ b/drivers/vfio/vfio_iommu_type1.c > @@ -67,7 +67,8 @@ struct vfio_iommu { > struct list_head iova_list; > struct mutex lock; > struct rb_root dma_list; > - struct blocking_notifier_head notifier; > + struct list_head device_list; > + struct mutex device_list_lock; emulated_device_list or unmap_device_list, to be more accurate? btw a few lines downward there is already a emulated_iommu_groups. the two sounds a bit overlapping given mdev's iommu group is faked and singleton. Wonder whether it's cleaner to just reuse the existing field...