I\'ve been reading about IOMMU support in Linux and have some questions regarding page tables in IOMMU:
While osgx's answer is true with the historical use of IOMMUs in the kernel, shared virtual memory use cases, specially with PCIe PASID will require sharing or shadowing IOMMU and CPU page tables, such that a pointer/VA (say to a pinned buffer) can be passed directly from user space driver to the device without any dma_map related kernel services.
Of course this will require new APIs for user space to be able to request SVM/shared page tables.
See SVM on Intel Graphics