【问题标题】:Sharing data between softirq and process context在 softirq 和进程上下文之间共享数据
【发布时间】:2013-07-10 04:44:57
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c linux-kernel locking netfilter softirq


    【解决方案1】:

    如果您与任何可以同时执行的代码共享数据,您必须获得锁。内核可能会同时执行您的 softirq 和 ioctl 处理程序,因此您必须获得锁。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-15
      • 1970-01-01
      • 2016-10-05
      • 2023-03-04
      相关资源
      最近更新 更多