PowerVR (RGX) 驱动 fence

2025-12-03 2 0

下面给你一份 非常专业、适用于 PowerVR (RGX) 驱动/固件调试语境 的对比表,涵盖:

  • Native fence

  • Foreign fence

  • Update fence

并严格对应 PVRSRV Sync / UFO / FWCtx / CCB 的实际实现与常见问题(包括你 dump 中遇到的 <Invalid UFO update> 情况)。

✅ Native fence / Foreign fence / Update fence — 专业对比表

项目 Native Fence Foreign Fence Update Fence
定义(PVRSRV 官方语义) 当前 FWCtx / 当前 CCB 自己产生的 fence (本地生产,本地消费) 由外部生产者(其他 FWCtx / 其他进程 / CPU-side)生成,但被本 FWCtx 所依赖的 fence 一个需要本 FWCtx 在完成任务后主动写回的 UFO(更新动作由本 context 生产)
生产者(Producer)是谁? 本 FWCtx(例如 TA/3D/CDM/TO 自己提交的命令) 其他进程 / 其他 FWCtx / CPU / UM 层提交者 本 FWCtx(GPU 中某个任务完成后固件写 update)
消费者(Walter)是谁? 本 FWCtx 本身 本 FWCtx(等待外部 sync 完成) 其他 FWCtx 或 UM/CPU(等待本 context 的任务完成)
更新由谁完成? 本 FWCtx 完成后固件自动写(firmware-controlled) 外部 producer(UM/CPU 或其他 FWCtx)必须写更新 本 FWCtx 完成过程由固件写入 sync update
是否跨 Context? 否(本地同步) 是(跨 context/跨进程) 可能(通常跨 context,用于同步多个队列)
固件是否信任其格式? 100% 信任(因为本 context 产生) 需要验证(很容易出现 <Invalid UFO update>) 100% 信任(固件自己写)
典型使用场景 多段 GPU pipeline 内部同步(TA → 3D) Xorg/游戏需要等待别的队列完成 GPU 作为生产者向 UM 提供完成信号
在 debug_dump 中的表现 Waiting FENCE (native) Waiting FENCE (foreign) Waiting UPDATE 、Waiting UPDATE_FENCE
异常风险 较低 最高:外部 producer 更新失败、格式不对、UM/KM 版本不匹配 中等:固件无法写出更新(队列阻塞)
常见错误类型 Pipeline stall Invalid UFO update(你当前 dump 最大问题) Update 超时导致后续任务挂起
对应的 MMU 相关性 小或中:若 foreign producer 写到错误地址 小:固件写 update 出错较少出现 MMU fault
调试难度 最低 最高(涉及多个 client / 多个 FWCtx) 中等

📌 三者的本质关系(一句话理解)

Native fence

  • 是同一个 context 内部“自己等自己”,用于 GPU pipeline 内的同步(例如 TA 完成后才能开始 3D)。

Foreign fence

  • 是“等别人”。当前 FWCtx 等另一个上下文/进程/CPU 写出更新。

  • 如果别人不写或写错 → Invalid UFO update → GPU 卡住。

Update fence

  • 是“别人等我”。当前 FWCtx 完成任务后写一个更新,告知别人它已经完成。

🔥 Why Foreign Fence 最容易出问题?

因为 foreign fence 的 update:

  • 来自别的 FWCtx

  • 来自外部进程

  • 来自用户态驱动(UM)

  • 或来自 CPU

固件不是生产者,只是等待者(consumer)→ 它只能接收,不负责生成 → 任何格式/协议问题都会被标为 Invalid。

在 debug_dump 中反复出现:

Waiting FENCE (foreign)
\--- <Invalid UFO update>

这是典型:

UM/KM 驱动版本 mismatch → UFO 格式/字段不一致 → foreign fence update 被固件视为无效 → 多个 context 全部挂起。

📘 更专业的延伸对比(适合你这种在看源码和固件的开发者)

深度属性 Native Fence Foreign Fence Update Fence
固件与用户态协议依赖 最少 最多(需要 match sync protocol) 中等
依赖 Sync Prim / Sync Checkpoint? 是(且多为多方依赖)
固件是否需要 validate? 不需要 要验证 (ID/addr/value/type) 不需要
可能出现的错误代码 pipeline hang InvalidSyncPrim, SynclotSignalled UpdateTimeout
典型 CCD 状态 TA Waiting Waiting FENCE (foreign) Waiting UPDATE
对应的 SyncCP activity 少量 大量(你 dump 里 InUse=214) 若阻塞则逐渐增加

📌 “Invalid UFO update” 与 foreign fence 的特定关系

Invalid UFO update 几乎只出现在 foreign fence,因为 foreign fence 的 update 来自外部,固件必须验证:

  • 地址是否匹配

  • update count 是否按序

  • 内核态/用户态是否按协议写入

  • sync primitive 是否合法

  • update 操作是否落在 GPU 可访问的域

UM/KM mismatch 会让固件看到“结构字段错位”,因此所有 foreign fence 均报 invalid。

🎯 最实用的判断规则(做调试时即可用)

如果你在 debug_dump 看到 说明
Waiting FENCE (native) 长期不动 GPU pipeline 自己内部死锁,通常是 driver bug
Waiting FENCE (foreign) + <Invalid UFO update> UM/KM 不匹配 / 外部 producer 没按协议写 update(你当前情况)
Waiting UPDATE 长期卡住 当前 FWCtx 无法写出 update(CB 资源枯竭等)

单一 FWCtx(单 context)内部细节(native vs foreign vs update)

sequenceDiagram
    autonumber
    participant App as UM Client
    participant KM as Kernel Module
    participant FW as RGX Firmware (FWCtx)
    participant UFO as Sync/UFO Memory
    participant GPU as GPU HW

    App->>KM: Submit task A (refs UFO_X native)
    KM->>FW: CCB: TA/3D + native fence(target)
    FW->>GPU: Dispatch TA for Task A
    GPU-->>FW: Complete -> FW writes Native UPDATE to UFO_X  <-- (native fence complete)

    Note over FW,UFO: Native fence written by FW (trusted)

    App->>KM: Submit task B (depends on foreign UFO_Y)
    KM->>FW: CCB: Wait FENCE(UFO_Y) then do 3D
    FW->>UFO: Read UFO_Y (expect external update)
    App->>UFO: (external producer) write update to UFO_Y
    UFO-->>FW: Update read back
    alt Update valid
      FW->>FW: Continue execution (foreign satisfied)
    else Invalid (format/value mismatch)
      FW->>FW: Mark `<Invalid UFO update>` -> FWCtx waits `Waiting FENCE (foreign)`
      FW-->>KM: stalls, SyncCP remains InUse
    end

    Note over KM,FW: Update Fence = the pattern where FW writes update for others to wait on (FW acts as producer)

相关文章

发布评论