On Tue, 5 Jan 2021 07:36:51 -0800 Steve Sistare <steven.sistare@xxxxxxxxxx> wrote: > Add a function that detects if an iommu_group has a valid container. > > Signed-off-by: Steve Sistare <steven.sistare@xxxxxxxxxx> > --- > drivers/vfio/vfio.c | 12 ++++++++++++ > include/linux/vfio.h | 1 + > 2 files changed, 13 insertions(+) > > diff --git a/drivers/vfio/vfio.c b/drivers/vfio/vfio.c > index 262ab0e..f89ab80 100644 > --- a/drivers/vfio/vfio.c > +++ b/drivers/vfio/vfio.c > @@ -61,6 +61,7 @@ struct vfio_container { > struct vfio_iommu_driver *iommu_driver; > void *iommu_data; > bool noiommu; > + bool closed; > }; > > struct vfio_unbound_dev { > @@ -1223,6 +1224,7 @@ static int vfio_fops_release(struct inode *inode, struct file *filep) > > filep->private_data = NULL; > > + container->closed = true; > vfio_container_put(container); > > return 0; > @@ -2216,6 +2218,16 @@ void vfio_group_set_kvm(struct vfio_group *group, struct kvm *kvm) > } > EXPORT_SYMBOL_GPL(vfio_group_set_kvm); > > +bool vfio_iommu_group_contained(struct iommu_group *iommu_group) > +{ > + struct vfio_group *group = vfio_group_get_from_iommu(iommu_group); > + bool ret = group && group->container && !group->container->closed; > + > + vfio_group_put(group); > + return ret; > +} > +EXPORT_SYMBOL_GPL(vfio_iommu_group_contained); This seems like a pointless interface, the result is immediately stale. Anything that relies on the container staying open needs to add itself as a user. We already have some interfaces for that, ex. vfio_group_get_external_user(). Thanks, Alex > + > static int vfio_register_group_notifier(struct vfio_group *group, > unsigned long *events, > struct notifier_block *nb) > diff --git a/include/linux/vfio.h b/include/linux/vfio.h > index 38d3c6a..b2724e7 100644 > --- a/include/linux/vfio.h > +++ b/include/linux/vfio.h > @@ -148,6 +148,7 @@ extern int vfio_unregister_notifier(struct device *dev, > > struct kvm; > extern void vfio_group_set_kvm(struct vfio_group *group, struct kvm *kvm); > +extern bool vfio_iommu_group_contained(struct iommu_group *group); > > /* > * Sub-module helpers