前几节的dma_fence、dma_resv、sync_file 与drm_syncobj都只是接口,框架本身不知道一个作业何时开始、何时结束。驱动要接入这套体系,就得让硬件的完成事件变成 fence,提交时从各处收集依赖,作业结束前把 fence 发布出去,还要让用户态能以 CPU 等待某次提交。这些工作中哪些由框架和调度器代办,哪些必须由驱动亲自实现,实现时又受哪些规则约束?1. 接入清单驱动接入同步机制的步骤如表 7.8.1 所示。使用 DRM 调度器(第 8 章)的驱动,对外发布的不是硬件 fence,而是调度器为每个作业创建的 finished fence(8.5);硬件 fence 只由run_job交给调度器,用来驱动 finished fence 的完成。表 7.8.1 驱动接入同步机制的步骤角色步骤接口必须amdgpu 实现硬件 fence1. 分配时间线dma_fence_context_alloc()是每个 ring 一个 context2.