This is somewhat off-topic, but given the various concepts discussed in this thread I'm beginning to wonder how they will be implemented. The current implementation hooks the IOMMU API into the DMA mapping API, and the way this is done is by setting a single IOMMU (or rather a set of IOMMU operations) globally per bus type. There are two issues that I can see with that: one is that we can't support multiple IOMMUs in the system at all, and the other is that there is no context associated with the IOMMU ops, and therefore there is no way to differentiate between two instances of the same IOMMU. A few drivers use global variables to keep track of context information but that won't work with multiple instances, unless they keep a global list of all instances and then require explicit lookup in each of the IOMMU operations. That sounds more like a workaround rather than a proper solution to me. Discussion in this thread indicates that both of the above will be required at some point. Have I completely missed something or will we have to rework (parts of) the IOMMU API to make this work? One other thing that I have some difficulty understanding is how we can support things like process isolation using the current IOMMU API. Since a device will be statically assigned to one IOMMU domain at probe time there is no way we can change the address space upon a context switch. Thierry
Attachment:
pgp_AabL219Zg.pgp
Description: PGP signature