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(ictx, &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(ucmd->ictx, &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(ucmd->ictx, &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(ictx, &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(ictx, &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_paging, &ioas->hwpt_list, hwpt_item) { in iommufd_vfio_cc_iommu()
273 mutex_unlock(&ioas->mutex); in iommufd_vfio_cc_iommu()
275 iommufd_put_object(ictx, &ioas->obj); in iommufd_vfio_cc_iommu()
313 struct iommufd_ioas *ioas = NULL; in iommufd_vfio_set_iommu() local
333 ioas = get_compat_ioas(ictx); in iommufd_vfio_set_iommu()
334 if (IS_ERR(ioas)) in iommufd_vfio_set_iommu()
335 return PTR_ERR(ioas); in iommufd_vfio_set_iommu()
346 rc = iopt_disable_large_pages(&ioas->iopt); in iommufd_vfio_set_iommu()
347 iommufd_put_object(ictx, &ioas->obj); in iommufd_vfio_set_iommu()
351 static unsigned long iommufd_get_pagesizes(struct iommufd_ioas *ioas) in iommufd_get_pagesizes() argument
353 struct io_pagetable *iopt = &ioas->iopt; in iommufd_get_pagesizes()
367 pgsize_bitmap = max(pgsize_bitmap, ioas->iopt.iova_alignment); in iommufd_get_pagesizes()
372 static int iommufd_fill_cap_iova(struct iommufd_ioas *ioas, in iommufd_fill_cap_iova() argument
388 interval_tree_for_each_span(&span, &ioas->iopt.reserved_itree, 0, in iommufd_fill_cap_iova()
409 static int iommufd_fill_cap_dma_avail(struct iommufd_ioas *ioas, in iommufd_fill_cap_dma_avail() argument
437 typedef int (*fill_cap_fn)(struct iommufd_ioas *ioas, in iommufd_vfio_iommu_get_info()
447 struct iommufd_ioas *ioas; in iommufd_vfio_iommu_get_info() local
459 ioas = get_compat_ioas(ictx); in iommufd_vfio_iommu_get_info()
460 if (IS_ERR(ioas)) in iommufd_vfio_iommu_get_info()
461 return PTR_ERR(ioas); in iommufd_vfio_iommu_get_info()
464 info.iova_pgsizes = iommufd_get_pagesizes(ioas); in iommufd_vfio_iommu_get_info()
467 down_read(&ioas->iopt.iova_rwsem); in iommufd_vfio_iommu_get_info()
473 cap_size = fill_fns[i](ioas, arg + total_cap_size, in iommufd_vfio_iommu_get_info()
476 cap_size = fill_fns[i](ioas, NULL, 0); in iommufd_vfio_iommu_get_info()
508 up_read(&ioas->iopt.iova_rwsem); in iommufd_vfio_iommu_get_info()
509 iommufd_put_object(ictx, &ioas->obj); in iommufd_vfio_iommu_get_info()