local_bh_disable
禁用下半部分(softirqs)的处理。Softirq 在中断返回路径或 ksoftirqd-(per cpu)-thread 上进行处理,如果系统遭受严重的 softirq-load,该线程将被唤醒。
preempt_disable
禁用抢占,这意味着当线程在preempt_disable
<->preemt_enable
范围内执行时,调度程序不会将其置于睡眠状态。这意味着,如果当前线程在该范围内时发生系统定时器中断,它可能会更新调度程序的计费表,但不会将上下文切换到另一个线程。这包括softirqd。
local_irq_disable
或local_irq_save
禁用本地 cpu 的中断。这意味着本地 cpu 不会对任何 irq 做出反应,因此它不会运行任何中断返回路径,因此无法在那里运行 softirq。
假设我的上述陈述是正确的(我不确定),那么在local_bh_disable
你调用之后调用preempt_disable
并且local_irq_save
(在进程上下文中)调用不是多余的吗?