selftests/bpf: Fix usleep() implementation

nanosleep syscall expects pointer to struct timespec, not nanoseconds
directly. Current implementation fulfills its purpose of invoking nanosleep
syscall, but doesn't really provide sleeping capabilities, which can cause
flakiness for tests relying on usleep() to wait for something.

Fixes: ec12a57b822c ("selftests/bpf: Guarantee that useep() calls nanosleep() syscall")
Signed-off-by: Andrii Nakryiko <[email protected]>
Signed-off-by: Alexei Starovoitov <[email protected]>
Link: https://lore.kernel.org/bpf/[email protected]
Signed-off-by: Alexei Starovoitov <[email protected]>
This commit is contained in:
Andrii Nakryiko authored and Alexei Starovoitov committed 2020-03-13 12:49:52 -07:00
1 parent 1afbcd9466
commit 4e1fd25d19
1 file changed
+10 -1
+10 -1
View File
@@ -35,7 +35,16 @@ struct prog_test_def {
*/
int usleep(useconds_t usec)
{
return syscall(__NR_nanosleep, usec * 1000UL);
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);
}
static bool should_run(struct test_selector *sel, int num, const char *name)