| /linux/drivers/iommu/ |
| H A D | iommu-pages.c | 45 struct ioptdesc *iopt; in iommu_alloc_pages_node_sz() local 70 iopt = folio_ioptdesc(folio); in iommu_alloc_pages_node_sz() 71 iopt->incoherent = false; in iommu_alloc_pages_node_sz() 90 static void __iommu_free_desc(struct ioptdesc *iopt) in __iommu_free_desc() argument 92 struct folio *folio = ioptdesc_folio(iopt); in __iommu_free_desc() 96 WARN_ON_ONCE(iopt->incoherent); in __iommu_free_desc() 127 struct ioptdesc *iopt, *tmp; in iommu_put_pages_list() local 129 list_for_each_entry_safe(iopt, tmp, &list->pages, iopt_freelist_elm) in iommu_put_pages_list() 130 __iommu_free_desc(iopt); in iommu_put_pages_list() 148 struct ioptdesc *iopt = virt_to_ioptdesc(virt); in iommu_pages_start_incoherent() local [all …]
|
| H A D | iommu-pages.h | 42 static inline struct folio *ioptdesc_folio(struct ioptdesc *iopt) in ioptdesc_folio() argument 44 return (struct folio *)iopt; in ioptdesc_folio()
|
| /linux/drivers/iommu/iommufd/ |
| H A D | iommufd_private.h | 100 void iopt_init_table(struct io_pagetable *iopt); 101 void iopt_destroy_table(struct io_pagetable *iopt); 102 int iopt_get_pages(struct io_pagetable *iopt, unsigned long iova, 108 int iopt_map_user_pages(struct iommufd_ctx *ictx, struct io_pagetable *iopt, 112 int iopt_map_file_pages(struct iommufd_ctx *ictx, struct io_pagetable *iopt, 116 int iopt_map_pages(struct io_pagetable *iopt, struct list_head *pages_list, 119 int iopt_unmap_iova(struct io_pagetable *iopt, unsigned long iova, 121 int iopt_unmap_all(struct io_pagetable *iopt, unsigned long *unmapped); 123 int iopt_read_and_clear_dirty_data(struct io_pagetable *iopt, 127 int iopt_set_dirty_tracking(struct io_pagetable *iopt, [all …]
|
| H A D | ioas.c | 18 rc = iopt_unmap_all(&ioas->iopt, NULL); in iommufd_ioas_destroy() 20 iopt_destroy_table(&ioas->iopt); in iommufd_ioas_destroy() 32 iopt_init_table(&ioas->iopt); in iommufd_ioas_alloc() 82 down_read(&ioas->iopt.iova_rwsem); in iommufd_ioas_iova_ranges() 86 cmd->out_iova_alignment = ioas->iopt.iova_alignment; in iommufd_ioas_iova_ranges() 87 interval_tree_for_each_span(&span, &ioas->iopt.reserved_itree, 0, in iommufd_ioas_iova_ranges() 111 up_read(&ioas->iopt.iova_rwsem); in iommufd_ioas_iova_ranges() 152 struct io_pagetable *iopt; in iommufd_ioas_allow_iovas() local 161 iopt = &ioas->iopt; in iommufd_ioas_allow_iovas() 176 rc = iopt_set_allow_iova(iopt, &allowed_iova); in iommufd_ioas_allow_iovas() [all …]
|
| H A D | vfio_compat.c | 191 rc = iopt_map_user_pages(ictx, &ioas->iopt, &iova, u64_to_user_ptr(map.vaddr), in iommufd_vfio_map_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() 346 rc = iopt_disable_large_pages(&ioas->iopt); in iommufd_vfio_set_iommu() 353 struct io_pagetable *iopt = &ioas->iopt; in iommufd_get_pagesizes() local 358 down_read(&iopt->domains_rwsem); in iommufd_get_pagesizes() 359 xa_for_each(&iopt->domains, index, domain) in iommufd_get_pagesizes() 367 pgsize_bitmap = max(pgsize_bitmap, ioas->iopt.iova_alignment); in iommufd_get_pagesizes() [all …]
|
| H A D | device.c | 421 rc = iopt_table_enforce_dev_resv_regions(&hwpt_paging->ioas->iopt, in iommufd_device_attach_reserved_iova() 430 iopt_remove_reserved_iova(&hwpt_paging->ioas->iopt, in iommufd_device_attach_reserved_iova() 672 iopt_remove_reserved_iova(&hwpt_paging->ioas->iopt, idev->dev); in iommufd_hw_pagetable_attach() 711 iopt_remove_reserved_iova(&hwpt_paging->ioas->iopt, idev->dev); in iommufd_hw_pagetable_detach() 744 iopt_remove_reserved_iova(&hwpt_paging->ioas->iopt, cur->dev); in iommufd_group_remove_reserved_iova() 764 &hwpt_paging->ioas->iopt, cur->dev, NULL); in iommufd_group_do_replace_reserved_iova() 1094 rc = iopt_add_access(&new_ioas->iopt, access); in iommufd_access_change_ioas() 1108 iopt_remove_access(&cur_ioas->iopt, access, iopt_access_list_id); in iommufd_access_change_ioas() 1300 void iommufd_access_notify_unmap(struct io_pagetable *iopt, unsigned long iova, in iommufd_access_notify_unmap() argument 1304 container_of(iopt, struct iommufd_ioas, iopt); in iommufd_access_notify_unmap() [all …]
|
| H A D | io_pagetable.h | 43 struct io_pagetable *iopt; member 131 struct io_pagetable *iopt, unsigned long start, \ 136 lockdep_assert_held(&iopt->iova_rwsem); \ 137 node = interval_tree_iter_first(&iopt->name##_itree, start, \ 165 struct io_pagetable *iopt, 180 #define iopt_for_each_contig_area(iter, area, iopt, iova, last_iova) \ argument 181 for (area = iopt_area_contig_init(iter, iopt, iova, last_iova); area; \
|
| H A D | pages.c | 509 bool disable_large_pages = area->iopt->disable_large_pages; in batch_to_domain() 1618 xa_for_each(&area->iopt->domains, index, domain) { in iopt_dmabuf_track_all_domains() 1904 lockdep_assert_held(&area->iopt->domains_rwsem); in iopt_area_fill_domains() 1906 if (xa_empty(&area->iopt->domains)) in iopt_area_fill_domains() 1925 xa_for_each(&area->iopt->domains, index, domain) { in iopt_area_fill_domains() 1944 area->storage_domain = xa_load(&area->iopt->domains, 0); in iopt_area_fill_domains() 1951 xa_for_each(&area->iopt->domains, unmap_index, domain) { in iopt_area_fill_domains() 1964 if (unmap_index != area->iopt->next_domain_id - 1) { in iopt_area_fill_domains() 1993 struct io_pagetable *iopt = area->iopt; in iopt_area_unfill_domains() local 1997 lockdep_assert_held(&iopt->domains_rwsem); in iopt_area_unfill_domains() [all …]
|
| /linux/drivers/dma/ppc4xx/ |
| H A D | dma.h | 217 u32 iopt; member
|