Avalon® 存储器映射(Avalon-MM) Intel® Stratix® 10 Hard IP+用于 PCI Express* 解决方案用户手册

ID 683527
日期 9/30/2019
Public
文档目录

7.1.1.1.2. 死锁风险和规避

具体情况下,设计实例硬件中的DMA引擎有可能陷入死锁。本节说明可能导致死锁的条件以及如何规避。

编程DMA Controller以使用Read Data Mover取回过多关于Read Data Mover描述符队列的描述符时,随后的背压循环可能导致死锁。

一旦Read Data Mover通过DMA Controller传送足够描述符到其自身的描述符队列进行队列填充,就会解除对ready输出的置位。DMA Controller依次置位其waitrequest输出,从而阻止Read Data Mover将任何剩余描述符写入其自身队列。即便这样,Read Data Mover仍继续发布MRd读请求,但由于“完成”(completion)不再能够被写入DMA Controller,因此不会发布MRd TLP相关的标记。Read Data Mover最终因无标记可用而停止,并陷入死锁状态。

为避免出现死锁情况,可限制每次取回的描述符的数量。这样做可确保Read Data Mover的描述符队列从不在其写入自身描述符队列时被被填满。