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]

Reply via email to