aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYi Liu <[email protected]>2023-07-18 06:55:42 -0700
committerAlex Williamson <[email protected]>2023-07-25 10:19:26 -0600
commit38c24544e10a541d92be9d4ec2dfc8a94f4d87ba (patch)
treeb3d7fdec2db9d4f09c700dbab034bbaf66c8ff53
parent291872a533a2cdea8df1ae157987cd7ab3939421 (diff)
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 <[email protected]> Tested-by: Zhenzhong Duan <[email protected]> Tested-by: Yanting Jiang <[email protected]> Signed-off-by: Yi Liu <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Alex Williamson <[email protected]>
-rw-r--r--drivers/vfio/vfio_main.c6
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);
}