第七章 异步访问的同步:7.8 同步机制的驱动集成
前几节的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 的完成。
| 角色 | 步骤 | 接口 | 必须 | amdgpu 实现 |
|---|---|---|---|---|
| 硬件 fence | 1. 分配时间线 | dma_fence_context_alloc() | 是 | 每个 ring 一个 context |
| 2. |