【问题标题】:Can the SoftIRQ prempt currently running the same SoftIRQ with Linux kernel?SoftIRQ 能否抢占当前与 Linux 内核运行相同的 SoftIRQ?
【发布时间】:2017-05-29 09:59:35
【问题描述】:

我正在改进驱动程序的性能,应该考虑死锁的可能性。在 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

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

【问题讨论】:

    标签: linux kernel spinlock softirq


    【解决方案1】:

    来自Linux Kernel Development(第二版):

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-07
      • 1970-01-01
      • 2016-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-23
      相关资源
      最近更新 更多