|
@@ -204,6 +204,35 @@ again:
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(iommu_group_alloc);
|
|
|
|
|
|
+struct iommu_group *iommu_group_get_by_id(int id)
|
|
|
+{
|
|
|
+ struct kobject *group_kobj;
|
|
|
+ struct iommu_group *group;
|
|
|
+ const char *name;
|
|
|
+
|
|
|
+ if (!iommu_group_kset)
|
|
|
+ return NULL;
|
|
|
+
|
|
|
+ name = kasprintf(GFP_KERNEL, "%d", id);
|
|
|
+ if (!name)
|
|
|
+ return NULL;
|
|
|
+
|
|
|
+ group_kobj = kset_find_obj(iommu_group_kset, name);
|
|
|
+ kfree(name);
|
|
|
+
|
|
|
+ if (!group_kobj)
|
|
|
+ return NULL;
|
|
|
+
|
|
|
+ group = container_of(group_kobj, struct iommu_group, kobj);
|
|
|
+ BUG_ON(group->id != id);
|
|
|
+
|
|
|
+ kobject_get(group->devices_kobj);
|
|
|
+ kobject_put(&group->kobj);
|
|
|
+
|
|
|
+ return group;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL_GPL(iommu_group_get_by_id);
|
|
|
+
|
|
|
/**
|
|
|
* iommu_group_get_iommudata - retrieve iommu_data registered for a group
|
|
|
* @group: the group
|