[PATCH v3 0/3] net: lwip: halt ethernet after network commands
Jerome Forissier
jerome.forissier at arm.com
Tue Jun 16 17:48:18 CEST 2026
On 12/06/2026 01:36, David Lechner wrote:
> Background:
>
> While testing [1], I found that it would take down my local network if
> I left the command prompt open for more than 30 seconds after running
> any network command. The network activity light on the board running
> U-Boot would go crazy and other network adapters on the network would
> start getting watchdog timeouts. So apparently, it is doing something
> quite low-level and I don't have any hardware to sniff that (Wireshark
> on another computer was no help since all network adapters on the
> network stopped working.) So I took a logical approach of looking at
> the code to see if I could find anything that would cause this. This
> seemed to only happen after I switched from the legacy network
> implementation to the lwIP implementation, so I looked for differences
> between the two implementations.
>
> After some investigation, I found that the lwIP implementation was
> different from the legacy implementation in that it does not call
> eth_halt() after a network command. Since the problem happened only
> when at the command prompt with no command running, this seemed like a
> likely culprit. And indeed, it does seem to fix the issue for me.
>
> For reference, the legacy implementation does something like this
> as documented in doc/develop/driver-model/ethernet.rst:
>
> (some net operation (ping / tftp / whatever...))
> eth_init()
> ops->start()
> eth_send()
> ops->send()
> eth_rx()
> ops->recv()
> (process packet)
> if (ops->free_pkt)
> ops->free_pkt()
> eth_halt()
> ops->stop()
>
> After this patch, the lwIP implementation will do the same thing for
> all ethernet commands.
>
> [1]: https://lore.kernel.org/u-boot/20260429-add-ethernet-support-for-genio-520-720-v4-0-be54e17239b7@baylibre.com/
>
> During review of v1, we noticed some existing bugs in wget_handle_request()
> so two new patches were added to fix those first before attempting the
> primary objective.
>
> Signed-off-by: David Lechner <dlechner at baylibre.com>
> ---
> Changes in v3:
> - Fix a few minor issues in first commit message.
> - Use reference counting in the final patch.
> - Rework do_ping() implementation to work with reference counting.
> - Link to v2: https://patch.msgid.link/20260512-net-lwip-add-stop-function-v2-0-85146da317dd@baylibre.com
>
> Changes in v2:
> - Added two new patches to address existing bugs in the code.
> - Don't remove eth_halt() before eth_init().
> - Link to v1: https://patch.msgid.link/20260509-net-lwip-add-stop-function-v1-1-62d854bfa66a@baylibre.com
>
> To: Jerome Forissier <jerome.forissier at arm.com>
> To: Tom Rini <trini at konsulko.com>
> To: Ilias Apalodimas <ilias.apalodimas at linaro.org>
> Cc: Julien Stephan <jstephan at baylibre.com>
> Cc: u-boot at lists.denx.de
>
> ---
> David Lechner (3):
> net: lwip: wget: fix error handling in wget_do_request()
> net: lwip: wget: return errno codes from wget_do_request()
> net: lwip: introduce net_lwip_eth_stop() function
>
> cmd/lwip/ping.c | 19 ++++++----
> cmd/lwip/sntp.c | 10 ++++-
> include/net-lwip.h | 1 +
> net/lwip/dhcp.c | 15 ++++++--
> net/lwip/dns.c | 7 +++-
> net/lwip/net-lwip.c | 16 ++++++++
> net/lwip/nfs.c | 4 ++
> net/lwip/tftp.c | 4 ++
> net/lwip/wget.c | 107 ++++++++++++++++++++++++++++++----------------------
> 9 files changed, 122 insertions(+), 61 deletions(-)
> ---
> base-commit: 3cdce049f90d77c3f9221f1eb73922384c8972c3
> change-id: 20260509-net-lwip-add-stop-function-7f7794074844
>
> Best regards,
> --
> David Lechner <dlechner at baylibre.com>
Series applied to my net queue for master, thanks!
--
Jerome
More information about the U-Boot
mailing list