Lines Matching defs:ictx
27 xa_cmpxchg(&igroup->ictx->groups, iommu_group_id(igroup->group), igroup,
60 static struct iommufd_group *iommufd_get_group(struct iommufd_ctx *ictx,
75 xa_lock(&ictx->groups);
76 igroup = xa_load(&ictx->groups, id);
78 xa_unlock(&ictx->groups);
82 xa_unlock(&ictx->groups);
98 * The ictx is not additionally refcounted here becase all objects using
101 new_igroup->ictx = ictx;
108 xa_lock(&ictx->groups);
110 igroup = __xa_cmpxchg(&ictx->groups, id, cur_igroup, new_igroup,
113 xa_unlock(&ictx->groups);
120 xa_unlock(&ictx->groups);
126 xa_unlock(&ictx->groups);
142 iommufd_ctx_put(idev->ictx);
147 * @ictx: iommufd file descriptor
161 struct iommufd_device *iommufd_device_bind(struct iommufd_ctx *ictx,
175 igroup = iommufd_get_group(ictx, dev);
199 rc = iommu_device_claim_dma_owner(dev, ictx);
203 idev = iommufd_object_alloc(ictx, idev, IOMMUFD_OBJ_DEVICE);
208 idev->ictx = ictx;
210 iommufd_ctx_get(ictx);
225 iommufd_object_finalize(ictx, &idev->obj);
239 * to the ictx
240 * @ictx: iommufd file descriptor
243 * True if any device within the group has been bound to this ictx, ex. via
244 * iommufd_device_bind(), therefore implying ictx ownership of the group.
246 bool iommufd_ctx_has_group(struct iommufd_ctx *ictx, struct iommu_group *group)
251 if (!ictx || !group)
254 xa_lock(&ictx->objects);
255 xa_for_each(&ictx->objects, index, obj) {
259 xa_unlock(&ictx->objects);
263 xa_unlock(&ictx->objects);
279 iommufd_object_destroy_user(idev->ictx, &idev->obj);
285 return idev->ictx;
542 hwpt = iommufd_hw_pagetable_alloc(idev->ictx, ioas, idev,
560 iommufd_object_finalize(idev->ictx, &hwpt->obj);
565 iommufd_object_abort_and_destroy(idev->ictx, &hwpt->obj);
577 pt_obj = iommufd_get_object(idev->ictx, *pt_id, IOMMUFD_OBJ_ANY);
609 iommufd_hw_pagetable_put(idev->ictx, destroy_hwpt);
680 iommufd_hw_pagetable_put(idev->ictx, hwpt);
739 struct iommufd_ioas *ioas = iommufd_get_ioas(access->ictx, id);
758 iommufd_ctx_put(access->ictx);
763 * @ictx: iommufd file descriptor
775 iommufd_access_create(struct iommufd_ctx *ictx,
784 access = iommufd_object_alloc(ictx, access, IOMMUFD_OBJ_ACCESS);
798 access->ictx = ictx;
799 iommufd_ctx_get(ictx);
800 iommufd_object_finalize(ictx, &access->obj);
815 iommufd_object_destroy_user(access->ictx, &access->obj);