Chinaunix

标题: rcu 锁的使用 [打印本页]

作者: wan3610425    时间: 2014-06-03 17:38
标题: rcu 锁的使用

我想在一个链表中使用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上同时执行软中断和进程上下文也有问题?

求大神指点下如何使用,谢谢!
作者: chenyu105    时间: 2014-06-05 08:46
关于写者:从链表删除元素后,如果要释放该元素,需要call_rcu释放,这样与rcu_read_lock配对,如果不释放就没问题。
作者: wan3610425    时间: 2014-06-05 08:59
回复 2# chenyu105


    谢谢提醒!我现在没有用rculist 中的API函数,写者删除和更新,添加时在后面加了这句synchronize_rcu。应该也可以吧




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2