Here's another version of my series implementing the nevessary framework for emulation of guest-visible IOMMUs. I've incorporated the feedback from the last posting. I'm fairly confident that preliminary patches 1-3 are ready to go in, the rest might still need more consideration.
In particular, if anyone has thoughts on how to handle the case where an IOMMU mapping is invalidated by the guest where a qemu-side device currently has that piece of IOVA-space dma_memory_map()ed, I'd be interested to hear it.