On 2021-06-27 15:34, Sven Peter wrote:
[...]
In the long term, I'd like to extend the dma-iommu framework itself to
support iommu pagesizes with a larger granule than the CPU pagesize if that is
something you agree with.
BTW this isn't something we can fully support in general. IOMMU API
users may expect this to work:
iommu_map(domain, iova, page_to_phys(p1), PAGE_SIZE, prot);
iommu_map(domain, iova + PAGE_SIZE, page_to_phys(p2), PAGE_SIZE, prot);
Although they do in principle have visibility of pgsize_bitmap, I still
doubt anyone is really prepared for CPU-page-aligned mappings to fail.
Even at the DMA API level you could hide *some* of it (at the cost of
effectively only having 1/4 of the usable address space), but there are
still cases like where v4l2 has a hard requirement that a page-aligned
scatterlist can be mapped into a contiguous region of DMA addresses.
This would be important to later support the thunderbolt DARTs since I would be
very uncomfortable to have these running in (software or hardware) bypass mode.
Funnily enough that's the one case that would be relatively workable,
since untrusted devices are currently subject to bounce-buffering of the
entire DMA request, so it doesn't matter so much how the bounce buffer
itself is mapped. Even with the possible future optimisation of only
bouncing the non-page-aligned start and end parts of a buffer I think it
still works (the physical alignment just has to be considered in terms
of the IOMMU granule).
Robin.