summaryrefslogtreecommitdiff
path: root/drivers/vfio
diff options
context:
space:
mode:
authorJason Gunthorpe <jgg@nvidia.com>2022-10-07 11:04:40 -0300
committerAlex Williamson <alex.williamson@redhat.com>2022-10-07 08:10:52 -0600
commit819da99a7360f7e197038d12f0eba626bde11856 (patch)
treefc3283e491af7b4d68a6fdc4e9fb0e32fa14b3f6 /drivers/vfio
parent4b22ef042d6f54a6e5899555f2db71749133eca8 (diff)
downloadlinux-riscv-819da99a7360f7e197038d12f0eba626bde11856.tar.gz
linux-riscv-819da99a7360f7e197038d12f0eba626bde11856.tar.bz2
linux-riscv-819da99a7360f7e197038d12f0eba626bde11856.zip
vfio: Hold a reference to the iommu_group in kvm for SPAPR
SPAPR exists completely outside the normal iommu driver framework, the groups it creates are fake and are only created to enable VFIO's uAPI. Thus, it does not need to follow the iommu core rule that the iommu_group will only be touched while a driver is attached. Carry a group reference into KVM and have KVM directly manage the lifetime of this object independently of VFIO. This means KVM no longer relies on the vfio group file being valid to maintain the group reference. Tested-by: Matthew Rosato <mjrosato@linux.ibm.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> Link: https://lore.kernel.org/r/2-v2-15417f29324e+1c-vfio_group_disassociate_jgg@nvidia.com Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Diffstat (limited to 'drivers/vfio')
-rw-r--r--drivers/vfio/vfio_main.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/vfio/vfio_main.c b/drivers/vfio/vfio_main.c
index 9f830d0a25b7..911ee1abdff0 100644
--- a/drivers/vfio/vfio_main.c
+++ b/drivers/vfio/vfio_main.c
@@ -1552,8 +1552,9 @@ static const struct file_operations vfio_device_fops = {
* vfio_file_iommu_group - Return the struct iommu_group for the vfio group file
* @file: VFIO group file
*
- * The returned iommu_group is valid as long as a ref is held on the file.
- * This function is deprecated, only the SPAPR path in kvm should call it.
+ * The returned iommu_group is valid as long as a ref is held on the file. This
+ * returns a reference on the group. This function is deprecated, only the SPAPR
+ * path in kvm should call it.
*/
struct iommu_group *vfio_file_iommu_group(struct file *file)
{
@@ -1564,6 +1565,7 @@ struct iommu_group *vfio_file_iommu_group(struct file *file)
if (!vfio_file_is_group(file))
return NULL;
+ iommu_group_ref_get(group->iommu_group);
return group->iommu_group;
}
EXPORT_SYMBOL_GPL(vfio_file_iommu_group);