diff options
author | Yi Liu <yi.l.liu@intel.com> | 2023-07-18 15:55:42 +0200 |
---|---|---|
committer | Alex Williamson <alex.williamson@redhat.com> | 2023-07-25 18:19:26 +0200 |
commit | 38c24544e10a541d92be9d4ec2dfc8a94f4d87ba (patch) | |
tree | b3d7fdec2db9d4f09c700dbab034bbaf66c8ff53 /drivers/vfio | |
parent | vfio: Move vfio_device_group_unregister() to be the first operation in unregi... (diff) | |
download | linux-38c24544e10a541d92be9d4ec2dfc8a94f4d87ba.tar.xz linux-38c24544e10a541d92be9d4ec2dfc8a94f4d87ba.zip |
vfio: Move device_del() before waiting for the last vfio_device registration refcount
device_del() destroys the vfio-dev/vfioX under the sysfs for vfio_device.
There is no reason to keep it while the device is going to be unregistered.
This movement is also a preparation for adding vfio_device cdev. Kernel
should remove the cdev node of the vfio_device to avoid new registration
refcount increment while the device is going to be unregistered.
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Tested-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
Tested-by: Yanting Jiang <yanting.jiang@intel.com>
Signed-off-by: Yi Liu <yi.l.liu@intel.com>
Link: https://lore.kernel.org/r/20230718135551.6592-18-yi.l.liu@intel.com
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Diffstat (limited to 'drivers/vfio')
-rw-r--r-- | drivers/vfio/vfio_main.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/vfio/vfio_main.c b/drivers/vfio/vfio_main.c index 6d45caa1f9a0..294bb5ecfc1c 100644 --- a/drivers/vfio/vfio_main.c +++ b/drivers/vfio/vfio_main.c @@ -338,6 +338,9 @@ void vfio_unregister_group_dev(struct vfio_device *device) */ vfio_device_group_unregister(device); + /* Balances device_add in register path */ + device_del(&device->device); + vfio_device_put_registration(device); rc = try_wait_for_completion(&device->comp); while (rc <= 0) { @@ -361,9 +364,6 @@ void vfio_unregister_group_dev(struct vfio_device *device) } } - /* Balances device_add in register path */ - device_del(&device->device); - /* Balances vfio_device_set_group in register path */ vfio_device_remove_group(device); } |