免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2796 | 回复: 2

[内核入门] rcu 锁的使用 [复制链接]

论坛徽章:
1
摩羯座
日期:2014-05-07 11:21:33
发表于 2014-06-03 17:38 |显示全部楼层

我想在一个链表中使用rcu,这个链表在进程和软中断上下文都会访问。要求支持smp,多核

看了一些文档,对rcu能否如下操作:
               
1,写者:  对于进程上下文则使用 spin_lock_bh
               对于软中断上下文使用 spin_lock

加入链表用 hlist_add_head_rcu, 受到rcu_assign_pointer 原子保护。
删除链表用 hlist_del_rcu,这个直接__hlist_del, 感觉和rcu没有关系呀?不懂


2,读者: 对于进程上下文则使用  rcu_read_lock_bh 保护
              对于软中断上下文       无操作。   

查找操作 hlist_for_each_entry_rcu (软中断上下文),hlist_for_each_entry_rcu_bh(进程上下文)

上面是对比网桥的代码mac-port表时分析出来的,能否这么简单使用??也有两个疑点,就是在多核下:

一个cpu进行软中断上下文的读操作,一个cpu进行软中段上下文 的写操作,这样好像有问题呀?
或者不同的cpu上同时执行软中断和进程上下文也有问题?

求大神指点下如何使用,谢谢!

论坛徽章:
0
发表于 2014-06-05 08:46 |显示全部楼层
关于写者:从链表删除元素后,如果要释放该元素,需要call_rcu释放,这样与rcu_read_lock配对,如果不释放就没问题。

论坛徽章:
1
摩羯座
日期:2014-05-07 11:21:33
发表于 2014-06-05 08:59 |显示全部楼层
回复 2# chenyu105


    谢谢提醒!我现在没有用rculist 中的API函数,写者删除和更新,添加时在后面加了这句synchronize_rcu。应该也可以吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP