For the dmabuf use cases it is not actually hard to find the P2P routing information - the driver constructing the dmabuf has it. The challenge is carrying that information from the originating driver, through the dmabuf apis to the final place that does the dma mapping. So I'm thinking of a datastructure for things like dmabuf/rdma MR that is sort of like this: struct phys_list { enum type; // CPU, p2p, encrypted, whatever struct p2p_provider *p2p_provider; struct phys_list *next; struct phys_range frags[]; } Where each phys_list would be a single uniform dma operation and easily carries the extra meta data. No struct page, no serious issue transfering the P2P routing information. > > I saw the Intel XE team make a complicated integration with the DMA > > API that wasn't so good. They were looking at an earlier version of > > this and I think the feedback was positive. It should make a big > > difference, but we will need to see what they come up and possibly > > tweak things. > > Not even sure what XE is, but do you have a pointer to it? It would > really be great if people having DMA problems talked to the dma-mapping > and iommu maintaines / list.. GPU driver https://lore.kernel.org/dri-devel/20240117221223.18540-7-oak.zeng@xxxxxxxxx/ Jason