[U-Boot] [PATCH] net: Fix delay in net_retry test

Introduced in 45b4773 (net/arp: account for ARP delay, avoid duplicate packets on timeout)
Check the arp timeout and adjust the timeout start time before the call to eth_recv() so that the sandbox driver has the opportunity to adjust the sandbox timer after the new start time has been recorded.
Also, change the adjustment amount by 11 seconds instead of exactly the 10 seconds that the ping timout is expecting since the timeout check is looking for the time elapsed to be greater than but not equal to the specified delay.
Signed-off-by: Joe Hershberger joe.hershberger@ni.com
---
drivers/net/sandbox.c | 2 +- net/net.c | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-)
diff --git a/drivers/net/sandbox.c b/drivers/net/sandbox.c index 6763a24..d538d37 100644 --- a/drivers/net/sandbox.c +++ b/drivers/net/sandbox.c @@ -157,7 +157,7 @@ static int sb_eth_recv(struct udevice *dev, int flags, uchar **packetp) struct eth_sandbox_priv *priv = dev_get_priv(dev);
if (skip_timeout) { - sandbox_timer_add_offset(10000UL); + sandbox_timer_add_offset(11000UL); skip_timeout = false; }
diff --git a/net/net.c b/net/net.c index 4d5746a..fba111e 100644 --- a/net/net.c +++ b/net/net.c @@ -542,6 +542,9 @@ restart: #ifdef CONFIG_SHOW_ACTIVITY show_activity(1); #endif + if (arp_timeout_check() > 0) + time_start = get_timer(0); + /* * Check the ethernet for a new packet. The ethernet * receive routine will process it. @@ -570,10 +573,6 @@ restart: goto done; }
- if (arp_timeout_check() > 0) { - time_start = get_timer(0); - } - /* * Check for a timeout, and run the timeout handler * if we have one.

Hi Stefan,
On Mon, Dec 21, 2015 at 4:31 PM, Joe Hershberger joe.hershberger@ni.com wrote:
Introduced in 45b4773 (net/arp: account for ARP delay, avoid duplicate packets on timeout)
Check the arp timeout and adjust the timeout start time before the call to eth_recv() so that the sandbox driver has the opportunity to adjust the sandbox timer after the new start time has been recorded.
This had to change to allow sandbox tests to work. Please verify that it does not impair the behavior you intended with your patch.
Also, change the adjustment amount by 11 seconds instead of exactly the 10 seconds that the ping timout is expecting since the timeout check is looking for the time elapsed to be greater than but not equal to the specified delay.
Signed-off-by: Joe Hershberger joe.hershberger@ni.com
drivers/net/sandbox.c | 2 +- net/net.c | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-)
diff --git a/drivers/net/sandbox.c b/drivers/net/sandbox.c index 6763a24..d538d37 100644 --- a/drivers/net/sandbox.c +++ b/drivers/net/sandbox.c @@ -157,7 +157,7 @@ static int sb_eth_recv(struct udevice *dev, int flags, uchar **packetp) struct eth_sandbox_priv *priv = dev_get_priv(dev);
if (skip_timeout) {
sandbox_timer_add_offset(10000UL);
sandbox_timer_add_offset(11000UL); skip_timeout = false; }
diff --git a/net/net.c b/net/net.c index 4d5746a..fba111e 100644 --- a/net/net.c +++ b/net/net.c @@ -542,6 +542,9 @@ restart: #ifdef CONFIG_SHOW_ACTIVITY show_activity(1); #endif
if (arp_timeout_check() > 0)
time_start = get_timer(0);
/* * Check the ethernet for a new packet. The ethernet * receive routine will process it.
@@ -570,10 +573,6 @@ restart: goto done; }
if (arp_timeout_check() > 0) {
time_start = get_timer(0);
}
/* * Check for a timeout, and run the timeout handler * if we have one.
-- 2.5.0
U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot

Hi Joe,
On Monday 21 December 2015 16:50:52 Joe Hershberger wrote:
Hi Stefan,
On Mon, Dec 21, 2015 at 4:31 PM, Joe Hershberger joe.hershberger@ni.com
wrote:
Introduced in 45b4773 (net/arp: account for ARP delay, avoid duplicate packets on timeout)
Check the arp timeout and adjust the timeout start time before the call to eth_recv() so that the sandbox driver has the opportunity to adjust the sandbox timer after the new start time has been recorded.
This had to change to allow sandbox tests to work. Please verify that it does not impair the behavior you intended with your patch.
I can't see any reason this change would impair the behaviour. The runtime of the eth_rx() function should be small compared to the request timeout.
I haven't actually tested your change and won't be able to do until after the holydays, but as I think it is fine:
Reviewed-by: Stefan Brüns stefan.bruens@rwth-aachen.de
Also, change the adjustment amount by 11 seconds instead of exactly the 10 seconds that the ping timout is expecting since the timeout check is looking for the time elapsed to be greater than but not equal to the specified delay.
Signed-off-by: Joe Hershberger joe.hershberger@ni.com
drivers/net/sandbox.c | 2 +- net/net.c | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-)
diff --git a/drivers/net/sandbox.c b/drivers/net/sandbox.c index 6763a24..d538d37 100644 --- a/drivers/net/sandbox.c +++ b/drivers/net/sandbox.c @@ -157,7 +157,7 @@ static int sb_eth_recv(struct udevice *dev, int flags, uchar **packetp)> struct eth_sandbox_priv *priv = dev_get_priv(dev);
if (skip_timeout) {
sandbox_timer_add_offset(10000UL);
sandbox_timer_add_offset(11000UL); skip_timeout = false; }
diff --git a/net/net.c b/net/net.c index 4d5746a..fba111e 100644 --- a/net/net.c +++ b/net/net.c
@@ -542,6 +542,9 @@ restart: #ifdef CONFIG_SHOW_ACTIVITY
show_activity(1);
#endif
if (arp_timeout_check() > 0)
time_start = get_timer(0);
/* * Check the ethernet for a new packet. The ethernet * receive routine will process it.
@@ -570,10 +573,6 @@ restart: goto done;
}
if (arp_timeout_check() > 0) {
time_start = get_timer(0);
}
/* * Check for a timeout, and run the timeout handler * if we have one.
-- 2.5.0
U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot

On 21 December 2015 at 15:31, Joe Hershberger joe.hershberger@ni.com wrote:
Introduced in 45b4773 (net/arp: account for ARP delay, avoid duplicate packets on timeout)
Check the arp timeout and adjust the timeout start time before the call to eth_recv() so that the sandbox driver has the opportunity to adjust the sandbox timer after the new start time has been recorded.
Also, change the adjustment amount by 11 seconds instead of exactly the 10 seconds that the ping timout is expecting since the timeout check is looking for the time elapsed to be greater than but not equal to the specified delay.
Signed-off-by: Joe Hershberger joe.hershberger@ni.com
drivers/net/sandbox.c | 2 +- net/net.c | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-)
Acked-by: Simon Glass sjg@chromium.org
I'm planning to pick this up for the release. Please let me know if you have any concerns.
- Simon

On 7 January 2016 at 09:32, Simon Glass sjg@chromium.org wrote:
On 21 December 2015 at 15:31, Joe Hershberger joe.hershberger@ni.com wrote:
Introduced in 45b4773 (net/arp: account for ARP delay, avoid duplicate packets on timeout)
Check the arp timeout and adjust the timeout start time before the call to eth_recv() so that the sandbox driver has the opportunity to adjust the sandbox timer after the new start time has been recorded.
Also, change the adjustment amount by 11 seconds instead of exactly the 10 seconds that the ping timout is expecting since the timeout check is looking for the time elapsed to be greater than but not equal to the specified delay.
Signed-off-by: Joe Hershberger joe.hershberger@ni.com
drivers/net/sandbox.c | 2 +- net/net.c | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-)
Acked-by: Simon Glass sjg@chromium.org
I'm planning to pick this up for the release. Please let me know if you have any concerns.
Applied to u-boot-dm/master.
participants (4)
-
Joe Hershberger
-
Joe Hershberger
-
Simon Glass
-
Stefan Bruens