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:
parent
dbe923bff9
commit
c91997b6c4
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue