An IOMMU makes I/O virtualization more efficient by allowing VMMs to directly assign real devices to guest operating systems. It’s not possible for a VMM to emulate the translation and protection functions of an IOMMU, because the VMM can’t get between kernel-mode drivers running on the guest OS and the underlying hardware. So, in the absence of an IOMMU, VMMs instead present an emulated device to the guest OS. The VMM then translates the guest’s requests, ultimately, into requests to the real driver running down on the host OS or on the hypervisor.
Less than one month ago the version of KVM that is included in the Linux Kernel 2.6.28 introduced the support for Intel IOMMU called VT-d.
Now both implementations are supported and the AMD patch will soon reach the mainstream kernel (probably 2.6.29).