Lines Matching refs:ictx
33 xa_cmpxchg(&igroup->ictx->groups, iommu_group_id(igroup->group), igroup,
66 static struct iommufd_group *iommufd_get_group(struct iommufd_ctx *ictx,
81 xa_lock(&ictx->groups);
82 igroup = xa_load(&ictx->groups, id);
84 xa_unlock(&ictx->groups);
88 xa_unlock(&ictx->groups);
104 * The ictx is not additionally refcounted here becase all objects using
107 new_igroup->ictx = ictx;
114 xa_lock(&ictx->groups);
116 igroup = __xa_cmpxchg(&ictx->groups, id, cur_igroup, new_igroup,
119 xa_unlock(&ictx->groups);
126 xa_unlock(&ictx->groups);
132 xa_unlock(&ictx->groups);
151 vdev = iommufd_get_vdevice(idev->ictx, idev->vdev->obj.id);
163 iommufd_put_object(idev->ictx, &vdev->obj);
173 iommufd_put_object(idev->ictx, &vdev->obj);
175 iommufd_object_tombstone_user(idev->ictx, &vdev->obj);
199 iommufd_ctx_put(idev->ictx);
204 * @ictx: iommufd file descriptor
218 struct iommufd_device *iommufd_device_bind(struct iommufd_ctx *ictx,
232 igroup = iommufd_get_group(ictx, dev);
256 rc = iommu_device_claim_dma_owner(dev, ictx);
260 idev = iommufd_object_alloc(ictx, idev, IOMMUFD_OBJ_DEVICE);
265 idev->ictx = ictx;
267 iommufd_ctx_get(ictx);
282 iommufd_object_finalize(ictx, &idev->obj);
296 * to the ictx
297 * @ictx: iommufd file descriptor
300 * True if any device within the group has been bound to this ictx, ex. via
301 * iommufd_device_bind(), therefore implying ictx ownership of the group.
303 bool iommufd_ctx_has_group(struct iommufd_ctx *ictx, struct iommu_group *group)
308 if (!ictx || !group)
311 xa_lock(&ictx->objects);
312 xa_for_each(&ictx->objects, index, obj) {
316 xa_unlock(&ictx->objects);
320 xa_unlock(&ictx->objects);
336 iommufd_object_destroy_user(idev->ictx, &idev->obj);
342 return idev->ictx;
373 struct iommufd_ctx *ictx = igroup->ictx;
382 guard(mutex)(&ictx->sw_msi_lock);
383 list_for_each_entry(cur, &ictx->sw_msi_list, sw_msi_item) {
390 rc = iommufd_sw_msi_install(ictx, hwpt_paging, cur);
892 iommufd_put_object(idev->ictx, &hwpt->obj);
904 iommufd_put_object(idev->ictx, &hwpt->obj);
908 hwpt_paging = iommufd_hwpt_paging_alloc(idev->ictx, ioas, idev, pasid,
927 iommufd_object_finalize(idev->ictx, &hwpt->obj);
932 iommufd_object_abort_and_destroy(idev->ictx, &hwpt->obj);
945 pt_obj = iommufd_get_object(idev->ictx, *pt_id, IOMMUFD_OBJ_ANY);
974 iommufd_put_object(idev->ictx, pt_obj);
978 iommufd_hw_pagetable_put(idev->ictx, destroy_hwpt);
982 iommufd_put_object(idev->ictx, pt_obj);
1060 iommufd_hw_pagetable_put(idev->ictx, hwpt);
1119 struct iommufd_ioas *ioas = iommufd_get_ioas(access->ictx, id);
1125 iommufd_put_object(access->ictx, &ioas->obj);
1139 iommufd_ctx_put(access->ictx);
1142 static struct iommufd_access *__iommufd_access_create(struct iommufd_ctx *ictx)
1150 access = iommufd_object_alloc(ictx, access, IOMMUFD_OBJ_ACCESS);
1160 struct iommufd_access *iommufd_access_create_internal(struct iommufd_ctx *ictx)
1164 access = __iommufd_access_create(ictx);
1169 iommufd_object_finalize(ictx, &access->obj);
1175 * @ictx: iommufd file descriptor
1187 iommufd_access_create(struct iommufd_ctx *ictx,
1192 access = __iommufd_access_create(ictx);
1204 access->ictx = ictx;
1205 iommufd_ctx_get(ictx);
1206 iommufd_object_finalize(ictx, &access->obj);
1220 iommufd_object_destroy_user(access->ictx, &access->obj);
1316 iommufd_put_object(access->ictx, &access->obj);
1660 iommufd_put_object(ucmd->ictx, &idev->obj);