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