Roo*_*nix 10 deadlock locking linux-kernel
我编写了一个与net-filter挂钩交互的内核模块.网络过滤器挂钩在Softirq上下文中运行.
我从softirq上下文以及Process上下文访问全局数据结构 "Hash Table".进程上下文访问是由sysctl引起的文件用于修改Hash表的内容.
我正在使用spinlock_irq_save.
这个spin_lock api的选择是否正确?在性能和锁定标准方面.
如果在另一个处理器上安排中断会发生什么?当前处理器锁已被进程上下文代码保持?
首先:
因此,根据上述所有详细信息,我得出的结论是我的软中断可以在两个内核上同时运行。
是的,这是正确的。您的软中断处理程序可能“同时在多个 CPU 上”执行。
您使用自旋锁的结论对我来说听起来是正确的。然而,这假设关键部分(即,在持有自旋锁的情况下执行的部分)具有以下属性:
一般来说,如果您只是更新哈希表,那么这里应该没问题。
如果 IRQ 处理程序尝试获取进程上下文所持有的自旋锁,那就没问题。只要您的进程上下文未在持有该锁的情况下休眠,该锁就应该在短时间内释放,从而允许 IRQ 处理程序继续前进。
| 归档时间: |
|
| 查看次数: |
194 次 |
| 最近记录: |