On 04/20/2015 12:49 AM, Alexandre Courbot wrote:
Aha, looks like both Vince and I overlooked this point. So IIUC we
would need to make sure a GPU buffer is only ever mapped once by the
IOMMU. This means we either need to preemptively entilery map it at
some point and just keep a reference count, or keep track of which
128k ranges are already mapped (again, with a reference count to know
when to unmap them).

First solution is tempting because it is simpler, but surely there is
something wrong with it?

If you map the whole buffer to IOMMU at once, you can use map_sg style calls, which would make your IOMMU mapping be faster. It also matches how dma_buf_map_attachment() works. So one way would be to first check if the buffer has already been mapped to GPU IOMMU space, and if so, increment refcount and reuse address. If not, map the buffer for example via dma_buf_map_attachment(), and stash the IOMMU address.

For me the trickiest to get right was freeing the buffer. When the user space was done with buffer, can we ensure all mappings are torn down first? Does that hold if user space just crashes?
_______________________________________________
Nouveau mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/nouveau

Reply via email to