Jason Gunthorpe
2024-Oct-17 13:46 UTC
[PATCH v1 1/4] mm/hmm: HMM API for P2P DMA to device zone pages
On Thu, Oct 17, 2024 at 06:12:55AM -0700, Christoph Hellwig wrote:> On Thu, Oct 17, 2024 at 10:05:39AM -0300, Jason Gunthorpe wrote: > > Broadly I think whatever flow NVMe uses for P2P will apply to ODP as > > well. > > ODP is a lot simpler than NVMe for P2P actually :(What is your thinking there? I'm looking at the latest patches and I would expect dma_iova_init() to accept a phys so it can call pci_p2pdma_map_type() once for the whole transaction. It is a slow operation. Based on the result of pci_p2pdma_map_type() it would have to take one of three paths: direct, iommu, or acs/switch. It feels like dma_map_page() should become a new function that takes in the state and then it can do direct or acs based on the type held in the state. ODP would have to refresh the state for each page, but could follow the same code structure. Jason
Christoph Hellwig
2024-Oct-17 13:49 UTC
[PATCH v1 1/4] mm/hmm: HMM API for P2P DMA to device zone pages
On Thu, Oct 17, 2024 at 10:46:44AM -0300, Jason Gunthorpe wrote:> On Thu, Oct 17, 2024 at 06:12:55AM -0700, Christoph Hellwig wrote: > > On Thu, Oct 17, 2024 at 10:05:39AM -0300, Jason Gunthorpe wrote: > > > Broadly I think whatever flow NVMe uses for P2P will apply to ODP as > > > well. > > > > ODP is a lot simpler than NVMe for P2P actually :( > > What is your thinking there? I'm looking at the latest patches and I > would expect dma_iova_init() to accept a phys so it can call > pci_p2pdma_map_type() once for the whole transaction. It is a slow > operation.You can't do it for the whole transaction. Here is my suggestion for ODP: http://git.infradead.org/?p=users/hch/misc.git;a=shortlog;h=refs/heads/dma-split-wip For NVMe I need to figure out a way to split bios on a per P2P type boundary as we don't have any space to record if something is a bus mapped address.