1)概要
__do_softirq函数处理是总是尽可能的执行所有未决软中断。
(1)关闭软中断:在preempt_count设置软中断标志:SOFTIRQ_OFFSET
让in_interrupt检查条件为真,进入软中断处理临界区,后面进来的处理请求,需要检查in_interrupt(),从而达到禁止本cpu上的软中断嵌套的目的。此时是在关硬中断的情况下,获得本cpu的local_softirq_pending()存储到局部变量
(2) 开始第一层循环:
清空软中中断未决标志,开硬中断。硬中断已打开,core现在可以接收新的硬件中断,local_softirq_pending()上又可能会后设置上新的未决标志。