2015-10-09 19 views
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?

謝謝。

回答

1

是,__local_bh_disable__local_bh_enable禁用和當前CPU上啓用軟中斷的處理。 Softirqs也被稱爲「下半部分」,這就是這些名字中的「bh」所代表的。

+0

所以如果有另一箇中斷使位再次softirq_pending,調度程序將只安排到另一個CPU [如果存在多個CPU]吧? –

+0

如果__do_softirq調用__local_bf_disable,我也很疑惑,爲什麼它會再次調用local_irq_enable?這兩個功能似乎矛盾?這兩個功能有什麼區別?非常感謝。 –

+1

如果另一個softirq在這個CPU上掛起,它將不會執行,直到softir執行的softirq完成。 'local_irq_enable'允許硬件中斷來中斷softirq處理程序。他們只能禁用,以便讀取和清零一組正在處理的softirq,而不用用硬件irq進行賽車改變。 – caf

相關問題