Kernel branch: 3.0.35
概要:
hardlockup用于检测进入中断之后导致死锁的情况。原理:
利用了NMI(非屏蔽中断)不能被屏蔽的特性,也就是说系统即使中断死锁后NMI也能被触发。
如果中断正常,hrtimer会定期被调用而去更新计数变量hrtimer_interrupts, 而NMI中断函数后
也会定期判断此值有没有变化,如果没有变化说明中断已经死掉。
code流程:
和watchdog.c公用一个文件,两个功能融合在一起,
lockup_detector_init -> //watchdog.c
cpu_callback -> //action CPU_UP_PREPARE
watchdog_prepare_cpu -> //hrtimer对应function是watchdog_timer_fn
cpu_callback ->
watchdog_enable ->
watchdog_nmi_enable -> //这里会开启nmi