On Wed, Jan 30, 2019 at 02:22:34PM -0500, Jerome Glisse wrote:
For GPU it would not work, GPU might want to use main memory (because it is running out of BAR space) it is a lot easier if the p2p_map callback calls the right dma map function (for page or io) rather than having to define some format that would pass down the information.
This is already sort of built into the sgl, you are supposed to use is_pci_p2pdma_page() and pci_p2pdma_map_sg() and somehow it is supposed to work out - but I think this is also fairly incomplete.
ie the current APIs seem to assume the SGL is homogeneous :(
Worry about optimizing away the struct page overhead later?
Struct page do not fit well for GPU as the BAR address can be reprogram to point to any page inside the device memory (think 256M BAR versus 16GB device memory).
The struct page only points to the BAR - it is not related to the actual GPU memory in any way. The struct page is just an alternative way to specify the physical address of the BAR page.
I think this boils down to one call to setup the entire BAR, like nvme does, and then using the struct page in the p2p_map SGL??
Jason