參考《深入理解 Linux 核心》第 3 版 P216-217。down() 後釋放信號量可能訪問已銷毀資料結構。Completion 機制:
completion() 對應 up()(發送訊號)wait_for_completion() 對應 down()(等待訊號)關鍵差異:Completion 等待隊列自旋鎖確保 completion() 與 wait_for_completion() 不會並發執行;信號量僅防止多個 down() 並發。
local_irq_disable() / local_irq_save() # 關中斷
local_irq_enable() / local_irq_restore() # 開中斷
local_bh_disable() # 禁止軟中斷/Tasklet(preempt_count 軟中斷計數器 +1)
local_bh_enable() # 啟用軟中斷/Tasklet(計數器 -1,歸零時處理待決軟中斷)
軟中斷與 Tasklet 運行於中斷上下文(硬體中斷處理結束時激活)。有時希望 CPU 仍能響應硬中斷,但暫緩軟中斷,即使用 local_bh_disable() 而非關中斷。