我编写了一个与网络过滤器挂钩交互的内核模块。
网络过滤器挂钩在 Softirq 上下文中运行。
我正在访问全局数据结构“哈希表”来自软中断上下文以及进程上下文。进程上下文访问是由于sysctl文件用于修改哈希表的内容。
我正在使用 spinlock_irq_save。
spin_lock api 的选择是否正确?在性能和锁定标准方面。
如果在另一个处理器上安排中断会发生什么?当当前处理器上的锁已被进程上下文代码持有时?
Firstly:
因此,根据上述所有详细信息,我得出的结论是我的软中断可以在两个内核上同时运行。
是的,这是正确的。您的软中断处理程序可能“同时在多个 CPU 上”执行。
您使用自旋锁的结论对我来说听起来是正确的。然而,这假设关键部分(即,在持有自旋锁的情况下执行的部分)具有以下属性:
- 它不能休眠(例如,获取阻塞互斥锁)
- 它应该尽可能短
一般来说,如果您只是更新哈希表,那么这里应该没问题。
如果 IRQ 处理程序尝试获取进程上下文所持有的自旋锁,那就没问题。只要您的进程上下文未在持有该锁的情况下休眠,该锁就应该在短时间内释放,从而允许 IRQ 处理程序继续前进。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)