Call schedule() in net_lwip_rx() to service U-Boot tasks and actions during packet rx.
As a cleanup also move sys_check_timeouts() here and remove it from the functions that call net_lwip_rx(). This resolves the issue of an active watchdog resetting the board on long network activities. Suggested-by: Jerome Forissier <jerome.foriss...@linaro.org> Signed-off-by: Tim Harvey <thar...@gateworks.com> --- v2: - remove duplication of sys_check_timeouts() from functions that call net_lwip_rx() --- net/lwip/dhcp.c | 1 - net/lwip/dns.c | 1 - net/lwip/net-lwip.c | 7 +++++++ net/lwip/ping.c | 1 - net/lwip/tftp.c | 1 - net/lwip/wget.c | 1 - 6 files changed, 7 insertions(+), 5 deletions(-) diff --git a/net/lwip/dhcp.c b/net/lwip/dhcp.c index 92bd7067a7fb..b79b746db390 100644 --- a/net/lwip/dhcp.c +++ b/net/lwip/dhcp.c @@ -57,7 +57,6 @@ static int dhcp_loop(struct udevice *udev) /* Wait for DHCP to complete */ do { net_lwip_rx(udev, netif); - sys_check_timeouts(); bound = dhcp_supplied_address(netif); if (bound) break; diff --git a/net/lwip/dns.c b/net/lwip/dns.c index 19172ac959ac..738f8bf3196b 100644 --- a/net/lwip/dns.c +++ b/net/lwip/dns.c @@ -91,7 +91,6 @@ static int dns_loop(struct udevice *udev, const char *name, const char *var) net_lwip_rx(udev, netif); if (dns_cb_arg.done) break; - sys_check_timeouts(); if (ctrlc()) { printf("\nAbort\n"); break; diff --git a/net/lwip/net-lwip.c b/net/lwip/net-lwip.c index f05c4cd3f64f..e8d4cc542ed8 100644 --- a/net/lwip/net-lwip.c +++ b/net/lwip/net-lwip.c @@ -13,8 +13,10 @@ #include <lwip/etharp.h> #include <lwip/init.h> #include <lwip/prot/etharp.h> +#include <lwip/timeouts.h> #include <net.h> #include <timer.h> +#include <u-boot/schedule.h> /* xx:xx:xx:xx:xx:xx\0 */ #define MAC_ADDR_STRLEN 18 @@ -284,6 +286,11 @@ int net_lwip_rx(struct udevice *udev, struct netif *netif) int len; int i; + /* lwIP timers */ + sys_check_timeouts(); + /* Other tasks and actions */ + schedule(); + if (!eth_is_active(udev)) return -EINVAL; diff --git a/net/lwip/ping.c b/net/lwip/ping.c index d8042ceecf99..1390b914f7d8 100644 --- a/net/lwip/ping.c +++ b/net/lwip/ping.c @@ -136,7 +136,6 @@ static int ping_loop(struct udevice *udev, const ip_addr_t *addr) ping_send(&ctx); do { - sys_check_timeouts(); net_lwip_rx(udev, netif); if (ctx.alive) break; diff --git a/net/lwip/tftp.c b/net/lwip/tftp.c index fae701bad2eb..7495dc077ba5 100644 --- a/net/lwip/tftp.c +++ b/net/lwip/tftp.c @@ -200,7 +200,6 @@ static int tftp_loop(struct udevice *udev, ulong addr, char *fname, sys_timeout(NO_RSP_TIMEOUT_MS, no_response, &ctx); while (!ctx.done) { net_lwip_rx(udev, netif); - sys_check_timeouts(); if (ctrlc()) { printf("\nAbort\n"); ctx.done = ABORTED; diff --git a/net/lwip/wget.c b/net/lwip/wget.c index ea1113e18b11..fcaf684e61da 100644 --- a/net/lwip/wget.c +++ b/net/lwip/wget.c @@ -525,7 +525,6 @@ int wget_do_request(ulong dst_addr, char *uri) while (!ctx.done) { net_lwip_rx(udev, netif); - sys_check_timeouts(); if (ctrlc()) break; } -- 2.25.1