When assigning a host device and protecting it with the virtio-iommu we may end up with qemu crashing with
qemu-kvm: virtio-iommu page mask 0xfffffffffffff000 is incompatible with mask 0x20010000 qemu: hardware error: vfio: DMA mapping failed, unable to continue This happens if the host features a 64kB page size and constraints the physical IOMMU to use a 64kB page size. By default 4kB granule is used by the qemu virtio-iommu device and this latter becomes aware of the 64kB requirement too late, after the machine init, when the vfio device domain is attached. virtio_iommu_set_page_size_mask() fails and this causes vfio_listener_region_add() to end up with hw_error(). Currently the granule is global to all domains. To work around this issue, despite the IOMMU MR may be bypassed, we transiently enable it on machine init done to get vfio_listener_region_add and virtio_iommu_set_page_size_mask called ealier, before the domain attach. That way the page size requirement can be taken into account before the guest gets started. Also get benefit of this series to do some cleanups in some traces which may confuse the end user. Best Regards Eric This series can be found at: https://github.com/eauger/qemu/tree/virtio-iommu-page-size-v1 Eric Auger (2): virtio-iommu: Fix 64kB host page size VFIO device assignment virtio-iommu: Rework the trace in virtio_iommu_set_page_size_mask() include/hw/virtio/virtio-iommu.h | 2 ++ hw/virtio/virtio-iommu.c | 49 +++++++++++++++++++++++--------- hw/virtio/trace-events | 1 + 3 files changed, 38 insertions(+), 14 deletions(-) -- 2.38.1