On Tue, Oct 17, 2017 at 4:14 AM, Christoph Hellwig <hch@xxxxxx> wrote: > Just took a quick look over this and I basically agree with the comments > from Robin. > > What I don't understand is why you're even trying to do all these > hacky things. > > It seems like the controller should simply set dma_pfn_offset for > each device hanging off it, and all the supported architectures > should be updated to obey that if they don't do so yet, and > you're done without needing this giant mess. My understanding is that dma_pfn_offset is that it is a single constant offset from RAM, in our case, to map to PCIe space. But in my commit message I detail how our PCIe controller presents memory with multiple regions with multiple different offsets. If an EP device maps to a region on the host memory, yes we can set the dma_pfn_offset for that device for that location within that range,. But if the device then unmaps and allocates from another region with a different offset, it won't work. If I set dma_pfn_offset I have to assume that the device is using only one region of memory only, not more than one, and that it is not unmapping that region and mapping another (with a different offset). Can I make those assumptions?