Skip to content

Commit

Permalink
tools/nolibc: Implement poll() based on ppoll()
Browse files Browse the repository at this point in the history
Some architectures like arm64 do not implement poll() and have to use
ppoll() instead. This commit therefore makes poll() use ppoll() when
available. This is a port of nolibc's upstream commit 800f75c13ede to
the Linux kernel.

Fixes: 66b6f75 ("rcutorture: Import a copy of nolibc")
Tested-by: Valentin Schneider <[email protected]>
Tested-by: Mark Rutland <[email protected]> [arm64]
Signed-off-by: Willy Tarreau <[email protected]>
Signed-off-by: Paul E. McKenney <[email protected]>
  • Loading branch information
wtarreau authored and paulmckrcu committed Jan 21, 2021
1 parent be60ca4 commit 5b1c827
Showing 1 changed file with 10 additions and 0 deletions.
10 changes: 10 additions & 0 deletions tools/include/nolibc/nolibc.h
Original file line number Diff line number Diff line change
Expand Up @@ -1652,7 +1652,17 @@ int sys_pivot_root(const char *new, const char *old)
static __attribute__((unused))
int sys_poll(struct pollfd *fds, int nfds, int timeout)
{
#if defined(__NR_ppoll)
struct timespec t;

if (timeout >= 0) {
t.tv_sec = timeout / 1000;
t.tv_nsec = (timeout % 1000) * 1000000;
}
return my_syscall4(__NR_ppoll, fds, nfds, (timeout >= 0) ? &t : NULL, NULL);
#else
return my_syscall3(__NR_poll, fds, nfds, timeout);
#endif
}

static __attribute__((unused))
Expand Down

0 comments on commit 5b1c827

Please sign in to comment.