On 10/08/18 06:53 PM, Kit Chow wrote: > I was able to finally succeed in doing the dma transfers over ioat only > when prot has DMA_PTE_WRITE set by setting the direction to either > DMA_FROM_DEVICE or DMA_BIDIRECTIONAL. Any ideas if the prot settings > need to be changed? Are there any bad side effects if I used > DMA_BIDIRECTIONAL? Good to hear it. Without digging into the direction much all I can say is that it can sometimes be very confusing what the direction is. Adding another PCI device just adds to the confusion. I believe, the direction should be from the IOAT's point of view. So if the IOAT is writing to the BAR you'd set DMA_FROM_DEVICE (ie. data is coming from the IOAT) and if it's reading you'd set DMA_TO_DEVICE (ie. data is going to the IOAT). Using DMA_BIDIRECTIONAL just forgoes any hardware security / protection that the buffer would have in terms of direction. Generally it's good practice to use the strictest direction you can. > Given that using the pci bar address as is without getting an iommu > address results in the same "PTE Write access" error, I wonder if there > is some internal 'prot' associated with the non-translated pci bar > address that just needs to be tweaked to include DMA_PTE_WRITE??? No, I don't think so. The 'prot' will be a property of the IOMMU. Not having an entry is probably just the same (from the perspective of the error you see) as only having an entry for reading. Logan