aboutsummaryrefslogtreecommitdiffstats
path: root/tools/testing/selftests/bpf/test_progs.c
diff options
context:
space:
mode:
authorAndrii Nakryiko <andriin@fb.com>2020-03-13 17:27:43 -0700
committerDaniel Borkmann <daniel@iogearbox.net>2020-03-17 19:29:12 +0100
commit41078907eef0dd508d0999996d10683ae114c21a (patch)
tree4e8e634122a0f7092025f2942ff1c27f0118a4a6 /tools/testing/selftests/bpf/test_progs.c
parentselftest/bpf: Fix compilation warning in sockmap_parse_prog.c (diff)
downloadlinux-dev-41078907eef0dd508d0999996d10683ae114c21a.tar.xz
linux-dev-41078907eef0dd508d0999996d10683ae114c21a.zip
selftests/bpf: Fix nanosleep for real this time
Amazingly, some libc implementations don't call __NR_nanosleep syscall from their nanosleep() APIs. Hammer it down with explicit syscall() call and never get back to it again. Also simplify code for timespec initialization. I verified that nanosleep is called w/ printk and in exactly same Linux image that is used in Travis CI. So it should both sleep and call correct syscall. v1->v2: - math is too hard, fix usec -> nsec convertion (Martin); - test_vmlinux has explicit nanosleep() call, convert that one as well. Fixes: 4e1fd25d19e8 ("selftests/bpf: Fix usleep() implementation") Signed-off-by: Andrii Nakryiko <andriin@fb.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Acked-by: Martin KaFai Lau <kafai@fb.com> Link: https://lore.kernel.org/bpf/20200314002743.3782677-1-andriin@fb.com
Diffstat (limited to 'tools/testing/selftests/bpf/test_progs.c')
-rw-r--r--tools/testing/selftests/bpf/test_progs.c16
1 files changed, 6 insertions, 10 deletions
diff --git a/tools/testing/selftests/bpf/test_progs.c b/tools/testing/selftests/bpf/test_progs.c
index f85a06512541..dc12fd0de1c2 100644
--- a/tools/testing/selftests/bpf/test_progs.c
+++ b/tools/testing/selftests/bpf/test_progs.c
@@ -35,16 +35,12 @@ struct prog_test_def {
*/
int usleep(useconds_t usec)
{
- struct timespec ts;
-
- if (usec > 999999) {
- ts.tv_sec = usec / 1000000;
- ts.tv_nsec = usec % 1000000;
- } else {
- ts.tv_sec = 0;
- ts.tv_nsec = usec;
- }
- return nanosleep(&ts, NULL);
+ struct timespec ts = {
+ .tv_sec = usec / 1000000,
+ .tv_nsec = (usec % 1000000) * 1000,
+ };
+
+ return syscall(__NR_nanosleep, &ts, NULL);
}
static bool should_run(struct test_selector *sel, int num, const char *name)