我正在开发一个内核模块,它在softirq (netfilter预路由钩子)和用户上下文(在ioctl调用中)之间共享数据结构。
阅读此link后,我知道在修改数据(使用spin_lock_bh或spin_lock_irqsave)时需要禁用用户上下文中的软件中断,并在共享数据上的操作完成后重新启用它们。
但是,我不确定是否需要获取softirq处理函数中的锁。我需要在这里也抓取锁吗(使用spin_lock)?
我的理解是,如果与另一个softirq或hardirq共享数据,我只需要在softirq处理程序中使用自旋锁。我的理解正确吗?
发布于 2013-07-12 03:28:30
如果您与任何代码共享数据,则必须获得锁,该锁可以在同一时间执行。内核可能会同时执行您的softirq和您的ioctl处理程序,因此您必须通过获得一个锁。
使用spin_lock_bh或spin_lock_irqsave禁用中断时,仅在当前处理器上禁用中断。所以,处理另一个的中断是可以的。
https://stackoverflow.com/questions/17601390
复制相似问题