保护多处理器中的共享内存区域

时间:2013-01-16 07:01:19

标签: linux-kernel multiprocessing

情况是我有2块板通过PCIE总线连接在一起。一个板是根端口,一个板是端点。端点端将内存区域导出到根端口端。

两块板之间的通信是通过软件消息队列实现的。队列元数据和缓冲区都位于导出的内存区域内。

双方可以同时访问内存区域(rootport通过其PCIE总线,端点通过其本地总线)。当双方都试图更新队列元数据时,这可能会导致问题。

首先,我尝试在同一个导出的内存区域分配spinlock_t,但由于每个主板都是单处理器,因此无法分配the spinlock_t

任何人都可以建议一种机制来保护共享区域或建议其他方法在两个板之间进行通信。任何建议表示赞赏。非常感谢!

1 个答案:

答案 0 :(得分:1)

感谢您的兴趣到目前为止。

我们最终用循环队列实现了共享内存通信。可以从此link引用该实现。我们将问题减少到单个生产者单个消费者,因此循环队列不需要锁定来保护。这种方法的局限性是我们必须为每个对等连接创建一个队列。

在PCIE规范中,还有一些部分描述了原子操作,遗憾的是我们的PCIE主机控制器不支持此功能,因此我们无法使用此功能。

相关问题