On Mon, 26 Nov 2018 16:48:53 +0800 Zhenyu Wang <zhenyuw@xxxxxxxxxxxxxxx> wrote: > For mdev device created by "aggregate" parameter, this creates new mdev > device attribute "aggregated_instances" to show number of aggregated > instances allocated. > > v2: > - change attribute name as "aggregated_instances" > > v3: > - create only for aggregated allocation > > Cc: Kirti Wankhede <kwankhede@xxxxxxxxxx> > Cc: Alex Williamson <alex.williamson@xxxxxxxxxx> > Cc: Kevin Tian <kevin.tian@xxxxxxxxx> > Cc: Cornelia Huck <cohuck@xxxxxxxxxx> > Signed-off-by: Zhenyu Wang <zhenyuw@xxxxxxxxxxxxxxx> > --- > drivers/vfio/mdev/mdev_sysfs.c | 20 ++++++++++++++++++++ > 1 file changed, 20 insertions(+) > > diff --git a/drivers/vfio/mdev/mdev_sysfs.c b/drivers/vfio/mdev/mdev_sysfs.c > index a329d6ab6cb9..f03bdfbf5a42 100644 > --- a/drivers/vfio/mdev/mdev_sysfs.c > +++ b/drivers/vfio/mdev/mdev_sysfs.c > @@ -292,7 +292,17 @@ static ssize_t remove_store(struct device *dev, struct device_attribute *attr, > return count; > } > > +static ssize_t > +aggregated_instances_show(struct device *dev, > + struct device_attribute *attr, > + char *buf) > +{ > + struct mdev_device *mdev = to_mdev_device(dev); > + return sprintf(buf, "%u\n", mdev->type_instances); > +} > + > static DEVICE_ATTR_WO(remove); > +static DEVICE_ATTR_RO(aggregated_instances); > > static const struct attribute *mdev_device_attrs[] = { > &dev_attr_remove.attr, > @@ -301,6 +311,7 @@ static const struct attribute *mdev_device_attrs[] = { > > int mdev_create_sysfs_files(struct device *dev, struct mdev_type *type) > { > + struct mdev_device *mdev = to_mdev_device(dev); > int ret; > > ret = sysfs_create_link(type->devices_kobj, &dev->kobj, dev_name(dev)); > @@ -315,8 +326,17 @@ int mdev_create_sysfs_files(struct device *dev, struct mdev_type *type) > if (ret) > goto create_files_failed; > > + if (mdev->type_instances > 1) { > + ret = sysfs_create_file(&dev->kobj, > + &dev_attr_aggregated_instances.attr); > + if (ret) > + goto create_aggregated_failed; > + } > + > return ret; > > +create_aggregated_failed: > + sysfs_remove_files(&dev->kobj, mdev_device_attrs); > create_files_failed: > sysfs_remove_link(&dev->kobj, "mdev_type"); > type_link_failed: Where's the matching entry in mdev_remove_sysfs_files()? Thanks, Alex