jerpelea opened a new pull request, #20296: URL: https://github.com/apache/nuttx/pull/20296
## Summary esp_openeth_initialize() (arch/xtensa/src/common/espressif/esp_openeth.c) attaches the MAC interrupt with esp_setup_irq() but never calls up_enable_irq(OPENETH_IRQ_MAC), unlike every other Espressif driver in this tree. Left masked, openeth_isr_handler() never runs and received frames are only picked up when the netdev work thread happens to run for some other reason (a transmit). A guest can therefore send but effectively not receive: ping still works because each request is itself a transmit, while a socket blocked in recvfrom() waits on a wake-up that never comes. Confirmed with a GDB breakpoint counter on openeth_isr_handler(): zero hits before the fix, dozens after, under QEMU's esp32s3 machine (the open_eth NIC it emulates). With the interrupt enabled, TCP retransmits over a fixed test window dropped from 86 to 4. Separately, openeth_ifdown() calls openeth_enable() right under a comment that says "Disable TX and RX" -- it should call openeth_disable(), which is what actually disables the two DMA descriptor rings. Fixed alongside since it's the same function and the same class of mistake. Board-independent (arch/xtensa/src/common/espressif), not specific to any one esp32s3 board; open_eth itself only exists as a QEMU peripheral, so there's no real-hardware regression risk from either change. ## Impact RELEASE ## Testing CI -- 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]
