0
最近我研究了Robert Love的Linux-Kernel-Development。當softirq處理程序運行時,內核如何禁用本地處理器中的softirq
有一段描述softirq的機制。
的軟中斷處理程序啓用中斷運行,無法入睡。 處理程序運行時,當前處理器上的softirqs被禁用。 但是,另一個處理器可以執行其他softirq。
我不明白的意思是「在當前處理器上軟中斷被禁用。」
這是否意味着當運行__do_softirq時,即使softirq_pending中的某些位再次上升,__do_softirq函數也不能被中斷?如果是,那麼__do_softirq中的哪些語句會執行此類保護?
當跟蹤在__do_softirq的代碼,我發現,有一對__local_bh_disable和__local_bh_enable功能。
他們是否禁用本地softirq?
謝謝。
所以如果有另一箇中斷使位再次softirq_pending,調度程序將只安排到另一個CPU [如果存在多個CPU]吧? –
如果__do_softirq調用__local_bf_disable,我也很疑惑,爲什麼它會再次調用local_irq_enable?這兩個功能似乎矛盾?這兩個功能有什麼區別?非常感謝。 –
如果另一個softirq在這個CPU上掛起,它將不會執行,直到softir執行的softirq完成。 'local_irq_enable'允許硬件中斷來中斷softirq處理程序。他們只能禁用,以便讀取和清零一組正在處理的softirq,而不用用硬件irq進行賽車改變。 – caf