vfio iommu type1: Add find_iommu_group() function
Add find_iommu_group() Signed-off-by: Kirti Wankhede <kwankhede@nvidia.com> Signed-off-by: Neo Jia <cjia@nvidia.com> Reviewed-by: Jike Song <jike.song@intel.com> Reviewed-by: Dong Jia Shi <bjsdjshi@linux.vnet.ibm.com> Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
This commit is contained in:
parent
ea85cf353e
commit
7896c998f0
@ -752,11 +752,24 @@ static void vfio_test_domain_fgsp(struct vfio_domain *domain)
|
||||
__free_pages(pages, order);
|
||||
}
|
||||
|
||||
static struct vfio_group *find_iommu_group(struct vfio_domain *domain,
|
||||
struct iommu_group *iommu_group)
|
||||
{
|
||||
struct vfio_group *g;
|
||||
|
||||
list_for_each_entry(g, &domain->group_list, next) {
|
||||
if (g->iommu_group == iommu_group)
|
||||
return g;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int vfio_iommu_type1_attach_group(void *iommu_data,
|
||||
struct iommu_group *iommu_group)
|
||||
{
|
||||
struct vfio_iommu *iommu = iommu_data;
|
||||
struct vfio_group *group, *g;
|
||||
struct vfio_group *group;
|
||||
struct vfio_domain *domain, *d;
|
||||
struct bus_type *bus = NULL;
|
||||
int ret;
|
||||
@ -764,10 +777,7 @@ static int vfio_iommu_type1_attach_group(void *iommu_data,
|
||||
mutex_lock(&iommu->lock);
|
||||
|
||||
list_for_each_entry(d, &iommu->domain_list, next) {
|
||||
list_for_each_entry(g, &d->group_list, next) {
|
||||
if (g->iommu_group != iommu_group)
|
||||
continue;
|
||||
|
||||
if (find_iommu_group(d, iommu_group)) {
|
||||
mutex_unlock(&iommu->lock);
|
||||
return -EINVAL;
|
||||
}
|
||||
@ -887,8 +897,8 @@ static void vfio_iommu_type1_detach_group(void *iommu_data,
|
||||
mutex_lock(&iommu->lock);
|
||||
|
||||
list_for_each_entry(domain, &iommu->domain_list, next) {
|
||||
list_for_each_entry(group, &domain->group_list, next) {
|
||||
if (group->iommu_group != iommu_group)
|
||||
group = find_iommu_group(domain, iommu_group);
|
||||
if (!group)
|
||||
continue;
|
||||
|
||||
iommu_detach_group(domain->domain, iommu_group);
|
||||
@ -908,7 +918,6 @@ static void vfio_iommu_type1_detach_group(void *iommu_data,
|
||||
}
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
||||
done:
|
||||
mutex_unlock(&iommu->lock);
|
||||
|
Loading…
Reference in New Issue
Block a user