util/futex: use futex syscall on OpenBSD

Make use of the futex syscall added in OpenBSD 6.2.

Signed-off-by: Jonathan Gray <jsg@jsg.id.au>
Signed-off-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
Jonathan Gray 2019-12-01 02:19:38 +11:00 committed by Marek Olšák
parent dbe923bff9
commit c91997b6c4
1 changed files with 18 additions and 0 deletions

View File

@ -85,6 +85,24 @@ static inline int futex_wait(uint32_t *addr, int32_t value, struct timespec *tim
return _umtx_op(addr, UMTX_OP_WAIT_UINT, (uint32_t)value, uaddr, uaddr2) == -1 ? errno : 0;
}
#elif defined(__OpenBSD__)
#include <sys/time.h>
#include <sys/futex.h>
static inline int futex_wake(uint32_t *addr, int count)
{
return futex(addr, FUTEX_WAKE, count, NULL, NULL);
}
static inline int futex_wait(uint32_t *addr, int32_t value, const struct timespec *timeout)
{
struct timespec tsrel, tsnow;
clock_gettime(CLOCK_MONOTONIC, &tsnow);
timespecsub(timeout, &tsrel, &tsrel);
return futex(addr, FUTEX_WAIT, value, &tsrel, NULL);
}
#endif
#endif /* UTIL_FUTEX_H */