Message ID | 20240510005705.43069-1-kuba@kernel.org (mailing list archive) |
---|---|
State | Accepted |
Commit | 2d3b8dfd82d76b1295167c6453d683ab99e50794 |
Headers | show |
Series | [net-next,1/2] selftests: net: fix timestamp not arriving in cmsg_time.sh | expand |
Jakub Kicinski wrote: > On slow machines the SND timestamp sometimes doesn't arrive before > we quit. The test only waits as long as the packet delay, so it's > easy for a race condition to happen. > > Double the wait but do a bit of polling, once the SND timestamp > arrives there's no point to wait any longer. > > This fixes the "TXTIME abs" failures on debug kernels, like: > > Case ICMPv4 - TXTIME abs returned '', expected 'OK' > > Signed-off-by: Jakub Kicinski <kuba@kernel.org> Reviewed-by: Willem de Bruijn <willemb@google.com> > diff --git a/tools/testing/selftests/net/cmsg_sender.c b/tools/testing/selftests/net/cmsg_sender.c > index c79e65581dc3..f25268504937 100644 > --- a/tools/testing/selftests/net/cmsg_sender.c > +++ b/tools/testing/selftests/net/cmsg_sender.c > @@ -333,16 +333,17 @@ static const char *cs_ts_info2str(unsigned int info) > return "unknown"; > } > > -static void > +static unsigned long > cs_read_cmsg(int fd, struct msghdr *msg, char *cbuf, size_t cbuf_sz) > { > struct sock_extended_err *see; > struct scm_timestamping *ts; > + unsigned int ts_seen = 0; nit: mixing unsigned long and unsigned int
On Thu, 09 May 2024 22:49:50 -0400 Willem de Bruijn wrote: > > struct sock_extended_err *see; > > struct scm_timestamping *ts; > > + unsigned int ts_seen = 0; > > nit: mixing unsigned long and unsigned int Fixed when applying, thanks!
Hello: This series was applied to netdev/net-next.git (main) by Jakub Kicinski <kuba@kernel.org>: On Thu, 9 May 2024 17:57:04 -0700 you wrote: > On slow machines the SND timestamp sometimes doesn't arrive before > we quit. The test only waits as long as the packet delay, so it's > easy for a race condition to happen. > > Double the wait but do a bit of polling, once the SND timestamp > arrives there's no point to wait any longer. > > [...] Here is the summary with links: - [net-next,1/2] selftests: net: fix timestamp not arriving in cmsg_time.sh https://git.kernel.org/netdev/net-next/c/2d3b8dfd82d7 - [net-next,2/2] selftests: net: increase the delay for relative cmsg_time.sh test https://git.kernel.org/netdev/net-next/c/b9d5f5711dd8 You are awesome, thank you!
diff --git a/tools/testing/selftests/net/cmsg_sender.c b/tools/testing/selftests/net/cmsg_sender.c index c79e65581dc3..f25268504937 100644 --- a/tools/testing/selftests/net/cmsg_sender.c +++ b/tools/testing/selftests/net/cmsg_sender.c @@ -333,16 +333,17 @@ static const char *cs_ts_info2str(unsigned int info) return "unknown"; } -static void +static unsigned long cs_read_cmsg(int fd, struct msghdr *msg, char *cbuf, size_t cbuf_sz) { struct sock_extended_err *see; struct scm_timestamping *ts; + unsigned int ts_seen = 0; struct cmsghdr *cmsg; int i, err; if (!opt.ts.ena) - return; + return 0; msg->msg_control = cbuf; msg->msg_controllen = cbuf_sz; @@ -396,8 +397,11 @@ cs_read_cmsg(int fd, struct msghdr *msg, char *cbuf, size_t cbuf_sz) printf(" %5s ts%d %lluus\n", cs_ts_info2str(see->ee_info), i, rel_time); + ts_seen |= 1 << see->ee_info; } } + + return ts_seen; } static void ca_set_sockopts(int fd) @@ -509,10 +513,16 @@ int main(int argc, char *argv[]) err = ERN_SUCCESS; if (opt.ts.ena) { - /* Make sure all timestamps have time to loop back */ - usleep(opt.txtime.delay); + unsigned long seen; + int i; - cs_read_cmsg(fd, &msg, cbuf, sizeof(cbuf)); + /* Make sure all timestamps have time to loop back */ + for (i = 0; i < 40; i++) { + seen = cs_read_cmsg(fd, &msg, cbuf, sizeof(cbuf)); + if (seen & (1 << SCM_TSTAMP_SND)) + break; + usleep(opt.txtime.delay / 20); + } } err_out:
On slow machines the SND timestamp sometimes doesn't arrive before we quit. The test only waits as long as the packet delay, so it's easy for a race condition to happen. Double the wait but do a bit of polling, once the SND timestamp arrives there's no point to wait any longer. This fixes the "TXTIME abs" failures on debug kernels, like: Case ICMPv4 - TXTIME abs returned '', expected 'OK' Signed-off-by: Jakub Kicinski <kuba@kernel.org> --- CC: shuah@kernel.org CC: linux-kselftest@vger.kernel.org --- tools/testing/selftests/net/cmsg_sender.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-)