Okay, seperate thread for this one. On Thu, Nov 10, 2011 at 07:28:39PM +0000, David Woodhouse 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. > > Yeah, that sounds useful.
As I said some changes to the IOMMU-API are required in my opinion. These changes should also allow it to move over old-style IOMMUs like Calgary or GART later. The basic idea is that IOMMU drivers should be required to put every device they are responsible for into a default domain. The DMA mapping code can query this default domain for each device. Also the default domain has capabilities that can be queried. Those capabilities include the size and offset of the address space they can re-map. For GART and Calgary this will be the aperture, for VT-d and AMD IOMMU the whole 64bit address space. Another capability is whether addresses outside of that area are 1-1 mapped or no accessible to the device. The generic DMA-mapping code will use that information to initialize its allocator and uses iommu_map/iommu_unmap to create and destroy mappings as requested by the DMA-API (but the DMA-mapping code does not need to create a domain of its own). The good thing about these default domains is that IOMMU drivers can implement their own optimizations on it. The AMD IOMMU driver for example already makes a distinction between dma-mapping domains and other protection-domains. The optimization for dma-mapping domains is that the leaf-pages of the page-table are keept in an array so that it is very easy to find the PTE for an address. Those optimizations are still possible with the default-domain concept. In short, the benefits of the default-domain concept are: 1) It allows existing optimizations for the DMA-mapping code paths to persist 2) It also fits old-style IOMMUs like GART, Calgary and others An open problem is how to report reserved ranges of an address-space. These ranges might exist from a BIOS requirement for 1-1 mapping of certain address ranges (in AMD jargon: Unity mapped ranges, something similar exists on VT-d afaik) or hardware requirements like the reserved address range used for MSI interrupts. Regards, Joerg -- AMD Operating System Research Center Advanced Micro Devices GmbH Einsteinring 24 85609 Dornach General Managers: Alberto Bozzo, Andrew Bowd Registration: Dornach, Landkr. Muenchen; Registerger. Muenchen, HRB Nr. 43632 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html