summaryrefslogtreecommitdiffstats
path: root/drivers/vfio
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2017-03-24 14:39:36 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2017-03-24 14:39:36 -0700
commitd07c6f46c441c32c55076a45479530707170c55c (patch)
tree2635d640df112a3039556ee602760ebb2454694b /drivers/vfio
parent04e904aa79ccdeede66d58e72e4c5402e4b9bd70 (diff)
parent65b1adebfe43c642dfe3b109edb5d992db5fbe72 (diff)
downloadlinux-stable-d07c6f46c441c32c55076a45479530707170c55c.tar.gz
linux-stable-d07c6f46c441c32c55076a45479530707170c55c.tar.bz2
linux-stable-d07c6f46c441c32c55076a45479530707170c55c.zip
Merge tag 'vfio-v4.11-rc4' of git://github.com/awilliam/linux-vfio
Pull VFIO fix from Alex Williamson: "Rework sanity check for mdev driver group notifier de-registration (Alex Williamson)" * tag 'vfio-v4.11-rc4' of git://github.com/awilliam/linux-vfio: vfio: Rework group release notifier warning
Diffstat (limited to 'drivers/vfio')
-rw-r--r--drivers/vfio/vfio.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/vfio/vfio.c b/drivers/vfio/vfio.c
index 609f4f982c74..561084ab387f 100644
--- a/drivers/vfio/vfio.c
+++ b/drivers/vfio/vfio.c
@@ -403,6 +403,7 @@ static void vfio_group_release(struct kref *kref)
struct iommu_group *iommu_group = group->iommu_group;
WARN_ON(!list_empty(&group->device_list));
+ WARN_ON(group->notifier.head);
list_for_each_entry_safe(unbound, tmp,
&group->unbound_list, unbound_next) {
@@ -1573,6 +1574,10 @@ static int vfio_group_fops_open(struct inode *inode, struct file *filep)
return -EBUSY;
}
+ /* Warn if previous user didn't cleanup and re-init to drop them */
+ if (WARN_ON(group->notifier.head))
+ BLOCKING_INIT_NOTIFIER_HEAD(&group->notifier);
+
filep->private_data = group;
return 0;
@@ -1584,9 +1589,6 @@ static int vfio_group_fops_release(struct inode *inode, struct file *filep)
filep->private_data = NULL;
- /* Any user didn't unregister? */
- WARN_ON(group->notifier.head);
-
vfio_group_try_dissolve_container(group);
atomic_dec(&group->opened);