On Thu, 2017-04-13 at 15:22 -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?
I think a bunch of non-x86 architectures but I don't know which ones outside of powerpc. > > When behind the same switch you need to use PCI addresses. If one tries > > later to do P2P between host bridges (via the CPU fabric) things get > > more complex and one will have to use either CPU addresses or something > > else alltogether (probably would have to teach the arch DMA mapping > > routines to work with those struct pages you create and return the > > right thing). > > Probably for starters we'd want to explicitly deny cases between host > bridges and add that later if someone wants to do the testing. Cheers, Ben. > Thanks, > > Logan