summaryrefslogtreecommitdiffstats
path: root/include/linux/io-pgtable.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/io-pgtable.h')
-rw-r--r--include/linux/io-pgtable.h22
1 files changed, 11 insertions, 11 deletions
diff --git a/include/linux/io-pgtable.h b/include/linux/io-pgtable.h
index 0618aac59e74..99e04bd2baa1 100644
--- a/include/linux/io-pgtable.h
+++ b/include/linux/io-pgtable.h
@@ -25,12 +25,11 @@ enum io_pgtable_fmt {
25 * address range. 25 * address range.
26 * @tlb_flush_leaf: Synchronously invalidate all leaf TLB state for a virtual 26 * @tlb_flush_leaf: Synchronously invalidate all leaf TLB state for a virtual
27 * address range. 27 * address range.
28 * @tlb_add_flush: Optional callback to queue up leaf TLB invalidation for a 28 * @tlb_add_page: Optional callback to queue up leaf TLB invalidation for a
29 * virtual address range. This function exists purely as an 29 * single page. This function exists purely as an optimisation
30 * optimisation for IOMMUs that cannot batch TLB invalidation 30 * for IOMMUs that cannot batch TLB invalidation operations
31 * operations efficiently and are therefore better suited to 31 * efficiently and are therefore better suited to issuing them
32 * issuing them early rather than deferring them until 32 * early rather than deferring them until iommu_tlb_sync().
33 * iommu_tlb_sync().
34 * @tlb_sync: Ensure any queued TLB invalidation has taken effect, and 33 * @tlb_sync: Ensure any queued TLB invalidation has taken effect, and
35 * any corresponding page table updates are visible to the 34 * any corresponding page table updates are visible to the
36 * IOMMU. 35 * IOMMU.
@@ -44,8 +43,7 @@ struct iommu_flush_ops {
44 void *cookie); 43 void *cookie);
45 void (*tlb_flush_leaf)(unsigned long iova, size_t size, size_t granule, 44 void (*tlb_flush_leaf)(unsigned long iova, size_t size, size_t granule,
46 void *cookie); 45 void *cookie);
47 void (*tlb_add_flush)(unsigned long iova, size_t size, size_t granule, 46 void (*tlb_add_page)(unsigned long iova, size_t granule, void *cookie);
48 bool leaf, void *cookie);
49 void (*tlb_sync)(void *cookie); 47 void (*tlb_sync)(void *cookie);
50}; 48};
51 49
@@ -212,10 +210,12 @@ io_pgtable_tlb_flush_leaf(struct io_pgtable *iop, unsigned long iova,
212 iop->cfg.tlb->tlb_flush_leaf(iova, size, granule, iop->cookie); 210 iop->cfg.tlb->tlb_flush_leaf(iova, size, granule, iop->cookie);
213} 211}
214 212
215static inline void io_pgtable_tlb_add_flush(struct io_pgtable *iop, 213static inline void
216 unsigned long iova, size_t size, size_t granule, bool leaf) 214io_pgtable_tlb_add_page(struct io_pgtable *iop, unsigned long iova,
215 size_t granule)
217{ 216{
218 iop->cfg.tlb->tlb_add_flush(iova, size, granule, leaf, iop->cookie); 217 if (iop->cfg.tlb->tlb_add_page)
218 iop->cfg.tlb->tlb_add_page(iova, granule, iop->cookie);
219} 219}
220 220
221static inline void io_pgtable_tlb_sync(struct io_pgtable *iop) 221static inline void io_pgtable_tlb_sync(struct io_pgtable *iop)