Linux内核中,SoftIRQ能否抢占当前正在运行的同一SoftIRQ?

3
我正在进行驱动程序的性能提升,并且应该考虑死锁的可能性。在SoftIRQ上下文中,spin_lock将被保持并保护一些变量。在这种情况下,我应该使用spin_lock还是spin_lock_bh?spin_lock_bh听起来更安全,但我有一个关于SoftIRQ实现的一般问题。
  • 相同的softIRQ函数在执行SoftIRQ期间可以在同一CPU上调度 -> 我们需要在SoftIRQ中使用spin_lock_bh
  • 相同的softIRQ函数可以在其他CPU上调度,但不是同一CPU -> 我们可以在SoftIRQ中使用spin_lock
以上陈述中哪个是正确的?
1个回答

2

来自Linux内核开发(第二版):

一个softirq永远不会抢占另一个softirq。

原因很简单:在softIRQ期间软件中断被禁用

因此,在softIRQ函数中使用普通的spin_lock()就足够了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接