local_irq_save和 local_irq_disable
生活随笔
收集整理的這篇文章主要介紹了
local_irq_save和 local_irq_disable
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
1. 關中斷 可以通過下面兩個函數中的其中任何一個關閉當前處理器上的所有中斷處理,這兩個函數定義在 <asm/system.h>中: void local_irq_save(unsigned long flags); void local_irq_disable(void); local_irq_save的調用把當前的中斷狀態(開或關)保存到flags中,然后禁用當前處理器上的中斷。注意, flags 被直接傳遞, 而不是通過指針來傳遞,這是由于local_irq_save被實現為宏。 local_irq_disable不保存狀態而關閉本地處理器上的中斷發送; 只有我們知道中斷并未在其他地方被禁用的情況下,才能使用這個版本。 2. 開中斷 可通過如下函數打開中斷: void local_irq_restore(unsigned long flags); void local_irq_enable(void); local_irq_restore將保存的flags狀態值恢復(即local_irq_save的入參flag), 恢復之前的狀態(開或關)。 local_irq_enable則無條件打開中斷。 在一個關閉中斷的環境中調用local_irq_disable和local_irq_enable后會破壞之前的中斷響應狀態。盡管調用local_irq_disable前是關中斷的環境,但是在調用local_irq_enable后卻變成開中斷,這顯然不是我們希望的。 調用local_irq_restore后不一定會開啟中斷,只會恢復調用local_irq_save之前的中斷狀態,如果調用local_irq_save之前是開中斷,那么就打開中斷;如果調用local_irq_save之前是關中斷,那么就關閉中斷。 所以local_irq_save和local_irq_restore會更安全。 沒有方法全局禁用整個系統的所有中斷。 內核開發者認為關閉所有中斷的代價太高,因此沒有必要提供這個能力。 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的local_irq_save和 local_irq_disable的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 堡垒之夜在哪玩(《堡垒之夜》)
- 下一篇: 内核中引发bug并打印信息