分享

RCU writer方在释放元素时的三种调用方式 — Windows Live

 jijo 2009-08-04

RCU writer方在释放元素时的三种调用方式

原文:Paul McKenney, "RCU and Unloadable Modules", http:///Articles/217119/,  January 14, 2007.
 
RCU writer方在释放元素时有三种调用方式:
1. 调用synchronize_rcu()——同步方式
   调用举例:从一个链表中删除元素p
        list_del_rcu(p);
        synchronize_rcu();
        kfree(p);
 
2. 在IRQ中调用call_rcv()——异步方式
   调用举例: 从一个链表中删除元素p
        list_del_rcu(p);
        call_rcu(&p->rcu, p_callback);
 
       static void p_callback(struct rcu_head *rp)
      {
           struct pstruct *p = container_of(rp, struct pstruct, rcu);
           kfree(p);
      }
 
3. 模块或文件系统卸载时调用rcu_barrier()
   这里不能在卸载代码中简单调用synchronize_rcu(). 因为synchronize_rcu()虽然要等待一段grace period时间过去,
   但它并不等待回调函数完成. 所以需要调用rcu_barrier(),以等待所有的rcu回调函数完成.
   调用举例:模块卸载
       (1) Prevent any new RCU callbacks from being posted.
       (2) Execute rcu_barrier().
       (3) Allow the module to be unloaded.

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多