我正在开发一个内核模块,它在softirq(netfilter预路由挂钩)和用户上下文(在ioctl调用中)之间共享数据结构.
阅读此链接后,我知道我需要在修改数据时使用用户上下文中的软件中断(使用spin_lock_bh或者spin_lock_irqsave),并在完成对共享数据的操作后重新启用它们.
但是,我不确定是否需要在softirq处理函数中获取锁.我是否也需要在这里抓住锁(使用spin_lock)?
我的理解是,如果与另一个softirq或hardirq共享数据,我只需要在softirq处理程序中使用自旋锁.我的理解是否正确?