[英]Set Interrupt Flag (sti) crashes linux kernel
我編寫了一個用於測試目的的簡單字符設備(Linux)。 我有2個核心的VM。 CPU0和CPU1。
我在字符設備中有以下代碼:
native_irq_enable(); smp_call_function_single(#Other CPU#,native_irq_enable);
如果我在不使用smp_call的情況下編譯字符設備,則一切正常。 例如,如果我調用另一個函數: smp_call_function_single(#Othe CPU#,native_halt())
,則內核不會崩潰。 但是如果我調用smp_call_function_single(#Othe CPU#,native_safe_halt())
,內核將崩潰,因為我設置了IF(中斷標志)。
我從第二個CPU設置IF時內核崩潰有什么原因嗎? (如果我從CPU0設置IF,則內核不會崩潰。)
謝謝
當您使用smp_call_function_single
將函數發送到另一個 CPU時,該函數將由IPI處理程序執行,您不需要執行重新啟用中斷處理程序中的所有中斷的操作。 特別是,執行您的函數的函數文檔明確指出必須禁用所有IRQ 。
當CPU相同時,只需執行函數即可,而無需發送IPI,因此, generic_smp_call_function_single_interrupt
和中斷處理程序的限制不適用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.