From: David Woodhouse <dwmw2@xxxxxxxxxxxxx> Date: Wed, 28 Oct 2015 22:31:50 +0900 > On Wed, 2015-10-28 at 13:10 +0200, Shamir Rabinovitch wrote: >> On Wed, Oct 28, 2015 at 03:30:01PM +0900, David Woodhouse wrote: >> > > > +For systems with IOMMU it is assumed all DMA translations use the IOMMU. >> > >> > Not entirely true. We have per-device dma_ops on a most architectures >> > already, and we were just talking about the need to add them to >> > POWER/SPARC too, because we need to avoid trying to use the IOMMU to >> > map virtio devices too. >> >> SPARC has it's implementation under arch/sparc for dma_ops (sun4v_dma_ops). >> >> Some drivers use IOMMU under SPARC for example ixgbe (Intel 10G ETH). >> Some, like IB, suffer from IOMMU MAP setup/tear-down & limited address range. >> On SPARC IOMMU bypass is not total bypass of the IOMMU but rather much simple >> translation that does not require any complex translations tables. > > We have an option in the Intel IOMMU for pass-through mode too, which > basically *is* a total bypass. In practice, what's the difference > between that and a "simple translation that does not require any > [translation]"? We set up a full 1:1 mapping of all memory, and then > the map/unmap methods become no-ops. > > Currently we have no way to request that mode on a per-device basis; we > only have 'iommu=pt' on the command line to set it for *all* devices. > But performance-sensitive devices might want it, while we keep doing > proper translation for others. In the sparc64 case, the 64-bit DMA address space is divided into IOMMU translated and non-IOMMU translated. You just set the high bits differently depending upon what you want. So a device could use both IOMMU translated and bypass accesses at the same time. While seemingly interesting, I do not recommend we provide this kind of flexibility in our DMA interfaces. -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html