【问题标题】:What is the best why to synchronize access to net_device structures?同步访问 net_device 结构的最佳原因是什么?
【发布时间】:2015-08-14 16:25:16
【问题描述】:
我正在使用 linux 内核版本 2.6。
我想同步对 single net_device 结构的访问。
在内核代码中寻找答案时,我遇到了与此问题相关的两种同步机制:
dev_base_lock 锁。
rtnl_lock() 函数。
我的问题是:
两者有什么区别?
是否有任何使用上述方法的经验法则?
- 我应该使用哪一个来同步访问单个 net_device
结构?
谢谢!
【问题讨论】:
标签:
linux-kernel
network-programming
linux-device-driver
【解决方案1】:
可以参考>
中的“8.15.Locking”章节
dev_base 列表和两个哈希表dev_name_head 和dev_name_index 受dev_base_lock 保护。但是,该锁仅用于序列化对列表和表的访问,而不用于序列化对 net_device 数据结构内容的更改。 net_device 内容更改由 Routing Netlink 信号量 (rtnl_sem) 处理,该信号量分别通过 rtnl_lock 和 rtnl_unlock 获取和发布。[*] 此信号量用于序列化对 net_device 实例的更改:
[*] 其他例程也可用于获取和释放信号量。有关详细信息,请参阅 include/linux/rtnetlink.h。