当 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" 所代表的意思。
最近我研究了 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" 所代表的意思。