local_softirq_pending位何时置位

硬中断执行结束在退出之前,都会在irq_exit中判断如果有pending的软中断就触发软中断:

local_softirq_pending位何时置位_第1张图片

内核代码通过调用raise_softirq_irqoff来触发相应的软中断,将相应的bit位置位,这样在irq_exit中判断就有pending的软中断,进而触发执行相应的软中断(直接执行软中断或触发软中断线程):

local_softirq_pending位何时置位_第2张图片

raise_softirq_irqoff函数调用__raise_softirq_irqoff设置了pending位后,调用in_interrupt判断当前上下文是不是处于中断中(软中断或硬中断),如果处于中断上下文就什么也不做(因为若是处于硬中断上下文,irq_exit就会执行软中断;如果处于软中断上下文,在软中断退出时也会执行到)。否则唤醒软中断线程执行,避免软中断执行有延迟。

 

local_softirq_pending位何时置位_第3张图片

local_softirq_pending位何时置位_第4张图片

你可能感兴趣的:(中断)