3

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

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

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

起初,我试图spinlock_t在同一个导出的内存区域上分配一个,但是因为每个板都是单处理器,the spinlock_t所以无论如何都没有分配。

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

4

1 回答 1

0

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

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

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

于 2013-03-05T03:28:12.123 回答