This series adds support for VFIO endpoints to virtio-iommu. Versions 1 to 9 were posted by Bharat Bhushan, but I am taking over for now since he doesn't have much time to spend on it. Thanks again Bharat for the work!
Two major changes since [v9]: * Don't use per-endoint page_size_mask properties. Instead keep a global page size for the virtio-iommu device, updated when adding a VFIO endpoint. Reject hotplug if the page size is incompatible. * Try to make the MAP/UNMAP paths more efficient, by keeping track of memory region within the endpoint structure. More testing would be appreciated, since I can only test using a software model as host at the moment. But it does seem to hold well with PCIe hotplug/unplug, and pass-through to guest userspace, which are no mean feat. Note that one page size combination is not supported: host 64kB guest 4kB cannot work, because the host IOMMU driver will automatically pick 64kB pages which prevents mapping at a smaller granule. Supporting this case would require introducing a page size negotiation mechanism from the guest all the way to the host IOMMU driver. Possible, but not planned at the moment. [v9] https://lore.kernel.org/qemu-devel/20200323084617.1782-1-bbhush...@marvell.com/ Bharat Bhushan (7): virtio-iommu: Add memory notifiers for map/unmap virtio-iommu: Call memory notifiers in attach/detach virtio-iommu: Add replay() memory region callback virtio-iommu: Add notify_flag_changed() memory region callback memory: Add interface to set iommu page size mask vfio: Set IOMMU page size as per host supported page size virtio-iommu: Set supported page size mask Jean-Philippe Brucker (3): virtio-iommu: Fix virtio_iommu_mr() virtio-iommu: Store memory region in endpoint struct vfio: Don't issue full 2^64 unmap include/exec/memory.h | 26 +++++ hw/vfio/common.c | 19 ++++ hw/virtio/virtio-iommu.c | 204 ++++++++++++++++++++++++++++++++++++++- softmmu/memory.c | 13 +++ hw/virtio/trace-events | 5 + 5 files changed, 265 insertions(+), 2 deletions(-) -- 2.28.0