最近我研究了Robert Love的Linux-Kernel-Development。
有一段描述了softirq的机制。
softirq处理程序在启用中断的情况下运行,无法休眠。 处理程序运行时,当前处理器上的softirqs被禁用。 但是,另一个处理器可以执行其他软件。
我不明白“当前处理器上的softirqs被禁用”的含义。
这是否意味着在运行__do_softirq时,即使softirq_pending中的某些位再次引发,__ do_softirq函数也不会被中断?如果是,那么__do_softirq中的哪些语句可以做这种保护?
当跟踪__do_softirq中的代码时,我发现有一对__local_bh_disable和__local_bh_enable函数。
他们是否禁用本地softirq?
感谢。
答案 0 :(得分:1)
是,__local_bh_disable
和__local_bh_enable
禁用并启用当前CPU上的softirqs处理。 Softirqs也被称为"下半部",这就是" bh"在那些名字中代表。