并发、锁、生命周期与电源管理
1. 并发来源
- polling delayed work;
- sensor IRQ;
- sysfs读写;
- netlink;
- governor切换;
- cdev注册/注销;
- cpufreq/devfreq notification;
- suspend/resume;
- driver remove。
2. Zone锁
zone lock保护温度、mode、governor和 instances。update和 policy切换不能并发破坏 target。sensor get_temp可能睡眠,driver需遵循调用上下文。
3. Cdev锁
同一 cooling device可收到多个 zone target。cdev update锁保护 target聚合和当前 state,避免重复/交错 set_cur_state。
4. 全局列表
zone/cdev/governor全局注册列表受 Core锁保护。新 cdev注册时需尝试绑定已有 zones,反之亦然。
5. Poll work
unregister必须 cancel_delayed_work_sync,防止 zone释放后 polling继续。IRQ driver则先禁止硬件和 synchronize IRQ。
6. Sensor remove
1 | disable TSADC IRQ/channels |
实际 devm action顺序必须与 probe逆序依赖一致。
7. Suspend
Rockchip driver:
-关闭 TSADC channels;
-切 pinctrl;
-disable clocks;
-resume reset/initialize;
-恢复 TSHUT、alarm、controller;
-重新读取/update。
8. Cooling PM
CPU/GPU cooling device在 suspend时可能被 cpufreq/devfreq core停用。resume后 zone update应重新施加必要限制,避免短暂无 cap。
9. 错误温度
get_temp失败时 Core不应将其当低温解除 cooling。driver需返回 errno;监控 daemon也应把“无数据”视为故障,而不是0°C。
10. Deadlock
避免在 zone锁内同步触发会回调同一 thermal path的 cpufreq/devfreq notifier。Core和 cooling drivers使用延后更新/既定锁顺序;厂商扩展应保持相同规则。
正在加载留言…