royzah opened a new pull request, #20562: URL: https://github.com/apache/nuttx/pull/20562
*Note: Please adhere to [Contributing Guidelines](https://github.com/apache/nuttx/blob/master/CONTRIBUTING.md).* ## Summary A reply built in the receive path (ICMP echo, ARP, TCP ACK) is dropped when `imxrt_transmit()` finds every TX descriptor busy. A board that streams UDP keeps the ring full often enough that about 0.5% of pings go unanswered. The MAC counters show every request arrived (`IEEE_R_DROP`, `IEEE_R_MACERR`, `IEEE_R_CRC` all 0), so the reply is what gets lost. Now RX frames stay in the ring and RX is masked while the TX ring is full. When a TX completes, RX is unmasked and the ring drained before the stack is polled for more output. ## Impact i.MX RT ENET only. Nothing changes while the TX ring has room. When it is full, received frames wait for one TX completion instead of losing their reply. ## Testing Host: Ubuntu 24.04, x86_64. Builds in `ghcr.io/apache/nuttx/apache-nuttx-ci-linux`. | Check | Result | | --- | --- | | `./tools/checkpatch.sh -g HEAD~1..HEAD` | OK | | `imxrt1170-evk:netnsh` | builds | | `imxrt1064-evk:netnsh` | builds | | RT1176 board sending about 500 UDP frames/s | 0 of 4000 pings lost | Before: ``` $ ping -c1000 -i0.1 -W1 192.168.202.1 1000 packets transmitted, 993 received, 0.7% packet loss, time 104282ms ``` After: ``` $ ping -c1000 -i0.1 -W1 192.168.202.1 1000 packets transmitted, 1000 received, 0% packet loss, time 103190ms $ ping -c3000 -i0.05 -W1 192.168.202.1 3000 packets transmitted, 3000 received, 0% packet loss, time 152913ms ``` -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
