运维开发网

linux-kernel – 保护多处理器中的共享内存区域

运维开发网 https://www.qedev.com 2020-06-17 09:14 出处:网络
情况是我有2块板通过PCIE总线连接在一起.一个板是根端口,一个板是端点.端点端将内存区域导出到根端口端.
情况是我有2块板通过PCIE总线连接在一起.一个板是根端口,一个板是端点.端点端将内存区域导出到根端口端.

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

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

起初,我试图在同一个导出的内存区域分配一个spinlock_t,但由于每个板都是单处理器,所以无论如何都不会分配spinlock_t.

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

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

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

在PCIE规范中,还有部分描述了Atomic Operation,遗憾的是我们的PCIE主机控制器不支持此功能,因此我们无法利用此功能.

0

精彩评论

暂无评论...
验证码 换一张
取 消