pci: advertise a page aligned ATS
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. Note that in the future we may extend pcie_ats_init() to accept parameters like queue depth and page alignment. Cc: qemu-stable@nongnu.org Signed-off-by: Jason Wang <jasowang@redhat.com> Message-Id: <20200909081731.24688-1-jasowang@redhat.com> Reviewed-by: Peter Xu <peterx@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
0259c78ca7
commit
4c70875372
@ -971,8 +971,9 @@ void pcie_ats_init(PCIDevice *dev, uint16_t offset)
|
|||||||
|
|
||||||
dev->exp.ats_cap = offset;
|
dev->exp.ats_cap = offset;
|
||||||
|
|
||||||
/* Invalidate Queue Depth 0, Page Aligned Request 0 */
|
/* Invalidate Queue Depth 0, Page Aligned Request 1 */
|
||||||
pci_set_word(dev->config + offset + PCI_ATS_CAP, 0);
|
pci_set_word(dev->config + offset + PCI_ATS_CAP,
|
||||||
|
PCI_ATS_CAP_PAGE_ALIGNED);
|
||||||
/* STU 0, Disabled by default */
|
/* STU 0, Disabled by default */
|
||||||
pci_set_word(dev->config + offset + PCI_ATS_CTRL, 0);
|
pci_set_word(dev->config + offset + PCI_ATS_CTRL, 0);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user