Panic 递归保护
本文档说明在 TGOSKits / ArceOS / StarryOS 中引入 panic/oops 递归保护的目的、 基本原理、当前解决的问题,以及后续可继续演进的方向。
它关注的是 异常路径健壮性,而不是某个具体 bug 本身。
目的与意义
在当前 Starry lockdep 调试中,已经观察到这样一种现象:
- 先触发一个 lockdep 违例
- 如果违例后立即直接停机,系统可以稳定结束
- 如果违例后继续走普通 panic 路径,则可能出现 page fault、卡住、串口无响应等次生故障
这说明这里其实有两类不同问题:
- 是否应该进入 panic
- 进入 panic 之后,异常路径本身是否足够健壮
前者通常属于具体功能或锁顺序问题;后者则属于通用的内核异常路径设计问题。
把 panic/oops 递归保护单独设计出来的意义在于:
- 它不只服务于 lockdep
- 它同样适用于 panic、oops、BUG、die 等其他异常收尾路径
- 它能降低“主故障之后又在异常路径里继续放大故障”的概率
因此,这类机制应被视为一个独立主题,而不是夹带在某个具体修复里顺手处理。