
我没有看到任何关于它的警告,我认为回调是连续调用的,但没有关于如何调用回调的信息.
是否有可能在我注册的同一个通用netlink接口上同时调用多个回调?我是否需要回调之间的任何同步?
为了使问题更简单:
可以在两个内核中抢占或同时运行单个netlink回调吗?
解决方法 答案假设 Linux内核版本3.11或4.2,可能对许多其他人有效.回答截至2015年9月的当前情况.回调是否可以并发是注册时struct genl_family的可配置属性,但如果没有明确指定,则可能默认为关闭.这是由于1)struct genl_family中存在bool parallel_ops成员,以及2)在C中默认为0的静态持续时间结构的未初始化成员.
收到Netlink消息后,最终调用函数genl_rcv_msg(),它确定消息的GeNetlink系列和parallel_ops上的条件,以决定是否锁定全局genl_mutex.
static int genl_rcv_msg(struct sk_buff *skb,struct nlmsghdr *nlh){ struct genl_family *family; int err; family = genl_family_find_byID(nlh->nlmsg_type); if (family == NulL) return -ENOENT; if (!family->parallel_ops) genl_lock(); err = genl_family_rcv_msg(family,skb,nlh); if (!family->parallel_ops) genl_unlock(); return err;} 一旦调用了genl_family_rcv_msg()(受互斥锁保护或不受保护),就会调用实际的回调here.
以上是内存溢出为你收集整理的Linux Kernel Generic Netlink – 它是并发的吗?全部内容,希望文章能够帮你解决Linux Kernel Generic Netlink – 它是并发的吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)