VirtIO-IOMMU Comes To x86 With Linux 5.14
Added two years ago to the Linux kernel was the VirtIO-IOMMU driver (merged in Linux 5.3) with an original focus on AArch64 for hardware for paravirtual IOMMU after being worked on out-of-tree for years prior. Now with Linux 5.14 in 2021 the VirtIO-IOMMU code is adapted to work on x86 Intel/AMD hardware too.
The IOMMU specification within VirtIO allows for the device to manage DMA from one or more end points and can act as a proxy for physical IOMMUs managing devices assigned to the guest. VirtIO-IOMMU can deal with managing both emulated and para-virtualized devices.
This x86 support for VirtIO-IOMMU comes after supporting the new VIOT ACPI table. The ACPI Virtual I/O Translation Table (VIOT) is used for describing the topology of para-virtual platforms and in this case on x86 is used for describing the relation between virtio-iommu and endpoints.
Besides virtio-iommu for x86, the IOMMU changes for Linux 5.14 also include Arm SMMU updates, Intel VT-d now supporting asynchronous nested capabilities, and a variety of other improvements. Also one new is the "amd_iommu=force_enable" kernel command line option for forcing IOMMU on platforms where it's normally problematic. AMD Stoney is among the platforms often exhibiting buggy IOMMU behavior.