2
如果我的電腦有兩個內核--CPU0和CPU1,CPU0的IRQ被禁用(local_irq_disabled())。如何在CPU1上使用進程來啓用CPU0的IRQ?如何在另一個內核上啓用IRQ?
如果我的電腦有兩個內核--CPU0和CPU1,CPU0的IRQ被禁用(local_irq_disabled())。如何在CPU1上使用進程來啓用CPU0的IRQ?如何在另一個內核上啓用IRQ?
不要。
如果CPU0上的代碼禁用了IRQ,那麼它需要禁用它們,因爲它正在做一些重要的事情。如果你奇蹟般地啓用它們,它的數據結構可能會損壞,並且內核會崩潰。
如果您的代碼在不合理的時間內保持IRQ禁用,那麼它就有問題,需要修復。
謝謝。我專注於關於Linux內核的可靠性,所以如果CPU0的IRQ在不合理的時間內被禁用(例如,一個壞的自旋鎖可能導致這種情況),那麼在CPU1上執行的進程將啓用中斷並釋放鎖,然後恢復問題。 – aves 2012-03-21 17:37:41
它不太可能會成功恢復。更可能的是,它會讓一些數據結構損壞,所以當你試圖訪問它們時會崩潰。但是,如果你真的堅持 - 試着將NMI發送給其他處理器(不要問我如何),讓NMI處理程序按照你的意願去做。 – ugoren 2012-03-21 19:28:51