6678下的网口程序,主要实现功能是主核通过IPC中断通知从核(网口)将处理结果周期性的发送出去。我设置是收队列号为744,发队列号为736,初始化描述符个数都为16
现象1:加载GEL时运行正常。但不加载GEL,用platform_init初始化,发送60多个包后就发不出去了。
现象2:追踪下去发现Qmss_queuePop (gTxFreeQHnd)始终为NULL,导致后面包无法发出。
现象3:我用Qmss_getQueueEntryCount查询所有的8000个队列中的描述符个数,发现收队列744里面是16个,但是736里面的确没有。但648里有15个描述符。
请问
1、GEL和platform_init到底配置有什么区别,为什么会导致这个问题
2、为什么运行160多次之后,不再有空的描述符
求帮忙解答,谢谢各位了!
Andy Yin1:
platform init会根据上层的接口配置初始化EMAC,gel只是简单的初始化DDR、pll等,可能是platform init中的EMAC初始化影响。
从你的现象来看像是descriptor没有及时回收到TxFreeq中,确认一下代码中对descriptor资源的回收处理。
wj xz:
回复 Andy Yin1:
我在platform init中不初始化网口也不行
我查看了一下0-8000队列里的描述符个数。发现队列711(RX)里面是正常的16个,但队列736(TX)里面的确为空,所以POP不出来。但是在队列648(PA专用的最后一个队列)中发现了15个描述符。感觉发了一定数目后,发送不成功,导致TX队列中描述符减少,PA队列中描述符增加。如果说回收处理不正常的话,不应该出现发送160多次才POP不成功的情况,而且TX描述符回收是自动的吧,有点想不明白为什么突然就不行了。