当 softirq 处理程序运行时,内核如何在本地处理器中禁用 softirq

How kernel disable the softirq in the local processor when softirq handler runs

最近我研究了 Robert Love 的 Linux-Kernel-Development。

有一段描述了softirq的机制。

软中断处理程序 运行 已启用中断且无法休眠。 当处理程序 运行s 时,当前处理器上的软中断被禁用。 然而,另一个处理器可以执行其他软中断。

没看懂"softirqs on the current processor are disabled."的意思

这是否意味着当运行宁__do_softirq时,即使softirq_pending中的某些位再次上升,__do_softirq功能也无法中断?如果是,那么 __do_softirq 中的哪些语句提供这种保护?

在跟踪__do_softirq中的代码时,我发现有一对__local_bh_disable和__local_bh_enable函数。

他们是否禁用本地软中断?

谢谢。

是的,__local_bh_disable__local_bh_enable 禁用和启用当前 CPU 上的软中断处理。 Softirqs 也被称为 "bottom halves",这就是这些名称中的 "bh" 所代表的意思。