On Thu, Apr 13, 2017 at 03:22:06PM -0600, Logan Gunthorpe wrote: > > > On 12/04/17 03:55 PM, Benjamin Herrenschmidt wrote: > > Look at pcibios_resource_to_bus() and pcibios_bus_to_resource(). They > > will perform the conversion between the struct resource content (CPU > > physical address) and the actual PCI bus side address. > > Ah, thanks for the tip! On my system, this translation returns the same > address so it was not necessary. And, yes, that means this would have to > find its way into the dma mapping routine somehow. This means we'll > eventually need a way to look-up the p2pmem device from the struct page. > Which means we will likely need a new flag bit in the struct page or > something. The big difficulty I see is testing. Do you know what > architectures or in what circumstances are these translations used? Any caller of pci_add_resource_offset() uses CPU addresses different from the PCI bus addresses (unless the offset is zero, of course). All ACPI platforms also support this translation (see "translation_offset"), though in most x86 systems the offset is zero. I'm aware of one x86 system that was tested with a non-zero offset but I don't think it was shipped that way. Bjorn