您好!
我们在系统中使用 SRIO 类型9消息。
在初始化时、Tx 空闲队列中填充了16个描述符、在每个事务中、描述符从 Tx 空闲队列中弹出、推送到 Tx 队列、并且在传输完成后、描述符自动返回到 Tx 空闲队列。 此行为是系统的正常行为。
但是、在某些情况下、SRIO 端口存在错误(例如、连接伙伴禁用了输入端口)、这会导致描述符在 Tx 队列中聚合(因为数据包无法传输到链路伙伴) 直到 Tx 空闲队列中没有空闲描述符。 现在、 即使 SRIO 问题得到解决(连接伙伴建立了一个链路、并且已完成所有 SRIO 对齐和错误恢复过程)、描述符仍滞留在 Tx 队列中、未进行传输 (有几种情况下会释放描述符、但在大多数情况下、卡住的描述符位于 Tx 队列中)。
我怀疑的是、Tx 队列仅在软件将描述符推送到 Tx 队列后或在之前的事务完成后、才会向 SRIO 发出信号、以从 Tx 队列中弹出描述符、 但是、如果没有描述符被推送到 Tx 队列或事务已完成(就像 Tx 队列中有描述符并且系统中发生错误) -没有信号来释放 Tx 队列中的描述符,这会导致我之前描述的现象。
1.是否有任何操作可以强制 PKTDMA/SRIO 模块在检测到卡滞情形后启动 Tx 队列事务? 不应该自动完成?
2.你可以批准/拒绝我的假设吗?
等待您的建议。