[RFC 0/8] Copy Offload with Peer-to-Peer PCI Memory
Jason Gunthorpe
jgunthorpe at obsidianresearch.com
Wed Apr 19 12:31:54 PDT 2017
On Wed, Apr 19, 2017 at 01:02:49PM -0600, Logan Gunthorpe wrote:
>
>
> On 19/04/17 12:32 PM, Jason Gunthorpe wrote:
> > On Wed, Apr 19, 2017 at 12:01:39PM -0600, Logan Gunthorpe wrote:
> > Not entirely, it would have to call through the whole process
> > including the arch_p2p_cross_segment()..
>
> Hmm, yes. Though it's still not clear what, if anything,
> arch_p2p_cross_segment would be doing.
Sets up the iommu for arches that place a iommu between the pci root
port and other pci root ports.
> In my experience, if you are going between host bridges, the CPU
> address (or PCI address -- I'm not sure which seeing they are the
> same on my system) would still work fine
Try it with VT-D turned on. It shouldn't work or there is a notable
security hole in your platform..
> > const struct dma_map_ops *comp_ops = get_dma_ops(completer);
> > const struct dma_map_ops *init_ops = get_dma_ops(initiator);
>
> So, in this case, what device does the completer point to? The PCI
> device or a more specific GPU device? If it's the former, who's
> responsible for setting the new dma_ops? Typically the dma_ops are arch
> specific but now you'd be adding ones that are tied to hmm or the gpu.
Donno, that is for GPU folks to figure out :)
But.. it could point to a GPU and the GPU struct device could have a
proxy dma_ops like Dan pointed out.
> >> I'm not sure I like the name pci_p2p_same_segment. It reads as though
> >> it's only checking if the devices are not the same segment.
> >
> > Well, that is exactly what it is doing. If it succeeds then the caller
> > knows the DMA will not flow outside the segment and no iommu setup/etc
> > is required.
>
> It appears to me like it's calculating the DMA address, and the check is
> just a side requirement. It reads as though it's only doing the check.
pci_p2p_same_segment_get_pa() then?
Jason
More information about the Linux-nvme
mailing list