Message ID | 20200909081731.24688-1-jasowang@redhat.com |
---|---|
State | Accepted |
Commit | 4c70875372b821b045e84f462466a5c04b091ef5 |
Headers | show |
Series | pci: advertise a page aligned ATS | expand |
On 2020/9/9 下午4:17, 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. > > 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> > --- > hw/pci/pcie.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/hw/pci/pcie.c b/hw/pci/pcie.c > index 5b48bae0f6..d4010cf8f3 100644 > --- a/hw/pci/pcie.c > +++ b/hw/pci/pcie.c > @@ -971,8 +971,9 @@ void pcie_ats_init(PCIDevice *dev, uint16_t offset) > > dev->exp.ats_cap = offset; > > - /* Invalidate Queue Depth 0, Page Aligned Request 0 */ > - pci_set_word(dev->config + offset + PCI_ATS_CAP, 0); > + /* Invalidate Queue Depth 0, Page Aligned Request 1 */ > + pci_set_word(dev->config + offset + PCI_ATS_CAP, > + PCI_ATS_CAP_PAGE_ALIGNED); > /* STU 0, Disabled by default */ > pci_set_word(dev->config + offset + PCI_ATS_CTRL, 0); > Ping, Michael, want to pick this patch? Thanks
On Thu, Oct 15, 2020 at 03:47:09PM +0800, Jason Wang wrote: > > On 2020/9/9 下午4:17, 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. > > > > 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> > > --- > > hw/pci/pcie.c | 5 +++-- > > 1 file changed, 3 insertions(+), 2 deletions(-) > > > > diff --git a/hw/pci/pcie.c b/hw/pci/pcie.c > > index 5b48bae0f6..d4010cf8f3 100644 > > --- a/hw/pci/pcie.c > > +++ b/hw/pci/pcie.c > > @@ -971,8 +971,9 @@ void pcie_ats_init(PCIDevice *dev, uint16_t offset) > > dev->exp.ats_cap = offset; > > - /* Invalidate Queue Depth 0, Page Aligned Request 0 */ > > - pci_set_word(dev->config + offset + PCI_ATS_CAP, 0); > > + /* Invalidate Queue Depth 0, Page Aligned Request 1 */ > > + pci_set_word(dev->config + offset + PCI_ATS_CAP, > > + PCI_ATS_CAP_PAGE_ALIGNED); > > /* STU 0, Disabled by default */ > > pci_set_word(dev->config + offset + PCI_ATS_CTRL, 0); > > > Ping, Michael, want to pick this patch? > > Thanks Tagged, thanks!
diff --git a/hw/pci/pcie.c b/hw/pci/pcie.c index 5b48bae0f6..d4010cf8f3 100644 --- a/hw/pci/pcie.c +++ b/hw/pci/pcie.c @@ -971,8 +971,9 @@ void pcie_ats_init(PCIDevice *dev, uint16_t offset) dev->exp.ats_cap = offset; - /* Invalidate Queue Depth 0, Page Aligned Request 0 */ - pci_set_word(dev->config + offset + PCI_ATS_CAP, 0); + /* Invalidate Queue Depth 0, Page Aligned Request 1 */ + pci_set_word(dev->config + offset + PCI_ATS_CAP, + PCI_ATS_CAP_PAGE_ALIGNED); /* STU 0, Disabled by default */ pci_set_word(dev->config + offset + PCI_ATS_CTRL, 0);
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> --- hw/pci/pcie.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)