/openbmc/linux/drivers/iommu/iommufd/ |
H A D | io_pagetable.c | 31 struct io_pagetable *iopt, in iopt_area_contig_init() argument 35 lockdep_assert_held(&iopt->iova_rwsem); in iopt_area_contig_init() 39 iter->area = iopt_area_iter_first(iopt, iova, iova); in iopt_area_contig_init() 108 static int iopt_alloc_iova(struct io_pagetable *iopt, unsigned long *iova, in iopt_alloc_iova() argument 117 lockdep_assert_held(&iopt->iova_rwsem); in iopt_alloc_iova() 141 if (iova_alignment < iopt->iova_alignment) in iopt_alloc_iova() 144 interval_tree_for_each_span(&allowed_span, &iopt->allowed_itree, in iopt_alloc_iova() 146 if (RB_EMPTY_ROOT(&iopt->allowed_itree.rb_root)) { in iopt_alloc_iova() 157 &used_span, &iopt->reserved_itree, &iopt->area_itree, in iopt_alloc_iova() 171 static int iopt_check_iova(struct io_pagetable *iopt, unsigned long iova, in iopt_check_iova() argument [all …]
|
H A D | iommufd_private.h | 54 void iopt_init_table(struct io_pagetable *iopt); 55 void iopt_destroy_table(struct io_pagetable *iopt); 56 int iopt_get_pages(struct io_pagetable *iopt, unsigned long iova, 62 int iopt_map_user_pages(struct iommufd_ctx *ictx, struct io_pagetable *iopt, 66 int iopt_map_pages(struct io_pagetable *iopt, struct list_head *pages_list, 69 int iopt_unmap_iova(struct io_pagetable *iopt, unsigned long iova, 71 int iopt_unmap_all(struct io_pagetable *iopt, unsigned long *unmapped); 73 void iommufd_access_notify_unmap(struct io_pagetable *iopt, unsigned long iova, 75 int iopt_table_add_domain(struct io_pagetable *iopt, 77 void iopt_table_remove_domain(struct io_pagetable *iopt, [all …]
|
H A D | ioas.c | 17 rc = iopt_unmap_all(&ioas->iopt, NULL); in iommufd_ioas_destroy() 19 iopt_destroy_table(&ioas->iopt); in iommufd_ioas_destroy() 31 iopt_init_table(&ioas->iopt); in iommufd_ioas_alloc() 78 down_read(&ioas->iopt.iova_rwsem); in iommufd_ioas_iova_ranges() 82 cmd->out_iova_alignment = ioas->iopt.iova_alignment; in iommufd_ioas_iova_ranges() 83 interval_tree_for_each_span(&span, &ioas->iopt.reserved_itree, 0, in iommufd_ioas_iova_ranges() 107 up_read(&ioas->iopt.iova_rwsem); in iommufd_ioas_iova_ranges() 148 struct io_pagetable *iopt; in iommufd_ioas_allow_iovas() local 157 iopt = &ioas->iopt; in iommufd_ioas_allow_iovas() 172 rc = iopt_set_allow_iova(iopt, &allowed_iova); in iommufd_ioas_allow_iovas() [all …]
|
H A D | device.c | 347 rc = iopt_table_enforce_dev_resv_regions(&hwpt->ioas->iopt, idev->dev, in iommufd_hw_pagetable_attach() 374 iopt_remove_reserved_iova(&hwpt->ioas->iopt, idev->dev); in iommufd_hw_pagetable_attach() 391 iopt_remove_reserved_iova(&hwpt->ioas->iopt, idev->dev); in iommufd_hw_pagetable_detach() 446 &hwpt->ioas->iopt, cur->dev, NULL); in iommufd_device_do_replace() 462 iopt_remove_reserved_iova(&old_hwpt->ioas->iopt, in iommufd_device_do_replace() 482 iopt_remove_reserved_iova(&hwpt->ioas->iopt, cur->dev); in iommufd_device_do_replace() 713 rc = iopt_add_access(&new_ioas->iopt, access); in iommufd_access_change_ioas() 727 iopt_remove_access(&cur_ioas->iopt, access, iopt_access_list_id); in iommufd_access_change_ioas() 878 void iommufd_access_notify_unmap(struct io_pagetable *iopt, unsigned long iova, in iommufd_access_notify_unmap() argument 882 container_of(iopt, struct iommufd_ioas, iopt); in iommufd_access_notify_unmap() [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() 351 rc = iopt_disable_large_pages(&ioas->iopt); in iommufd_vfio_set_iommu() 358 struct io_pagetable *iopt = &ioas->iopt; in iommufd_get_pagesizes() local 363 down_read(&iopt->domains_rwsem); in iommufd_get_pagesizes() 364 xa_for_each(&iopt->domains, index, domain) in iommufd_get_pagesizes() 372 pgsize_bitmap = max(pgsize_bitmap, ioas->iopt.iova_alignment); in iommufd_get_pagesizes() [all …]
|
H A D | io_pagetable.h | 42 struct io_pagetable *iopt; member 119 struct io_pagetable *iopt, unsigned long start, \ 124 lockdep_assert_held(&iopt->iova_rwsem); \ 125 node = interval_tree_iter_first(&iopt->name##_itree, start, \ 153 struct io_pagetable *iopt, 168 #define iopt_for_each_contig_area(iter, area, iopt, iova, last_iova) \ argument 169 for (area = iopt_area_contig_init(iter, iopt, iova, last_iova); area; \
|
H A D | hw_pagetable.c | 20 iopt_table_remove_domain(&hwpt->ioas->iopt, hwpt->domain); in iommufd_hw_pagetable_destroy() 39 iopt_table_remove_domain(&hwpt->ioas->iopt, hwpt->domain); in iommufd_hw_pagetable_abort() 122 rc = iopt_table_add_domain(&hwpt->ioas->iopt, hwpt->domain); in iommufd_hw_pagetable_alloc()
|
H A D | selftest.c | 47 static unsigned long __iommufd_test_syz_conv_iova(struct io_pagetable *iopt, in __iommufd_test_syz_conv_iova() argument 58 down_read(&iopt->iova_rwsem); in __iommufd_test_syz_conv_iova() 59 for (area = iopt_area_iter_first(iopt, 0, ULONG_MAX); area; in __iommufd_test_syz_conv_iova() 62 up_read(&iopt->iova_rwsem); in __iommufd_test_syz_conv_iova() 67 up_read(&iopt->iova_rwsem); in __iommufd_test_syz_conv_iova() 82 ret = __iommufd_test_syz_conv_iova(&access->ioas->iopt, iova); in iommufd_test_syz_conv_iova() 99 *iova = __iommufd_test_syz_conv_iova(&ioas->iopt, iova); in iommufd_test_syz_conv_iova_id() 521 down_write(&ioas->iopt.iova_rwsem); in iommufd_test_add_reserved() 522 rc = iopt_reserve_iova(&ioas->iopt, start, start + length - 1, NULL); in iommufd_test_add_reserved() 523 up_write(&ioas->iopt.iova_rwsem); in iommufd_test_add_reserved()
|
H A D | pages.c | 478 bool disable_large_pages = area->iopt->disable_large_pages; in batch_to_domain() 1418 lockdep_assert_held(&area->iopt->domains_rwsem); in iopt_area_fill_domains() 1420 if (xa_empty(&area->iopt->domains)) in iopt_area_fill_domains() 1432 xa_for_each(&area->iopt->domains, index, domain) { in iopt_area_fill_domains() 1448 area->storage_domain = xa_load(&area->iopt->domains, 0); in iopt_area_fill_domains() 1454 xa_for_each(&area->iopt->domains, unmap_index, domain) { in iopt_area_fill_domains() 1467 if (unmap_index != area->iopt->next_domain_id - 1) { in iopt_area_fill_domains() 1494 struct io_pagetable *iopt = area->iopt; in iopt_area_unfill_domains() local 1498 lockdep_assert_held(&iopt->domains_rwsem); in iopt_area_unfill_domains() 1504 xa_for_each(&iopt->domains, index, domain) in iopt_area_unfill_domains()
|
/openbmc/linux/drivers/dma/ppc4xx/ |
H A D | dma.h | 217 u32 iopt; member
|