|
@@ -494,27 +494,6 @@ static int vfio_group_nb_add_dev(struct vfio_group *group, struct device *dev)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int vfio_group_nb_del_dev(struct vfio_group *group, struct device *dev)
|
|
|
-{
|
|
|
- struct vfio_device *device;
|
|
|
-
|
|
|
- /*
|
|
|
- * Expect to fall out here. If a device was in use, it would
|
|
|
- * have been bound to a vfio sub-driver, which would have blocked
|
|
|
- * in .remove at vfio_del_group_dev. Sanity check that we no
|
|
|
- * longer track the device, so it's safe to remove.
|
|
|
- */
|
|
|
- device = vfio_group_get_device(group, dev);
|
|
|
- if (likely(!device))
|
|
|
- return 0;
|
|
|
-
|
|
|
- WARN("Device %s removed from live group %d!\n", dev_name(dev),
|
|
|
- iommu_group_id(group->iommu_group));
|
|
|
-
|
|
|
- vfio_device_put(device);
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
static int vfio_group_nb_verify(struct vfio_group *group, struct device *dev)
|
|
|
{
|
|
|
/* We don't care what happens when the group isn't in use */
|
|
@@ -545,7 +524,13 @@ static int vfio_iommu_group_notifier(struct notifier_block *nb,
|
|
|
vfio_group_nb_add_dev(group, dev);
|
|
|
break;
|
|
|
case IOMMU_GROUP_NOTIFY_DEL_DEVICE:
|
|
|
- vfio_group_nb_del_dev(group, dev);
|
|
|
+ /*
|
|
|
+ * Nothing to do here. If the device is in use, then the
|
|
|
+ * vfio sub-driver should block the remove callback until
|
|
|
+ * it is unused. If the device is unused or attached to a
|
|
|
+ * stub driver, then it should be released and we don't
|
|
|
+ * care that it will be going away.
|
|
|
+ */
|
|
|
break;
|
|
|
case IOMMU_GROUP_NOTIFY_BIND_DRIVER:
|
|
|
pr_debug("%s: Device %s, group %d binding to driver\n",
|