Commit d07c6f46 authored by Linus Torvalds's avatar Linus Torvalds

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
parents 04e904aa 65b1adeb
...@@ -403,6 +403,7 @@ static void vfio_group_release(struct kref *kref) ...@@ -403,6 +403,7 @@ static void vfio_group_release(struct kref *kref)
struct iommu_group *iommu_group = group->iommu_group; struct iommu_group *iommu_group = group->iommu_group;
WARN_ON(!list_empty(&group->device_list)); WARN_ON(!list_empty(&group->device_list));
WARN_ON(group->notifier.head);
list_for_each_entry_safe(unbound, tmp, list_for_each_entry_safe(unbound, tmp,
&group->unbound_list, unbound_next) { &group->unbound_list, unbound_next) {
...@@ -1573,6 +1574,10 @@ static int vfio_group_fops_open(struct inode *inode, struct file *filep) ...@@ -1573,6 +1574,10 @@ static int vfio_group_fops_open(struct inode *inode, struct file *filep)
return -EBUSY; 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; filep->private_data = group;
return 0; return 0;
...@@ -1584,9 +1589,6 @@ static int vfio_group_fops_release(struct inode *inode, struct file *filep) ...@@ -1584,9 +1589,6 @@ static int vfio_group_fops_release(struct inode *inode, struct file *filep)
filep->private_data = NULL; filep->private_data = NULL;
/* Any user didn't unregister? */
WARN_ON(group->notifier.head);
vfio_group_try_dissolve_container(group); vfio_group_try_dissolve_container(group);
atomic_dec(&group->opened); atomic_dec(&group->opened);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment