On Wed, Sep 09, 2020 at 04:17:31PM +0800, Jason Wang wrote: > After Linux kernel commit 61363c1474b1 ("iommu/vt-d: Enable ATS only > if the device uses page aligned address."), ATS will be only enabled > if device advertises a page aligned request. > > Unfortunately, vhost-net is the only user and we don't advertise the > aligned request capability in the past since both vhost IOTLB and > address_space_get_iotlb_entry() can support non page aligned request. > > Though it's not clear that if the above kernel commit makes > sense. Let's advertise a page aligned ATS here to make vhost device > IOTLB work with Intel IOMMU again.
IIUC the kernel commit should be needed because the VT-d Page Request Descriptor used the rest bits of the address for other use (bits 11-0), so logically an unaligned address can be mis-recognized with special meanings. I'd guess some other archs (with its own IOMMU) might support unaligned addresses and has different layout of page request descriptor, but not vt-d. > > Note that in the future we may extend pcie_ats_init() to accept > parameters like queue depth and page alignment. > > Cc: qemu-sta...@nongnu.org > Signed-off-by: Jason Wang <jasow...@redhat.com> Reviewed-by: Peter Xu <pet...@redhat.com> Maybe it would be good too that vhost provides real 4k-aligned addresses (in vhost_iotlb_miss)? My understanding is that PCI_ATS_CAP_PAGE_ALIGNED will be more compatible than without the bit set. E.g., so far vt-d emulation always cut the address with 4k no matter what iova was passed in. However not sure whether this will stop working with some new vIOMMUs joining. Thanks, -- Peter Xu