是否有必要在softirq上下文中调用rcu_read_lock

lin*_*xer 5 linux kernel rcu

rcu_read_lock的实现是禁用抢占和屏障。并且softirq上下文将不会被抢占。因此有必要在softirq上下文中调用rcu_read_lock。障碍重要吗?

Hou*_*eng 0

rcu_read_lock 是为了保护某些内核资源同时被修改而导致竞争条件错误。

资源必须防止的是:被两个软件任务/上下文同时使用和修改。

在 Linux 中,同时修改可能发生在:

  1. 从任务到任务的上下文切换,
  2. 从任务上下文切换到 IRQ 上下文
  3. 不同VCPU核心的任务并发访问

在单核CPU环境下的事件,1)和2)仍然可能发生。在修改关键资源的任务中,软件 IRQ 引发,进入软件 IRQ 上下文,运行 IRQ 处理程序并同时修改相同的资源。