使用usb的Android手机连接PC,打开rndis,然后在手机和PC之间进行iperf测试。经过几个小时的测试,rndis 的端点 ep1out 没有收到小工具驱动程序在发送传输命令后应该收到的 xfercomplete 事件。
我尝试将事件缓冲区大小从 256 扩大到 4096,也将 grxfifosize 从 delault value 扩大,但问题仍然存在。
手机有 8 个 cortex-A53 核心,但我们留下 1 个小核心(cpu0)和 1 个大核心(cpu7)在线,并通过设置 dwc irq 的 smp_affinity 设置 dwc 中断不路由到 cpu0,因为吞吐量原因。所以dwc3_interrupt在cpu7上运行,dwc3_thread_interrupt也在cpu7上运行。
很奇怪,如果我们将 irq 路由到 cpu0,并且 dwc3_thread_interrupt 在不同的 core(cpu7) 运行,问题就消失了,不明白为什么。
代码是来自 synopsys 的开源代码,您可以在 kernel/drivers/usb/dwc3/gadget.c 找到
提前致谢。