Thread (29 messages) 29 messages, 6 authors, 2011-11-13

[PATCH v4 2/7] iommu/core: split mapping to page sizes as supported by the hardware

From: Stepan Moskovchenko <hidden>
Date: 2011-11-10 21:12:09
Also in: kvm, linux-omap, lkml

On 11/10/2011 9:09 AM, Joerg Roedel wrote:
The plan is to have a single DMA-API implementation for all IOMMU 
drivers (X86 and ARM) which just uses the IOMMU-API. But to make this 
performing reasonalbly well a few changes to the IOMMU-API are 
required. I already have some ideas which we can discuss if you want.
I have been experimenting with an iommu_map_range call, which maps a 
given scatterlist of discontiguous physical pages into a contiguous 
virtual region at a given IOVA. This has some performance advantages 
over just calling iommu_map iteratively. First, it reduces the amount of 
table walking / calculation needed for mapping each page, given how you 
know that all the pages will be mapped into a single 
virtually-contiguous region (so in most cases, the first-level table 
calculation can be reused). Second, it allows one to defer the TLB (and 
sometimes cache) maintenance operations until the entire scatterlist has 
been mapped, rather than doing a TLB invalidate after mapping each page, 
as would have been the case if iommu_map were just being called from 
within a loop. Granted, just using iommu_map many times may be 
acceptable on the slow path, but I have seen significant performance 
gains when using this approach on the fast path.

Steve
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help