C softirq——它在网络堆栈中的持续时间有多远?

C softirq——它在网络堆栈中的持续时间有多远?,c,linux,linux-kernel,interrupt-handling,softirq,C,Linux,Linux Kernel,Interrupt Handling,Softirq,我一直在研究Linux中的中断,尤其是softirq(我对内核的网络子系统感兴趣)。我理解上半部分和下半部分的概念,但我不清楚的是,softirq上下文持续多久?直到内核堆栈中的哪个点我们处理softirq?例如,当入口路径命中ip_rcv()时,我们是否仍处于软中断模式?粗鲁地说,softirq上下文将持续到softirq处理程序返回 ip_rcv(),我们仍然处于软中断模式吗 是的,我们在softirq环境中。我们在函数内部,函数名为NET\u RX\u SOFTIRQ 让我们谈谈考虑NAP

我一直在研究Linux中的
中断
,尤其是
softirq
(我对内核的网络子系统感兴趣)。我理解上半部分和下半部分的概念,但我不清楚的是,
softirq
上下文持续多久?直到内核堆栈中的哪个点我们处理
softirq
?例如,当入口路径命中ip_rcv()时,我们是否仍处于软中断模式?

粗鲁地说,softirq上下文将持续到softirq处理程序返回

ip_rcv(),我们仍然处于软中断模式吗

是的,我们在softirq环境中。我们在函数内部,函数名为
NET\u RX\u SOFTIRQ

让我们谈谈考虑NAPI的接收路径。

引发
NET\u RX\u SOFTIRQ
(它通过访问
irq\u stat.\uu SOFTIRQ\u pending
)来修改每个CPU的数据结构)。然后softirq处理程序将数据包向上移动到堆栈中。所有这些操作都在softirq上下文中。因此,这里有两个不同的方向:1)这是转发数据包-因此softirq上下文将持续到该数据包将被添加到某个输出队列,并且处理程序将返回为止。2) 这是本地输入数据包-因此softirq将一直持续到该数据包将被添加(排队)到本地套接字接收队列,然后处理程序返回。在网络堆栈中的任何位置都会发生这种情况。当基本softirq函数/处理程序终止时,它全部终止。

粗鲁地说,softirq上下文持续到softirq处理程序返回为止

ip_rcv(),我们仍然处于软中断模式吗

是的,我们在softirq环境中。我们在函数内部,函数名为
NET\u RX\u SOFTIRQ

让我们谈谈考虑NAPI的接收路径。
引发
NET\u RX\u SOFTIRQ
(它通过访问
irq\u stat.\uu SOFTIRQ\u pending
)来修改每个CPU的数据结构)。然后softirq处理程序将数据包向上移动到堆栈中。所有这些操作都在softirq上下文中。因此,这里有两个不同的方向:1)这是转发数据包-因此softirq上下文将持续到该数据包将被添加到某个输出队列,并且处理程序将返回为止。2) 这是本地输入数据包-因此softirq将一直持续到该数据包将被添加(排队)到本地套接字接收队列,然后处理程序返回。在网络堆栈中的任何位置都会发生这种情况。当基本softirq函数/处理程序终止时,它全部终止