跳到主要內容

發表文章

目前顯示的是 12月, 2016的文章

[LKML] enhanced printk for NMI in Linux

紀錄一下近期kernel為了NMI(non-maskable interrupt)的情況設計的一個 printk() 加強機制。 我們都知道,原本 NMI 發生時,如果剛好某個 core 正把 printk lock 拿住,就不能在 NMI handler 中去使用printk(), 否則會 deadlock。 SUSE 工程師 Petr Mladek 提了一個patch[1],可以針對 NMI 的情況繼續使用 printk()。 基本的想法: 在發生 NMI 時,呼叫 printk_nmi_enter(),printk內部就會切換到另一個printk func,l og 就會推進 單獨的 buffer ,離開 NMI context 後,再呼叫 printk_nmi_exit() 切回原本printk實作, 然後起一個 irq worker,worker後續會把 NMI buffer copy 進__log_buf。 想法很簡單,但實作上許多tricky之處,請詳閱 patch 說明,或...printk() 任何情況直接用下去就對了 XD [1]  https://patchwork.kernel.org/patch/8899761/