On Tue, 19 Jan 2021 09:48:28 -0800 Steve Sistare <steven.sistare@xxxxxxxxxx> wrote: > Implement a notify callback that remembers if the container's file > descriptor has been closed. > > Signed-off-by: Steve Sistare <steven.sistare@xxxxxxxxxx> > --- > drivers/vfio/vfio_iommu_type1.c | 15 +++++++++++++++ > 1 file changed, 15 insertions(+) > > diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c > index c307f62..0167996 100644 > --- a/drivers/vfio/vfio_iommu_type1.c > +++ b/drivers/vfio/vfio_iommu_type1.c > @@ -74,6 +74,7 @@ struct vfio_iommu { > bool nesting; > bool dirty_page_tracking; > bool pinned_page_dirty_scope; > + bool controlled; s/controlled/container_open/? Thanks, Alex > }; > > struct vfio_domain { > @@ -2518,6 +2519,7 @@ static void *vfio_iommu_type1_open(unsigned long arg) > INIT_LIST_HEAD(&iommu->iova_list); > iommu->dma_list = RB_ROOT; > iommu->dma_avail = dma_entry_limit; > + iommu->controlled = true; > mutex_init(&iommu->lock); > BLOCKING_INIT_NOTIFIER_HEAD(&iommu->notifier); > > @@ -3043,6 +3045,18 @@ static int vfio_iommu_type1_dma_rw(void *iommu_data, dma_addr_t user_iova, > return ret; > } > > +static void vfio_iommu_type1_notify(void *iommu_data, unsigned int event, > + void *data) > +{ > + struct vfio_iommu *iommu = iommu_data; > + > + if (event != VFIO_DRIVER_NOTIFY_CONTAINER_CLOSE) > + return; > + mutex_lock(&iommu->lock); > + iommu->controlled = false; > + mutex_unlock(&iommu->lock); > +} > + > static const struct vfio_iommu_driver_ops vfio_iommu_driver_ops_type1 = { > .name = "vfio-iommu-type1", > .owner = THIS_MODULE, > @@ -3056,6 +3070,7 @@ static int vfio_iommu_type1_dma_rw(void *iommu_data, dma_addr_t user_iova, > .register_notifier = vfio_iommu_type1_register_notifier, > .unregister_notifier = vfio_iommu_type1_unregister_notifier, > .dma_rw = vfio_iommu_type1_dma_rw, > + .notify = vfio_iommu_type1_notify, > }; > > static int __init vfio_iommu_type1_init(void)