summaryrefslogtreecommitdiffstats
path: root/drivers/vfio/mdev/mdev_sysfs.c
diff options
context:
space:
mode:
authorJason Gunthorpe <jgg@nvidia.com>2021-04-06 16:40:26 -0300
committerAlex Williamson <alex.williamson@redhat.com>2021-04-07 15:39:16 -0600
commit2a3d15f270efa50d78d8a32d895e9d5396668f3a (patch)
treeb8354fd0e8324a7aa1ea35f9d9c852be6e1ba8d0 /drivers/vfio/mdev/mdev_sysfs.c
parentb5a1f8921d5040bb788492bf33a66758021e4be5 (diff)
downloadlinux-2a3d15f270efa50d78d8a32d895e9d5396668f3a.tar.bz2
vfio/mdev: Add missing typesafety around mdev_device
The mdev API should accept and pass a 'struct mdev_device *' in all places, not pass a 'struct device *' and cast it internally with to_mdev_device(). Particularly in its struct mdev_driver functions, the whole point of a bus's struct device_driver wrapper is to provide type safety compared to the default struct device_driver. Further, the driver core standard is for bus drivers to expose their device structure in their public headers that can be used with container_of() inlines and '&foo->dev' to go between the class levels, and '&foo->dev' to be used with dev_err/etc driver core helper functions. Move 'struct mdev_device' to mdev.h Once done this allows moving some one instruction exported functions to static inlines, which in turns allows removing one of the two grotesque symbol_get()'s related to mdev in the core code. Reviewed-by: Kevin Tian <kevin.tian@intel.com> Reviewed-by: Cornelia Huck <cohuck@redhat.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Message-Id: <3-v2-d36939638fc6+d54-vfio2_jgg@nvidia.com> Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Diffstat (limited to 'drivers/vfio/mdev/mdev_sysfs.c')
-rw-r--r--drivers/vfio/mdev/mdev_sysfs.c26
1 files changed, 15 insertions, 11 deletions
diff --git a/drivers/vfio/mdev/mdev_sysfs.c b/drivers/vfio/mdev/mdev_sysfs.c
index 367ff5412a38..18114f3e090a 100644
--- a/drivers/vfio/mdev/mdev_sysfs.c
+++ b/drivers/vfio/mdev/mdev_sysfs.c
@@ -225,6 +225,7 @@ create_err:
static ssize_t remove_store(struct device *dev, struct device_attribute *attr,
const char *buf, size_t count)
{
+ struct mdev_device *mdev = to_mdev_device(dev);
unsigned long val;
if (kstrtoul(buf, 0, &val) < 0)
@@ -233,7 +234,7 @@ static ssize_t remove_store(struct device *dev, struct device_attribute *attr,
if (val && device_remove_file_self(dev, attr)) {
int ret;
- ret = mdev_device_remove(dev);
+ ret = mdev_device_remove(mdev);
if (ret)
return ret;
}
@@ -248,34 +249,37 @@ static const struct attribute *mdev_device_attrs[] = {
NULL,
};
-int mdev_create_sysfs_files(struct device *dev, struct mdev_type *type)
+int mdev_create_sysfs_files(struct mdev_device *mdev, struct mdev_type *type)
{
+ struct kobject *kobj = &mdev->dev.kobj;
int ret;
- ret = sysfs_create_link(type->devices_kobj, &dev->kobj, dev_name(dev));
+ ret = sysfs_create_link(type->devices_kobj, kobj, dev_name(&mdev->dev));
if (ret)
return ret;
- ret = sysfs_create_link(&dev->kobj, &type->kobj, "mdev_type");
+ ret = sysfs_create_link(kobj, &type->kobj, "mdev_type");
if (ret)
goto type_link_failed;
- ret = sysfs_create_files(&dev->kobj, mdev_device_attrs);
+ ret = sysfs_create_files(kobj, mdev_device_attrs);
if (ret)
goto create_files_failed;
return ret;
create_files_failed:
- sysfs_remove_link(&dev->kobj, "mdev_type");
+ sysfs_remove_link(kobj, "mdev_type");
type_link_failed:
- sysfs_remove_link(type->devices_kobj, dev_name(dev));
+ sysfs_remove_link(type->devices_kobj, dev_name(&mdev->dev));
return ret;
}
-void mdev_remove_sysfs_files(struct device *dev, struct mdev_type *type)
+void mdev_remove_sysfs_files(struct mdev_device *mdev, struct mdev_type *type)
{
- sysfs_remove_files(&dev->kobj, mdev_device_attrs);
- sysfs_remove_link(&dev->kobj, "mdev_type");
- sysfs_remove_link(type->devices_kobj, dev_name(dev));
+ struct kobject *kobj = &mdev->dev.kobj;
+
+ sysfs_remove_files(kobj, mdev_device_attrs);
+ sysfs_remove_link(kobj, "mdev_type");
+ sysfs_remove_link(type->devices_kobj, dev_name(&mdev->dev));
}