This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

在多核中使用QMSS的一些问题

各位TI的工程师:

           我碰到这样一个问题:我现在做的项目需要在核0里通过网口接收数据(NDK),在核一中通过BCP实现编解码,由于NDK和BCP都需要用到QMSS,就涉及在多核中配置QMSS,查看了相关文档,发现没有介绍如何在多核中使用QMSS。现在我采用如下方式做的:在MSMC中开辟了一块专门区间,并在核0以及核1将.cppi以及.qmss两个段都定位到该区间,然后在核0中调用qmss_init初始化qmss,调用qmss_insertmemregion()开辟了memregion0并调用cppi_initdescriptor初始化gloabl_fdq0供NDK使用;在核一中由于QMSS已经初始化完毕,直接调用qmss_start使得核一可以使用QMSS,接着调用qmss_insertmemregion()开辟了memregion1并调用cppi_initdescriptor()在memregion1中初始化global_fdq1,供BCP使用,现在主要有两个问题

   1 请问我这样做的思路有没有问题?(程序中确保核0中初始化QMSS的程序(如上所描述)在核1中相应的程序之前运行)

   2 在两个核中分别调用qmss_queue_open(),其中队列类型为QMSS_STARAVTION_QUEUE,队列号均为QMSS_QNUM_NOT_SPECIFIED,两个核都开始运行后发现只打开了一个队列,按照我的想法应该是打开两个队列才对。但我如果在核一中调用打开队列这个函数之前打上断点,然后再执行,发现就成功分配了两个队列。是不是该函数没有考虑过多核的情况(例如核0在打开队列时,占有一个semaphore,直到核0打开队列完成后才释放该semaphore,否则核1无法去打开队列)?

  • 多核使用时,由一个core负责公共QMSS Link RAM,pktDMA global region的初始化,memory region可以每个core各自初始化各自的,pktDMA channel也可以各自初始化各自的。对于NDK及BCP,只需要一个core负责初始化公共的link ram即可,其他的都可以各自初始化各自,至于你说的queue open是否做了多核的维护,可能跟你使用的pdk板卡有关,你下载使用最新的版本看看有没有做多核资源申请处理。

  • 谢谢回复,现在问题已经解决,是由于多核维护的问题(cache一致性),我用的PDK那个版本内定义了多核维护的接口,但该接口实现是空的,添加保持cache一致性的代码后问题解决