* [PATCH 1/2] Add FreeBSD, DragonFly to syscall-compat.h [not found] <20200127182526.22881-1-alex_y_xu.ref@yahoo.ca> @ 2020-01-27 18:25 ` Alex Xu (Hello71) via lttng-dev 2020-01-27 18:25 ` [PATCH 2/2] Use _umtx_op for futex on FreeBSD Alex Xu (Hello71) via lttng-dev 0 siblings, 1 reply; 4+ messages in thread From: Alex Xu (Hello71) via lttng-dev @ 2020-01-27 18:25 UTC (permalink / raw) To: lttng-dev --- include/urcu/syscall-compat.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/include/urcu/syscall-compat.h b/include/urcu/syscall-compat.h index fa63a7b..23b266e 100644 --- a/include/urcu/syscall-compat.h +++ b/include/urcu/syscall-compat.h @@ -32,8 +32,9 @@ #elif defined(__linux__) || defined(__GLIBC__) #include <syscall.h> -#elif defined(__CYGWIN__) || defined(__APPLE__) -/* Don't include anything on Cygwin or MacOSX. */ +#elif defined(__CYGWIN__) || defined(__APPLE__) || \ + defined(__FreeBSD__) || defined(__DragonFly__) +/* Don't include anything on these platforms. */ #else #error "Add platform support to urcu/syscall-compat.h" -- 2.25.0 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] Use _umtx_op for futex on FreeBSD 2020-01-27 18:25 ` [PATCH 1/2] Add FreeBSD, DragonFly to syscall-compat.h Alex Xu (Hello71) via lttng-dev @ 2020-01-27 18:25 ` Alex Xu (Hello71) via lttng-dev 2020-01-27 18:48 ` Mathieu Desnoyers 0 siblings, 1 reply; 4+ messages in thread From: Alex Xu (Hello71) via lttng-dev @ 2020-01-27 18:25 UTC (permalink / raw) To: lttng-dev --- include/urcu/futex.h | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/include/urcu/futex.h b/include/urcu/futex.h index c206c6f..33dc3db 100644 --- a/include/urcu/futex.h +++ b/include/urcu/futex.h @@ -24,6 +24,7 @@ */ #include <urcu/config.h> +#include <errno.h> #include <stdint.h> #include <time.h> @@ -103,6 +104,28 @@ static inline int futex_async(int32_t *uaddr, int op, int32_t val, return ret; } +#elif defined(__FreeBSD__) + +#include <sys/umtx.h> + +static inline int futex_noasync(int32_t *uaddr, int op, int32_t val, + const struct timespec *timeout, int32_t *uaddr2, int32_t val3) +{ + return futex_async(uaddr, op, val, timeout, uaddr2, val3); +} + +static inline int futex_async(int32_t *uaddr, int op, int32_t val, + const struct timespec *timeout, int32_t *uaddr2, int32_t val3) +{ + switch (op) { + case FUTEX_WAIT: op = UMTX_OP_WAIT_UINT; break; + case FUTEX_WAKE: op = UMTX_OP_WAKE; break; + default: errno = EINVAL; return -1; + } + return _umtx_op(uaddr, op, val, + (void *)sizeof(*timeout), (void *)timeout); +} + #elif defined(__CYGWIN__) /* -- 2.25.0 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 2/2] Use _umtx_op for futex on FreeBSD 2020-01-27 18:25 ` [PATCH 2/2] Use _umtx_op for futex on FreeBSD Alex Xu (Hello71) via lttng-dev @ 2020-01-27 18:48 ` Mathieu Desnoyers 2020-01-27 19:43 ` Alex Xu via lttng-dev 0 siblings, 1 reply; 4+ messages in thread From: Mathieu Desnoyers @ 2020-01-27 18:48 UTC (permalink / raw) To: Alex Xu; +Cc: lttng-dev ----- On Jan 27, 2020, at 1:25 PM, lttng-dev lttng-dev@lists.lttng.org wrote: > --- > include/urcu/futex.h | 23 +++++++++++++++++++++++ > 1 file changed, 23 insertions(+) > > diff --git a/include/urcu/futex.h b/include/urcu/futex.h > index c206c6f..33dc3db 100644 > --- a/include/urcu/futex.h > +++ b/include/urcu/futex.h > @@ -24,6 +24,7 @@ > */ > > #include <urcu/config.h> > +#include <errno.h> > #include <stdint.h> > #include <time.h> > > @@ -103,6 +104,28 @@ static inline int futex_async(int32_t *uaddr, int op, > int32_t val, > return ret; > } > > +#elif defined(__FreeBSD__) > + > +#include <sys/umtx.h> > + > +static inline int futex_noasync(int32_t *uaddr, int op, int32_t val, > + const struct timespec *timeout, int32_t *uaddr2, int32_t val3) > +{ > + return futex_async(uaddr, op, val, timeout, uaddr2, val3); > +} Please move the futex_noasync definition after futex_async, considering that futex_noasync uses futex_async(). > + > +static inline int futex_async(int32_t *uaddr, int op, int32_t val, > + const struct timespec *timeout, int32_t *uaddr2, int32_t val3) > +{ Please declare a separate variable for umtx, e.g.: int umtx_op; > + switch (op) { > + case FUTEX_WAIT: op = UMTX_OP_WAIT_UINT; break; > + case FUTEX_WAKE: op = UMTX_OP_WAKE; break; > + default: errno = EINVAL; return -1; > + } Please follow the liburcu coding style, based on the Linux kernel coding style: switch (op) { case FUTEX_WAIT: umtx_op = UMTX_OP_WAIT_UINT; break; case FUTEX_WAKE: umtx_op = UMTX_OP_WAKE; break; default: errno = EINVAL; return -1; } Also, do you have a link to the API documentation of _umtx_op() ? I would like to double-check that all its return values are expected by the callers. > + return _umtx_op(uaddr, op, val, > + (void *)sizeof(*timeout), (void *)timeout); return _umtx_op(uaddr, umtx_op, val, (void *)sizeof(*timeout), (void *)timeout); Is it OK that uaddr is a int32_t ? Is it expected to be some other layout ? (e.g. struct umutex ?) I guess UMTX_OP_WAIT_UINT somehow specifies this, but it would be good to document it with a comment. Thanks, Mathieu > +} > + > #elif defined(__CYGWIN__) > > /* > -- > 2.25.0 > > _______________________________________________ > lttng-dev mailing list > lttng-dev@lists.lttng.org > https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev -- Mathieu Desnoyers EfficiOS Inc. http://www.efficios.com ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 2/2] Use _umtx_op for futex on FreeBSD 2020-01-27 18:48 ` Mathieu Desnoyers @ 2020-01-27 19:43 ` Alex Xu via lttng-dev 0 siblings, 0 replies; 4+ messages in thread From: Alex Xu via lttng-dev @ 2020-01-27 19:43 UTC (permalink / raw) To: lttng-dev Quoting Mathieu Desnoyers (2020-01-27 18:48:24) > Please move the futex_noasync definition after futex_async, considering that > futex_noasync uses futex_async(). Oops. Fixed that when testing but didn't copy it back to my local copy. > Also, do you have a link to the API documentation of _umtx_op() ? > I would like to double-check that all its return values are > expected by the callers. https://www.freebsd.org/cgi/man.cgi?query=_umtx_op I took a look at the man page, the only "interesting" one is EINTR, but that's the same as Linux. https://gitlab.freedesktop.org/mesa/mesa/blob/master/src/util/futex.h doesn't adjust the errno, but it does fiddle with the timeout. I will add that in the next version. ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2020-01-27 19:43 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <20200127182526.22881-1-alex_y_xu.ref@yahoo.ca> 2020-01-27 18:25 ` [PATCH 1/2] Add FreeBSD, DragonFly to syscall-compat.h Alex Xu (Hello71) via lttng-dev 2020-01-27 18:25 ` [PATCH 2/2] Use _umtx_op for futex on FreeBSD Alex Xu (Hello71) via lttng-dev 2020-01-27 18:48 ` Mathieu Desnoyers 2020-01-27 19:43 ` Alex Xu via lttng-dev
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).