Quoting Daniel Vetter (2021-01-14 09:02:57) > On Wed, Jan 13, 2021 at 10:08 PM Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> wrote: > > Quoting Daniel Vetter (2021-01-13 20:50:11) > > > On Wed, Jan 13, 2021 at 4:43 PM Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> wrote: > > > > > > > > Quoting Daniel Vetter (2021-01-13 14:06:04) > > > > > We have too many people abusing the struct page they can get at but > > > > > really shouldn't in importers. Aside from that the backing page might > > > > > simply not exist (for dynamic p2p mappings) looking at it and using it > > > > > e.g. for mmap can also wreak the page handling of the exporter > > > > > completely. Importers really must go through the proper interface like > > > > > dma_buf_mmap for everything. > > > > > > > > If the exporter doesn't want to expose the struct page, why are they > > > > setting it in the exported sg_table? > > > > > > You need to store it somewhere, otherwise the dma-api doesn't work. > > > Essentially this achieves clearing/resetting the struct page pointer, > > > without additional allocations somewhere, or tons of driver changes > > > (since presumably the driver does keep track of the struct page > > > somewhere too). > > > > Only for mapping, and that's before the export -- if there's even a > > struct page to begin with. > > > > > Also as long as we have random importers looking at struct page we > > > can't just remove it, or crashes everywhere. So it has to be some > > > debug option you can disable. > > > > Totally agreed that nothing generic can rely on pages being transported > > via dma-buf, and memfd is there if you do want a suitable transport. The > > one I don't know about is dma-buf heap, do both parties there consent to > > transport pages via the dma-buf? i.e. do they have special cases for > > import/export between heaps? > > heaps shouldn't be any different wrt the interface exposed to > importers. Adding John just in case I missed something. > > I think the only problem we have is that the first import for ttm > simply pulled out the struct page and ignored the sgtable otherwise, > then that copypasted to places and we're still have some of that left. > Although it's a lot better. So largely the problem is importers being > a bit silly. > > I also think I should change the defaulty y to default y if > DMA_API_DEBUG or something like that, to make sure it's actually > enabled often enough. It felt overly draconian, but other than the open question of dma-buf heaps (which I realise that we need some CI coverage for), I can't think of a good reason to argue for hiding a struct page transport within dma-buf. The only other problem I see with the implementation is that there's nothing that says that each dmabuf->ops->map_dma_buf() returns a new sg_table, so we may end up undoing the xor. Or should each dma-buf return a fresh dma-mapping for iommu isolation? -Chris _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel