On Wed, Jun 19, 2019 at 12:56:26PM -0600, Logan Gunthorpe wrote: > Presently, there is no path to DMA map P2PDMA memory, so if a TLP > targeting this memory hits the root complex and an IOMMU is present, > the IOMMU will reject the transaction, even if the RC would support > P2PDMA. > > So until the kernel knows to map these DMA addresses in the IOMMU, > we should not enable the whitelist when an IOMMU is present. > > Link: https://lore.kernel.org/linux-pci/20190522201252.2997-1-logang@xxxxxxxxxxxx/ > Fixes: 0f97da831026 ("PCI/P2PDMA: Allow P2P DMA between any devices under AMD ZEN Root Complex") > Signed-off-by: Logan Gunthorpe <logang@xxxxxxxxxxxx> > Reviewed-by: Christian König <christian.koenig@xxxxxxx> > Cc: Bjorn Helgaas <bhelgaas@xxxxxxxxxx> > Cc: Christoph Hellwig <hch@xxxxxx> Applied to for-linus for v5.2, since we merged 0f97da831026 during the v5.2 merge window, thanks! > --- > drivers/pci/p2pdma.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/drivers/pci/p2pdma.c b/drivers/pci/p2pdma.c > index a98126ad9c3a..a4994aa3acc0 100644 > --- a/drivers/pci/p2pdma.c > +++ b/drivers/pci/p2pdma.c > @@ -18,6 +18,7 @@ > #include <linux/percpu-refcount.h> > #include <linux/random.h> > #include <linux/seq_buf.h> > +#include <linux/iommu.h> > > struct pci_p2pdma { > struct gen_pool *pool; > @@ -299,6 +300,9 @@ static bool root_complex_whitelist(struct pci_dev *dev) > struct pci_dev *root = pci_get_slot(host->bus, PCI_DEVFN(0, 0)); > unsigned short vendor, device; > > + if (iommu_present(dev->dev.bus)) > + return false; > + > if (!root) > return false; > > -- > 2.20.1 >