Lines Matching refs:area

197 static unsigned long iopt_area_index_to_iova(struct iopt_area *area,  in iopt_area_index_to_iova()  argument
201 WARN_ON(index < iopt_area_index(area) || in iopt_area_index_to_iova()
202 index > iopt_area_last_index(area)); in iopt_area_index_to_iova()
203 index -= iopt_area_index(area); in iopt_area_index_to_iova()
205 return iopt_area_iova(area); in iopt_area_index_to_iova()
206 return iopt_area_iova(area) - area->page_offset + index * PAGE_SIZE; in iopt_area_index_to_iova()
209 static unsigned long iopt_area_index_to_iova_last(struct iopt_area *area, in iopt_area_index_to_iova_last() argument
213 WARN_ON(index < iopt_area_index(area) || in iopt_area_index_to_iova_last()
214 index > iopt_area_last_index(area)); in iopt_area_index_to_iova_last()
215 if (index == iopt_area_last_index(area)) in iopt_area_index_to_iova_last()
216 return iopt_area_last_iova(area); in iopt_area_index_to_iova_last()
217 return iopt_area_iova(area) - area->page_offset + in iopt_area_index_to_iova_last()
218 (index - iopt_area_index(area) + 1) * PAGE_SIZE - 1; in iopt_area_index_to_iova_last()
237 static void iopt_area_unmap_domain_range(struct iopt_area *area, in iopt_area_unmap_domain_range() argument
242 unsigned long start_iova = iopt_area_index_to_iova(area, start_index); in iopt_area_unmap_domain_range()
245 iopt_area_index_to_iova_last(area, last_index) - in iopt_area_unmap_domain_range()
377 struct iopt_area *area, unsigned long start_index, in batch_from_domain() argument
384 iova = iopt_area_index_to_iova(area, start_index); in batch_from_domain()
385 if (start_index == iopt_area_index(area)) in batch_from_domain()
386 page_offset = area->page_offset; in batch_from_domain()
403 struct iopt_area *area, in raw_pages_from_domain() argument
412 iova = iopt_area_index_to_iova(area, start_index); in raw_pages_from_domain()
413 if (start_index == iopt_area_index(area)) in raw_pages_from_domain()
414 page_offset = area->page_offset; in raw_pages_from_domain()
428 struct iopt_area *area, in batch_from_domain_continue() argument
435 batch_from_domain(batch, domain, area, start_index, last_index); in batch_from_domain_continue()
476 struct iopt_area *area, unsigned long start_index) in batch_to_domain() argument
478 bool disable_large_pages = area->iopt->disable_large_pages; in batch_to_domain()
479 unsigned long last_iova = iopt_area_last_iova(area); in batch_to_domain()
488 if (start_index == iopt_area_index(area)) in batch_to_domain()
489 page_offset = area->page_offset; in batch_to_domain()
491 iopt_area_index_to_iova(area, start_index); in batch_to_domain()
500 next_iova - iova, area->iommu_prot); in batch_to_domain()
504 next_iova - iova, area->iommu_prot, in batch_to_domain()
980 struct iopt_area *area; in pfn_reader_fill_span() local
999 area = iopt_pages_find_domain_area(pfns->pages, start_index); in pfn_reader_fill_span()
1000 if (WARN_ON(!area)) in pfn_reader_fill_span()
1005 &pfns->batch, area->storage_domain, area, start_index, in pfn_reader_fill_span()
1006 min(iopt_area_last_index(area), span->last_used)); in pfn_reader_fill_span()
1193 iopt_area_unpin_domain(struct pfn_batch *batch, struct iopt_area *area, in iopt_area_unpin_domain() argument
1206 batch_from_domain(batch, domain, area, start, in iopt_area_unpin_domain()
1224 batch_from_domain_continue(batch, domain, area, in iopt_area_unpin_domain()
1230 area, domain, *unmapped_end_index, in iopt_area_unpin_domain()
1245 static void __iopt_area_unfill_domain(struct iopt_area *area, in __iopt_area_unfill_domain() argument
1251 unsigned long start_index = iopt_area_index(area); in __iopt_area_unfill_domain()
1281 iopt_area_unpin_domain(&batch, area, pages, domain, in __iopt_area_unfill_domain()
1290 iopt_area_unmap_domain_range(area, domain, unmapped_end_index, in __iopt_area_unfill_domain()
1297 static void iopt_area_unfill_partial_domain(struct iopt_area *area, in iopt_area_unfill_partial_domain() argument
1302 if (end_index != iopt_area_index(area)) in iopt_area_unfill_partial_domain()
1303 __iopt_area_unfill_domain(area, pages, domain, end_index - 1); in iopt_area_unfill_partial_domain()
1314 void iopt_area_unmap_domain(struct iopt_area *area, struct iommu_domain *domain) in iopt_area_unmap_domain() argument
1316 iommu_unmap_nofail(domain, iopt_area_iova(area), in iopt_area_unmap_domain()
1317 iopt_area_length(area)); in iopt_area_unmap_domain()
1330 void iopt_area_unfill_domain(struct iopt_area *area, struct iopt_pages *pages, in iopt_area_unfill_domain() argument
1333 __iopt_area_unfill_domain(area, pages, domain, in iopt_area_unfill_domain()
1334 iopt_area_last_index(area)); in iopt_area_unfill_domain()
1345 int iopt_area_fill_domain(struct iopt_area *area, struct iommu_domain *domain) in iopt_area_fill_domain() argument
1351 lockdep_assert_held(&area->pages->mutex); in iopt_area_fill_domain()
1353 rc = pfn_reader_first(&pfns, area->pages, iopt_area_index(area), in iopt_area_fill_domain()
1354 iopt_area_last_index(area)); in iopt_area_fill_domain()
1360 rc = batch_to_domain(&pfns.batch, domain, area, in iopt_area_fill_domain()
1378 iopt_area_unfill_partial_domain(area, area->pages, domain, in iopt_area_fill_domain()
1396 int iopt_area_fill_domains(struct iopt_area *area, struct iopt_pages *pages) in iopt_area_fill_domains() argument
1406 lockdep_assert_held(&area->iopt->domains_rwsem); in iopt_area_fill_domains()
1408 if (xa_empty(&area->iopt->domains)) in iopt_area_fill_domains()
1412 rc = pfn_reader_first(&pfns, pages, iopt_area_index(area), in iopt_area_fill_domains()
1413 iopt_area_last_index(area)); in iopt_area_fill_domains()
1420 xa_for_each(&area->iopt->domains, index, domain) { in iopt_area_fill_domains()
1421 rc = batch_to_domain(&pfns.batch, domain, area, in iopt_area_fill_domains()
1436 area->storage_domain = xa_load(&area->iopt->domains, 0); in iopt_area_fill_domains()
1437 interval_tree_insert(&area->pages_node, &pages->domains_itree); in iopt_area_fill_domains()
1442 xa_for_each(&area->iopt->domains, unmap_index, domain) { in iopt_area_fill_domains()
1455 if (unmap_index != area->iopt->next_domain_id - 1) { in iopt_area_fill_domains()
1456 if (end_index != iopt_area_index(area)) in iopt_area_fill_domains()
1458 area, domain, iopt_area_index(area), in iopt_area_fill_domains()
1461 iopt_area_unfill_partial_domain(area, pages, domain, in iopt_area_fill_domains()
1480 void iopt_area_unfill_domains(struct iopt_area *area, struct iopt_pages *pages) in iopt_area_unfill_domains() argument
1482 struct io_pagetable *iopt = area->iopt; in iopt_area_unfill_domains()
1489 if (!area->storage_domain) in iopt_area_unfill_domains()
1493 if (domain != area->storage_domain) in iopt_area_unfill_domains()
1495 area, domain, iopt_area_index(area), in iopt_area_unfill_domains()
1496 iopt_area_last_index(area)); in iopt_area_unfill_domains()
1498 interval_tree_remove(&area->pages_node, &pages->domains_itree); in iopt_area_unfill_domains()
1499 iopt_area_unfill_domain(area, pages, area->storage_domain); in iopt_area_unfill_domains()
1500 area->storage_domain = NULL; in iopt_area_unfill_domains()
1603 struct iopt_area *area; in iopt_pages_fill_from_domain() local
1605 area = iopt_pages_find_domain_area(pages, start_index); in iopt_pages_fill_from_domain()
1606 if (WARN_ON(!area)) in iopt_pages_fill_from_domain()
1609 domain_last = min(iopt_area_last_index(area), last_index); in iopt_pages_fill_from_domain()
1610 out_pages = raw_pages_from_domain(area->storage_domain, area, in iopt_pages_fill_from_domain()
1901 int iopt_area_add_access(struct iopt_area *area, unsigned long start_index, in iopt_area_add_access() argument
1905 struct iopt_pages *pages = area->pages; in iopt_area_add_access()
1915 area->num_accesses++; in iopt_area_add_access()
1936 area->num_accesses++; in iopt_area_add_access()
1957 void iopt_area_remove_access(struct iopt_area *area, unsigned long start_index, in iopt_area_remove_access() argument
1960 struct iopt_pages *pages = area->pages; in iopt_area_remove_access()
1968 WARN_ON(area->num_accesses == 0 || access->users == 0); in iopt_area_remove_access()
1969 area->num_accesses--; in iopt_area_remove_access()