本节讨论三类访问视图中的第三类,以及横跨三类视图的同步。CPU 视图与 GPU 视图的访问方都属于本驱动,设备间视图的访问方则属于另一个驱动:GEM 无法替对方建立映射,只能把对象交给对方,由对方自己完成映射。
本节先说明把对象交给另一个驱动需要解决哪些问题,再介绍对象如何经 dma-buf 导出与导入,最后说明多个访问方如何同步。
1. 共享对象需要解决的问题
把对象交给另一个驱动访问,导出与导入两侧共需解决三个问题:
| 共享凭证 | 导出方要给对象一个能跨进程、跨设备传递的凭证,同一对象多次导出应得到同一个凭证 | dma_buf |
| 使用外来内存 | 导入方要像使用本设备的对象一样使用这块内存,因此为它建立一个自己的 GEM 对象。这个对象不分配内存,需要记住内存来自哪个 dma-buf,以便释放时归还 | import_attach |
| 访问同步 | 多个设备访问同一块内存,要能看到彼此尚未完成的访问 | resv |
