Lines Matching refs:ictx

15 static struct iommufd_ioas *get_compat_ioas(struct iommufd_ctx *ictx)  in get_compat_ioas()  argument
19 xa_lock(&ictx->objects); in get_compat_ioas()
20 if (!ictx->vfio_ioas || !iommufd_lock_obj(&ictx->vfio_ioas->obj)) in get_compat_ioas()
22 ioas = ictx->vfio_ioas; in get_compat_ioas()
24 xa_unlock(&ictx->objects); in get_compat_ioas()
36 int iommufd_vfio_compat_ioas_get_id(struct iommufd_ctx *ictx, u32 *out_ioas_id) in iommufd_vfio_compat_ioas_get_id() argument
40 ioas = get_compat_ioas(ictx); in iommufd_vfio_compat_ioas_get_id()
55 int iommufd_vfio_compat_set_no_iommu(struct iommufd_ctx *ictx) in iommufd_vfio_compat_set_no_iommu() argument
59 xa_lock(&ictx->objects); in iommufd_vfio_compat_set_no_iommu()
60 if (!ictx->vfio_ioas) { in iommufd_vfio_compat_set_no_iommu()
61 ictx->no_iommu_mode = 1; in iommufd_vfio_compat_set_no_iommu()
66 xa_unlock(&ictx->objects); in iommufd_vfio_compat_set_no_iommu()
80 int iommufd_vfio_compat_ioas_create(struct iommufd_ctx *ictx) in iommufd_vfio_compat_ioas_create() argument
85 ioas = iommufd_ioas_alloc(ictx); in iommufd_vfio_compat_ioas_create()
89 xa_lock(&ictx->objects); in iommufd_vfio_compat_ioas_create()
94 if (ictx->no_iommu_mode) { in iommufd_vfio_compat_ioas_create()
99 if (ictx->vfio_ioas && iommufd_lock_obj(&ictx->vfio_ioas->obj)) { in iommufd_vfio_compat_ioas_create()
101 iommufd_put_object(&ictx->vfio_ioas->obj); in iommufd_vfio_compat_ioas_create()
104 ictx->vfio_ioas = ioas; in iommufd_vfio_compat_ioas_create()
105 xa_unlock(&ictx->objects); in iommufd_vfio_compat_ioas_create()
113 iommufd_object_finalize(ictx, &ioas->obj); in iommufd_vfio_compat_ioas_create()
117 xa_unlock(&ictx->objects); in iommufd_vfio_compat_ioas_create()
118 iommufd_object_abort(ictx, &ioas->obj); in iommufd_vfio_compat_ioas_create()
132 ioas = get_compat_ioas(ucmd->ictx); in iommufd_vfio_ioas()
140 ioas = iommufd_get_ioas(ucmd->ictx, cmd->ioas_id); in iommufd_vfio_ioas()
143 xa_lock(&ucmd->ictx->objects); in iommufd_vfio_ioas()
144 ucmd->ictx->vfio_ioas = ioas; in iommufd_vfio_ioas()
145 xa_unlock(&ucmd->ictx->objects); in iommufd_vfio_ioas()
150 xa_lock(&ucmd->ictx->objects); in iommufd_vfio_ioas()
151 ucmd->ictx->vfio_ioas = NULL; in iommufd_vfio_ioas()
152 xa_unlock(&ucmd->ictx->objects); in iommufd_vfio_ioas()
159 static int iommufd_vfio_map_dma(struct iommufd_ctx *ictx, unsigned int cmd, in iommufd_vfio_map_dma() argument
181 ioas = get_compat_ioas(ictx); in iommufd_vfio_map_dma()
191 rc = iopt_map_user_pages(ictx, &ioas->iopt, &iova, u64_to_user_ptr(map.vaddr), in iommufd_vfio_map_dma()
197 static int iommufd_vfio_unmap_dma(struct iommufd_ctx *ictx, unsigned int cmd, in iommufd_vfio_unmap_dma() argument
219 ioas = get_compat_ioas(ictx); in iommufd_vfio_unmap_dma()
256 static int iommufd_vfio_cc_iommu(struct iommufd_ctx *ictx) in iommufd_vfio_cc_iommu() argument
262 ioas = get_compat_ioas(ictx); in iommufd_vfio_cc_iommu()
279 static int iommufd_vfio_check_extension(struct iommufd_ctx *ictx, in iommufd_vfio_check_extension() argument
292 return iommufd_vfio_cc_iommu(ictx); in iommufd_vfio_check_extension()
315 static int iommufd_vfio_set_iommu(struct iommufd_ctx *ictx, unsigned long type) in iommufd_vfio_set_iommu() argument
317 bool no_iommu_mode = READ_ONCE(ictx->no_iommu_mode); in iommufd_vfio_set_iommu()
338 ioas = get_compat_ioas(ictx); in iommufd_vfio_set_iommu()
439 static int iommufd_vfio_iommu_get_info(struct iommufd_ctx *ictx, in iommufd_vfio_iommu_get_info() argument
464 ioas = get_compat_ioas(ictx); in iommufd_vfio_iommu_get_info()
518 int iommufd_vfio_ioctl(struct iommufd_ctx *ictx, unsigned int cmd, in iommufd_vfio_ioctl() argument
527 return iommufd_vfio_set_iommu(ictx, arg); in iommufd_vfio_ioctl()
529 return iommufd_vfio_check_extension(ictx, arg); in iommufd_vfio_ioctl()
531 return iommufd_vfio_iommu_get_info(ictx, uarg); in iommufd_vfio_ioctl()
533 return iommufd_vfio_map_dma(ictx, cmd, uarg); in iommufd_vfio_ioctl()
535 return iommufd_vfio_unmap_dma(ictx, cmd, uarg); in iommufd_vfio_ioctl()