微信公众号 mindshare思享
以下内容会谈到:
1. NMI的使用场景。
2. 在arm上怎么模拟NMI
a. 通过GIC的中断优先级模拟
b. 通过SDEI接口模拟
NMI的使用场景
首先我们来说一下NMI的使用场景。
在x86上,很久以前就使用NMI来作为调试手段:
-
早期的PC 用它来报如内存出错这样的硬件问题
-
现代的服务器在前面板上有一个物理的NMI按钮
-
看门狗中断可以发送到NMI, 进而得到系统出现问题(比如hard lock,检测在中断禁止情况下的deadlock)的现场信息,而不是仅仅重启。
-
performance counter 可以直接挂到local APIC上。
Hard lockup detector使用一个周期性的NMI来检测中断被长时间关闭而导致严重的问题(hard lockup)。
NMI中断周期性产生,这个中断会调用函数就是watchdog_overflow_callback,
这个函数主要就是调用is_hardlockup。
而这个函数主要就是查看hrtimer_interrupts变量在时钟中断处理函数里有没有被更新。
假如没有更新,就意味着中断出了问题,可能被错误代码长时间的关中断了。
如果有问题的话,触发show_regs和CPU backtrace来调试hardlockup问题。