2

我正在努力提高驱动程序的性能,应该考虑死锁的可能性。在 SoftIRQ 上下文中,将持有 spin_lock 并保护一些变量。在这种情况下,我应该使用 spin_lock 还是 spin_lock_bh?spin_lock_bh 听起来更安全,但我有一个关于 SoftIRQ 实现的一般性问题。

  • 在 SoftIRQ 执行期间,可以在同一个 CPU 上调度相同的 softIRQ 函数 -> 我们需要在 SoftIRQ 中使用 spin_lock_bh
  • 相同的 softIRQ 函数可以在另一个 CPU 上调度,但不是同一个 CPU -> 我们可以在 SoftIRQ 中使用 spin_lock

从上面的陈述中什么是正确的?

4

1 回答 1

1

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

一个软中断永远不会抢占另一个软中断。

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

所以spin_lock()在 softIRQ 函数中使用 plain 就足够了。

于 2017-01-14T16:23:17.560 回答