On Sat, 5 Nov 2022 15:44:57 -0700 Anthony DeRossi <ajderossi@xxxxxxxxx> wrote: > The open count of a device set is the sum of the open counts of all > devices in the set. Drivers can use this value to determine whether > shared resources are in use without tracking them manually or accessing > the private open_count in vfio_device. > > Signed-off-by: Anthony DeRossi <ajderossi@xxxxxxxxx> > --- > drivers/vfio/vfio_main.c | 11 +++++++++++ > include/linux/vfio.h | 1 + > 2 files changed, 12 insertions(+) > > diff --git a/drivers/vfio/vfio_main.c b/drivers/vfio/vfio_main.c > index 9a4af880e941..ab34faabcebb 100644 > --- a/drivers/vfio/vfio_main.c > +++ b/drivers/vfio/vfio_main.c > @@ -125,6 +125,17 @@ static void vfio_release_device_set(struct vfio_device *device) > xa_unlock(&vfio_device_set_xa); > } > > +unsigned int vfio_device_set_open_count(struct vfio_device_set *dev_set) > +{ > + struct vfio_device *cur; > + unsigned int open_count = 0; This can only be called while holding the dev_set->lock, so we should have an assert here: lockdep_assert_held(&dev_set->lock); The series looks ok to me otherwise, hopefully we'll get some additional reviews. Thanks, Alex > + > + list_for_each_entry(cur, &dev_set->device_list, dev_set_list) > + open_count += cur->open_count; > + return open_count; > +} > +EXPORT_SYMBOL_GPL(vfio_device_set_open_count); > + > /* > * Group objects - create, release, get, put, search > */ > diff --git a/include/linux/vfio.h b/include/linux/vfio.h > index e7cebeb875dd..fdd393f70b19 100644 > --- a/include/linux/vfio.h > +++ b/include/linux/vfio.h > @@ -189,6 +189,7 @@ int vfio_register_emulated_iommu_dev(struct vfio_device *device); > void vfio_unregister_group_dev(struct vfio_device *device); > > int vfio_assign_device_set(struct vfio_device *device, void *set_id); > +unsigned int vfio_device_set_open_count(struct vfio_device_set *dev_set); > > int vfio_mig_get_next_state(struct vfio_device *device, > enum vfio_device_mig_state cur_fsm,