Mr.*_*eer 5 c locking netfilter linux-kernel softirq
我正在开发一个内核模块,它在softirq(netfilter预路由挂钩)和用户上下文(在ioctl调用中)之间共享数据结构.
阅读此链接后,我知道我需要在修改数据时使用用户上下文中的软件中断(使用spin_lock_bh或者spin_lock_irqsave),并在完成对共享数据的操作后重新启用它们.
但是,我不确定是否需要在softirq处理函数中获取锁.我是否也需要在这里抓住锁(使用spin_lock)?
我的理解是,如果与另一个softirq或hardirq共享数据,我只需要在softirq处理程序中使用自旋锁.我的理解是否正确?
如果与任何可以同时执行的代码共享数据,则必须获得锁。内核可能会执行您的软中断和 ioctl 处理程序,因此您必须获得锁。
当您使用 或 禁用中断时spin_lock_bh,spin_lock_irqsave仅在当前处理器上禁用中断。因此,可以在另一台上处理中断。