Lines Matching refs:ioas
17 struct iommufd_ioas *ioas = ERR_PTR(-ENODEV); in get_compat_ioas() local
22 ioas = ictx->vfio_ioas; in get_compat_ioas()
25 return ioas; in get_compat_ioas()
38 struct iommufd_ioas *ioas; in iommufd_vfio_compat_ioas_get_id() local
40 ioas = get_compat_ioas(ictx); in iommufd_vfio_compat_ioas_get_id()
41 if (IS_ERR(ioas)) in iommufd_vfio_compat_ioas_get_id()
42 return PTR_ERR(ioas); in iommufd_vfio_compat_ioas_get_id()
43 *out_ioas_id = ioas->obj.id; in iommufd_vfio_compat_ioas_get_id()
44 iommufd_put_object(&ioas->obj); in iommufd_vfio_compat_ioas_get_id()
82 struct iommufd_ioas *ioas = NULL; in iommufd_vfio_compat_ioas_create() local
85 ioas = iommufd_ioas_alloc(ictx); in iommufd_vfio_compat_ioas_create()
86 if (IS_ERR(ioas)) in iommufd_vfio_compat_ioas_create()
87 return PTR_ERR(ioas); in iommufd_vfio_compat_ioas_create()
104 ictx->vfio_ioas = ioas; in iommufd_vfio_compat_ioas_create()
113 iommufd_object_finalize(ictx, &ioas->obj); in iommufd_vfio_compat_ioas_create()
118 iommufd_object_abort(ictx, &ioas->obj); in iommufd_vfio_compat_ioas_create()
126 struct iommufd_ioas *ioas; in iommufd_vfio_ioas() local
132 ioas = get_compat_ioas(ucmd->ictx); in iommufd_vfio_ioas()
133 if (IS_ERR(ioas)) in iommufd_vfio_ioas()
134 return PTR_ERR(ioas); in iommufd_vfio_ioas()
135 cmd->ioas_id = ioas->obj.id; in iommufd_vfio_ioas()
136 iommufd_put_object(&ioas->obj); in iommufd_vfio_ioas()
140 ioas = iommufd_get_ioas(ucmd->ictx, cmd->ioas_id); in iommufd_vfio_ioas()
141 if (IS_ERR(ioas)) in iommufd_vfio_ioas()
142 return PTR_ERR(ioas); in iommufd_vfio_ioas()
144 ucmd->ictx->vfio_ioas = ioas; in iommufd_vfio_ioas()
146 iommufd_put_object(&ioas->obj); in iommufd_vfio_ioas()
166 struct iommufd_ioas *ioas; in iommufd_vfio_map_dma() local
181 ioas = get_compat_ioas(ictx); in iommufd_vfio_map_dma()
182 if (IS_ERR(ioas)) in iommufd_vfio_map_dma()
183 return PTR_ERR(ioas); 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()
193 iommufd_put_object(&ioas->obj); in iommufd_vfio_map_dma()
210 struct iommufd_ioas *ioas; in iommufd_vfio_unmap_dma() local
219 ioas = get_compat_ioas(ictx); in iommufd_vfio_unmap_dma()
220 if (IS_ERR(ioas)) in iommufd_vfio_unmap_dma()
221 return PTR_ERR(ioas); in iommufd_vfio_unmap_dma()
228 rc = iopt_unmap_all(&ioas->iopt, &unmapped); in iommufd_vfio_unmap_dma()
230 if (READ_ONCE(ioas->iopt.disable_large_pages)) { in iommufd_vfio_unmap_dma()
239 rc = iopt_cut_iova(&ioas->iopt, iovas, in iommufd_vfio_unmap_dma()
244 rc = iopt_unmap_iova(&ioas->iopt, unmap.iova, unmap.size, in iommufd_vfio_unmap_dma()
252 iommufd_put_object(&ioas->obj); in iommufd_vfio_unmap_dma()
259 struct iommufd_ioas *ioas; in iommufd_vfio_cc_iommu() local
262 ioas = get_compat_ioas(ictx); in iommufd_vfio_cc_iommu()
263 if (IS_ERR(ioas)) in iommufd_vfio_cc_iommu()
264 return PTR_ERR(ioas); in iommufd_vfio_cc_iommu()
266 mutex_lock(&ioas->mutex); in iommufd_vfio_cc_iommu()
267 list_for_each_entry(hwpt, &ioas->hwpt_list, hwpt_item) { in iommufd_vfio_cc_iommu()
273 mutex_unlock(&ioas->mutex); in iommufd_vfio_cc_iommu()
275 iommufd_put_object(&ioas->obj); in iommufd_vfio_cc_iommu()
318 struct iommufd_ioas *ioas = NULL; in iommufd_vfio_set_iommu() local
338 ioas = get_compat_ioas(ictx); in iommufd_vfio_set_iommu()
339 if (IS_ERR(ioas)) in iommufd_vfio_set_iommu()
340 return PTR_ERR(ioas); in iommufd_vfio_set_iommu()
351 rc = iopt_disable_large_pages(&ioas->iopt); in iommufd_vfio_set_iommu()
352 iommufd_put_object(&ioas->obj); in iommufd_vfio_set_iommu()
356 static unsigned long iommufd_get_pagesizes(struct iommufd_ioas *ioas) in iommufd_get_pagesizes() argument
358 struct io_pagetable *iopt = &ioas->iopt; in iommufd_get_pagesizes()
372 pgsize_bitmap = max(pgsize_bitmap, ioas->iopt.iova_alignment); in iommufd_get_pagesizes()
377 static int iommufd_fill_cap_iova(struct iommufd_ioas *ioas, in iommufd_fill_cap_iova() argument
393 interval_tree_for_each_span(&span, &ioas->iopt.reserved_itree, 0, in iommufd_fill_cap_iova()
414 static int iommufd_fill_cap_dma_avail(struct iommufd_ioas *ioas, in iommufd_fill_cap_dma_avail() argument
442 typedef int (*fill_cap_fn)(struct iommufd_ioas *ioas, in iommufd_vfio_iommu_get_info()
452 struct iommufd_ioas *ioas; in iommufd_vfio_iommu_get_info() local
464 ioas = get_compat_ioas(ictx); in iommufd_vfio_iommu_get_info()
465 if (IS_ERR(ioas)) in iommufd_vfio_iommu_get_info()
466 return PTR_ERR(ioas); in iommufd_vfio_iommu_get_info()
469 info.iova_pgsizes = iommufd_get_pagesizes(ioas); in iommufd_vfio_iommu_get_info()
472 down_read(&ioas->iopt.iova_rwsem); in iommufd_vfio_iommu_get_info()
478 cap_size = fill_fns[i](ioas, arg + total_cap_size, in iommufd_vfio_iommu_get_info()
481 cap_size = fill_fns[i](ioas, NULL, 0); in iommufd_vfio_iommu_get_info()
513 up_read(&ioas->iopt.iova_rwsem); in iommufd_vfio_iommu_get_info()
514 iommufd_put_object(&ioas->obj); in iommufd_vfio_iommu_get_info()