Re: [PATCH v4 2/7] iommu/core: split mapping to page sizes as supportedby the hardware
From: Stepan Moskovchenko
Date: Thu Nov 10 2011 - 16:12:23 EST
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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/