并发、锁、生命周期与电源管理

并发、锁、生命周期与电源管理

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
2
3
4
5
6
disable TSADC IRQ/channels
-> unregister zones/devm cleanup
-> cancel Core work
-> unregister panic notifier
-> clock off/reset
-> free data

实际 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使用延后更新/既定锁顺序;厂商扩展应保持相同规则。

文章互动

阅读 --

留言

0 条留言

正在加载留言…