当前 SoftIRQ 能否抢占 运行 与 Linux 内核相同的 SoftIRQ?
Can the SoftIRQ prempt currently running the same SoftIRQ with Linux kernel?
我正在研究驱动程序的性能改进,应该考虑死锁的可能性。在 SoftIRQ 上下文中,spin_lock 将被保存并保护一些变量。在这种情况下,我应该使用 spin_lock 还是 spin_lock_bh? spin_lock_bh 听起来更安全,但我有一个关于 SoftIRQ 实现的一般性问题。
- 在SoftIRQ执行期间可以在同一个CPU上调度相同的softIRQ函数->我们需要在SoftIRQ
中使用spin_lock_bh
- 可以在另一个 CPU 上安排相同的 softIRQ 功能,但不相同 CPU -> 我们可以在 SoftIRQ
中使用 spin_lock
以上说法正确的是什么?
来自 Linux Kernel Development(第 2 版):
A softirq never preempts another softirq.
原因很简单:在 softIRQ 期间 软件中断被禁用。
所以在 softIRQ 函数中使用普通 spin_lock()
就足够了。
我正在研究驱动程序的性能改进,应该考虑死锁的可能性。在 SoftIRQ 上下文中,spin_lock 将被保存并保护一些变量。在这种情况下,我应该使用 spin_lock 还是 spin_lock_bh? spin_lock_bh 听起来更安全,但我有一个关于 SoftIRQ 实现的一般性问题。
- 在SoftIRQ执行期间可以在同一个CPU上调度相同的softIRQ函数->我们需要在SoftIRQ 中使用spin_lock_bh
- 可以在另一个 CPU 上安排相同的 softIRQ 功能,但不相同 CPU -> 我们可以在 SoftIRQ 中使用 spin_lock
以上说法正确的是什么?
来自 Linux Kernel Development(第 2 版):
A softirq never preempts another softirq.
原因很简单:在 softIRQ 期间 软件中断被禁用。
所以在 softIRQ 函数中使用普通 spin_lock()
就足够了。