在softirq和流程上下文之间共享数据

时间:2013-07-11 19:05:17

标签: c linux-kernel locking netfilter softirq

我正在开发一个内核模块,它在softirq(netfilter预路由挂钩)和用户上下文(在ioctl调用中)之间共享数据结构。

阅读此link后,我知道我需要在修改数据时使用spin_lock_bhspin_lock_irqsave禁用用户上下文中的软件中断,并重新启用它们一次共享数据的操作已完成。

但是,我不确定是否需要在softirq处理函数中获取锁定。 我是否也需要在这里抓住锁(使用spin_lock)?

据我了解,如果与另一个softirq或hardirq共享数据,我只需要在softirq处理程序中使用自旋锁。我的理解是否正确?

1 个答案:

答案 0 :(得分:4)

如果您与任何代码共享数据,您必须获得锁定,这可以在同一时间执行。内核可能同时执行你的softirq和你的ioctl处理程序,所以你必须获得一个锁。

使用spin_lock_bhspin_lock_irqsave禁用中断时,仅在当前处理器上禁用中断。因此,处理另一个中断是可以的。