mirror of
https://github.com/hardkernel/linux.git
synced 2026-03-24 19:40:21 +09:00
vfio/mdev: embedd struct mdev_parent in the parent data structure
Simplify mdev_{un}register_device by requiring the caller to pass in
a structure allocate as part of the parent device structure. This
removes the need for a list of parents and the separate mdev_parent
refcount as we can simplify rely on the reference to the parent device.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Reviewed-by: Tony Krowiak <akrowiak@linux.ibm.com>
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Reviewed-by: Kirti Wankhede <kwankhede@nvidia.com>
Reviewed-by: Eric Farman <farman@linux.ibm.com>
Link: https://lore.kernel.org/r/20220923092652.100656-5-hch@lst.de
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
This commit is contained in:
committed by
Alex Williamson
parent
bdef2b7896
commit
89345d5177
@@ -128,6 +128,7 @@ static dev_t mbochs_devt;
|
||||
static struct class *mbochs_class;
|
||||
static struct cdev mbochs_cdev;
|
||||
static struct device mbochs_dev;
|
||||
static struct mdev_parent mbochs_parent;
|
||||
static atomic_t mbochs_avail_mbytes;
|
||||
static const struct vfio_device_ops mbochs_dev_ops;
|
||||
|
||||
@@ -1475,7 +1476,7 @@ static int __init mbochs_dev_init(void)
|
||||
if (ret)
|
||||
goto err_class;
|
||||
|
||||
ret = mdev_register_device(&mbochs_dev, &mbochs_driver);
|
||||
ret = mdev_register_parent(&mbochs_parent, &mbochs_dev, &mbochs_driver);
|
||||
if (ret)
|
||||
goto err_device;
|
||||
|
||||
@@ -1496,7 +1497,7 @@ err_cdev:
|
||||
static void __exit mbochs_dev_exit(void)
|
||||
{
|
||||
mbochs_dev.bus = NULL;
|
||||
mdev_unregister_device(&mbochs_dev);
|
||||
mdev_unregister_parent(&mbochs_parent);
|
||||
|
||||
device_unregister(&mbochs_dev);
|
||||
mdev_unregister_driver(&mbochs_driver);
|
||||
|
||||
@@ -83,6 +83,7 @@ static dev_t mdpy_devt;
|
||||
static struct class *mdpy_class;
|
||||
static struct cdev mdpy_cdev;
|
||||
static struct device mdpy_dev;
|
||||
static struct mdev_parent mdpy_parent;
|
||||
static u32 mdpy_count;
|
||||
static const struct vfio_device_ops mdpy_dev_ops;
|
||||
|
||||
@@ -778,7 +779,7 @@ static int __init mdpy_dev_init(void)
|
||||
if (ret)
|
||||
goto err_class;
|
||||
|
||||
ret = mdev_register_device(&mdpy_dev, &mdpy_driver);
|
||||
ret = mdev_register_parent(&mdpy_parent, &mdpy_dev, &mdpy_driver);
|
||||
if (ret)
|
||||
goto err_device;
|
||||
|
||||
@@ -799,7 +800,7 @@ err_cdev:
|
||||
static void __exit mdpy_dev_exit(void)
|
||||
{
|
||||
mdpy_dev.bus = NULL;
|
||||
mdev_unregister_device(&mdpy_dev);
|
||||
mdev_unregister_parent(&mdpy_parent);
|
||||
|
||||
device_unregister(&mdpy_dev);
|
||||
mdev_unregister_driver(&mdpy_driver);
|
||||
|
||||
@@ -72,6 +72,7 @@ static struct mtty_dev {
|
||||
struct cdev vd_cdev;
|
||||
struct idr vd_idr;
|
||||
struct device dev;
|
||||
struct mdev_parent parent;
|
||||
} mtty_dev;
|
||||
|
||||
struct mdev_region_info {
|
||||
@@ -1361,7 +1362,8 @@ static int __init mtty_dev_init(void)
|
||||
if (ret)
|
||||
goto err_class;
|
||||
|
||||
ret = mdev_register_device(&mtty_dev.dev, &mtty_driver);
|
||||
ret = mdev_register_parent(&mtty_dev.parent, &mtty_dev.dev,
|
||||
&mtty_driver);
|
||||
if (ret)
|
||||
goto err_device;
|
||||
return 0;
|
||||
@@ -1381,7 +1383,7 @@ err_cdev:
|
||||
static void __exit mtty_dev_exit(void)
|
||||
{
|
||||
mtty_dev.dev.bus = NULL;
|
||||
mdev_unregister_device(&mtty_dev.dev);
|
||||
mdev_unregister_parent(&mtty_dev.parent);
|
||||
|
||||
device_unregister(&mtty_dev.dev);
|
||||
idr_destroy(&mtty_dev.vd_idr);
|
||||
|
||||
Reference in New Issue
Block a user