diff options
author | Joerg Roedel <jroedel@suse.de> | 2017-08-23 15:50:04 +0200 |
---|---|---|
committer | Joerg Roedel <jroedel@suse.de> | 2017-08-30 18:07:13 +0200 |
commit | add02cfdc9bc2987b0121861d5bb0c7392865be9 (patch) | |
tree | cb6fac974f4197968af1346bc13d6fce9f461cf7 /drivers/gpu/drm/drm_bridge.c | |
parent | 0688a09990986cd8c2fda26afb04ce0a599ced3f (diff) |
iommu: Introduce Interface for IOMMU TLB Flushing
With the current IOMMU-API the hardware TLBs have to be
flushed in every iommu_ops->unmap() call-back.
For unmapping large amounts of address space, like it
happens when a KVM domain with assigned devices is
destroyed, this causes thousands of unnecessary TLB flushes
in the IOMMU hardware because the unmap call-back runs for
every unmapped physical page.
With the TLB Flush Interface and the new iommu_unmap_fast()
function introduced here the need to clean the hardware TLBs
is removed from the unmapping code-path. Users of
iommu_unmap_fast() have to explicitly call the TLB-Flush
functions to sync the page-table changes to the hardware.
Three functions for TLB-Flushes are introduced:
* iommu_flush_tlb_all() - Flushes all TLB entries
associated with that
domain. TLBs entries are
flushed when this function
returns.
* iommu_tlb_range_add() - This will add a given
range to the flush queue
for this domain.
* iommu_tlb_sync() - Flushes all queued ranges from
the hardware TLBs. Returns when
the flush is finished.
The semantic of this interface is intentionally similar to
the iommu_gather_ops from the io-pgtable code.
Cc: Alex Williamson <alex.williamson@redhat.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Robin Murphy <robin.murphy@arm.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
Diffstat (limited to 'drivers/gpu/drm/drm_bridge.c')
0 files changed, 0 insertions, 0 deletions