NMI, FIQ 與arm構架那點事-(2)
阿新 • • 發佈:2018-10-31
微信公眾號 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問題。