日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

local_irq_disable

發布時間:2025/4/16 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 local_irq_disable 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

local_irq_disable僅僅是設置當前CPU的中斷屏蔽位

disable_irq 是禁用全部cpu中斷(只是當前irq)


如果你要禁止所有的中斷該怎么辦? 在2.6內核中,可以通過下面兩個函數中的其中任何一個關閉當前處理器上的所有中斷處理,這兩個函數定義在 <asm/system.h>中:
void local_irq_save(unsigned long flags);
void local_irq_disable(void);
對 local_irq_save的調用將把當前中斷狀態保存到flags中,然后禁用當前處理器上的中斷發送。注意, flags 被直接傳遞, 而不是通過指針來傳遞。 local_irq_disable不保存狀態而關閉本地處理器上的中斷發送; 只有我們知道中斷并未在其他地方被禁用的情況下,才能使用這個版本。
可通過如下函數打開中斷:
void local_irq_restore(unsigned long flags);
void local_irq_enable(void);
第一個版本將local_irq_save保存的flags狀態值恢復, 而local_irq_enable無條件打開中斷. 與 disable_irq不同, local_irq_disable不會維護對多次的調用的跟蹤。 如果調用鏈中有多個函數需要禁止中斷, 應該使用local_irq_save.
在2.6內核, 沒有方法全局禁用整個系統的所有中斷。 內核開發者認為關閉所有中斷的代價太高,因此沒有必要提供這個能力。如果讀者使用的老驅動程序調用了類似cli和sti這樣的函數,為了該驅動程序能夠在2.6下使用,則需要進行修改而使用正確的鎖。

in_interrupt()是判斷當前進程是否處于中斷上下文,這個中斷上下文包括底半部和硬件中斷處理過程,

函數實現:

#define in_interrupt() ({ const int __cpu = smp_processor_id(); /
(local_irq_count(__cpu) + local_bh_count(__cpu) != 0); })

判斷中斷計數和底半部計數是否〉0,如果只希望判斷是否在硬件中斷上下文,則可以使用:in_irq()。

總結

以上是生活随笔為你收集整理的local_irq_disable的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。