Linux内核软中断触发与执行四步曲
1. 触发(raise)
硬中断处理末尾调用 __raise_softirq_irqoff(),置位 per-CPU pending 位图(每位对应一类软中断)。
2. 执行入口(三个时机)
· 硬中断返回(irq_exit)立即尝试
· 软中断重新开启(local_bh_enable)
· ksoftirqd 内核线程兜底
3. do_softirq() 处理循环
关本地中断 → 拷贝 pending → 按优先级依次执行 action,最多循环 10 次(MAX_SOFTIRQ_RESTART)。
4. 过载兜底 → ksoftirqd 接管
若 10 次后仍有 pending,唤醒 per-CPU ksoftirqd 内核线程,在进程上下文继续处理,让出CPU给用户态,避免用户态饿死。