1)概要

从零开始理解Linux中断架构(24)软中断核心函数__do_softirq-LMLPHP

__do_softirq函数处理是总是尽可能的执行所有未决软中断。

(1)关闭软中断:在preempt_count设置软中断标志:SOFTIRQ_OFFSET

让in_interrupt检查条件为真,进入软中断处理临界区,后面进来的处理请求,需要检查in_interrupt(),从而达到禁止本cpu上的软中断嵌套的目的。此时是在关硬中断的情况下,获得本cpu的local_softirq_pending()存储到局部变量

(2) 开始第一层循环:

清空软中中断未决标志,开硬中断。硬中断已打开,core现在可以接收新的硬件中断,local_softirq_pending()上又可能会后设置上新的未决标志。

08-05 01:09