在调试BCP和FFTC等硬核资源时,会有descriptor和free descriptor queue的相关配置
比如API:cppi_initDescriptor()就为全局fdq分配了若干个descriptors,
问题是该API中分配的descriptors数目是如何确定的?
在硬核资源中,对应的有allocate_fdq和deallocate_fdq,但是这只是释放了fdq,并没有释放被使用的descriptor资源。
例如:
我在多次调用BCP资源时,上面的全局fdq分配了32个descriptors,
所以我在使用allocate_fdq时,只能为RX分配31个descriptor(其中还有一个descriptor资源被TX使用)
继续调用就出现资源不够,调用descriptor失败。
请问,如何适时释放出已经用过的descriptor,使其可以继续被循环使用?
诚邀TI工程师解答,谢谢。
Andy Yin1:
cppi_initDescriptor入参中有参数desc_num指定申请的个数。
你可以为Tx及Rx分别申请free queue及descriptor,在使用的时候从TxFDQ中获取描述配置好后push到TxQ,同时配置后描述符放到RxFDQ中。在使用过程中,发送侧的描述符可以配置自动回收到TxFDQ,接收侧则由软件从RxQ中得到描述符重新配置后放回RxFDQ. 建议你仔细看看Navigator user guide关于数据收发流程。
Bear Melon:
回复 Andy Yin1:
1.当Tx/RxFDQ中使用完毕后,这个free descriptor不是应该被自动回收吗?
2.Rx和Tx分别申请了free queue和descriptor,现在我的free queue根据软件设置的回收机制可以重复使用,但是Tx和Rx申请的descriptor是用完一个就少一个,对于收发流程来说,descriptor应该是收发数据完毕就自动回收,可以供下次循环使用。
不知道我的理解对不对。
Andy Yin1:
回复 Bear Melon:
是否自动回收,取决于配置,对于Tx侧来说一般可以将TxFDQ配置为Tx returnQ,这样就可以自动回收,接收侧则不建议将RxFDQ直接配置为RxQ,需要手动回收。
descriptor需要及时回收,才可以循环使用。
Bear Melon:
回复 Andy Yin1:
谢谢 Andy 解答。
问题有2,
1. 在哪里可以将TxFDQ配置成Tx returnQ,以实现 descriptor 的自动回收
2. 手动回收 descriptor 在 lld layer 如何实现
Thx
Andy Yin1:
回复 Bear Melon:
将Tx descriptor中的returnQ信息配置为TxFDQ即可,建议你可以稍微看看Navigator user guide中对描述符的说明。
手动回收,原理很简单,就是从一个queue pop描述符,然后再将其push到另一个queue,即可,如果LLD中没有,可以调用QMSS提供的相关API实现。