
[Android稳定性] 第033篇 [问题篇] suspend时shedule io操作导致线程阻塞引发死机
## 一、问题背景
工厂BLMMI工站的一台机器出现死机,进入dump状态。
## 二、问题分析
### 2.1 初步定位
通过分析dmesg日志,确定死机原因为watchdog bite,CPU0发生。
### 2.2 定位卡死线程
分析日志发现系统在挂起后未能正确resume,导致watchdog未在20秒内被喂狗。
### 2.3 查找阻塞的进程
通过查看tasks.txt,发现irq/141-pmic_pw线程卡在不可中断睡眠状态,推测为卡住的线程。
## 三、根本原因分析
分析栈回溯,发现irq/141-pmic_pw线程在挂起阶段执行mtdoops dump操作时,底层block device已挂起,导致线程卡死,无法完成resume。
## 四、解决方案
1. 在pwrkey_long_press_irq_event中仅设置标志,延迟执行dump操作。
2. 在系统resume后通过workqueue异步触发dump。
## 五、效果
避免挂起阶段执行阻塞的dump操作,解决suspend卡死问题。
## 六、测试建议
1. 检查按电源键时是否出现defer dump日志。
2. 检查挂起后唤醒是否出现Executing deferred mtdoops dump after resume日志。
3. 观察是否还会触发watchdog bite。