加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-13 23:25:11 所属栏目:Linux 来源:网络整理
导读:rcu_read_lock的实现是禁用抢占和屏障.并且softirq上下文不会被抢占. 所以有必要在softirq上下文中调用rcu_read_lock.障碍重要吗? 解决方法 是的,有必要使用rcu_read_lock来访问受rcu保护的指针,即使在softirq上下文中也是如此. 正如您所指出的,rcu_read_lo
rcu_read_lock的实现是禁用抢占和屏障.并且softirq上下文不会被抢占.
所以有必要在softirq上下文中调用rcu_read_lock.障碍重要吗?

解决方法

是的,有必要使用rcu_read_lock来访问受rcu保护的指针,即使在softirq上下文中也是如此.

正如您所指出的,rcu_read_lock和softirqs的一些实现(例如:TINY_RCU)使得即使您没有使用rcu_read_lock分隔rcu读取端关键部分也不存在损坏风险.但是,这不是rcu api的保证,只是因为具体实施而“破解”.这个hack可能会破坏rcu的不同实现(例如:PREEMPT_RCU).

如果您希望将softirqs视为显式rcu读取端关键部分,则必须使用RCU-sched api:
Documentation/RCU/whatisRCU.txt

RCU主要作者撰写的文章的以下部分直接解决了您的问题:
Requirements for RCU part 1: the fundamentals – Disabling preemption does not block grace periods

我想补充一点,如果CONFIG_PROVE_RCU = y,在rcu_read_lock之外执行rcu_dereference的代码将触发lockdep警告.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读