FreeBSD supports membarrier(2) for native binaries, but not for Linux ones.
It appears we're compatible on cmd values, but: /* * RSEQ constants are defined for source compatibility but are * not yes supported, MEMBARRIER_CMD_QUERY does not return * them in the mask. */ MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ = 0x00000080, MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ = 0x00000100, Also Linux 6.3 added new command MEMBARRIER_CMD_GET_REGISTRATIONS.
See https://reviews.freebsd.org/D46967 for a review to add (the beginnings of) a membarrier(2) man page
Fix: https://github.com/freebsd/freebsd-src/pull/2147
The above Github PR needs to be applied on top of https://reviews.freebsd.org/D56509
A commit in branch main references this bug: URL: https://cgit.FreeBSD.org/src/commit/?id=1594fe0b1029f246b3a14c8b21637091968362aa commit 1594fe0b1029f246b3a14c8b21637091968362aa Author: Ricardo Branco <rbranco@suse.de> AuthorDate: 2026-04-18 10:11:44 +0000 Commit: Pouria Mousavizadeh Tehrani <pouria@FreeBSD.org> CommitDate: 2026-04-22 19:15:30 +0000 linux: Add support for membarrier(2) FreeBSD has a native membarrier(2) syscall which is mostly compatible with Linux. This is a thin wrapper around kern_membarrier() that translates all available commands and flags. Also update the syscalls.master prototypes to match the Linux 5.10+ three-argument form. Pre-5.10 binaries using the two-argument form continue to work: cpu_id is only consulted for RSEQ commands, which FreeBSD does not support and which kern_membarrier() rejects with EINVAL, matching Linux semantics. Signed-off-by: Ricardo Branco <rbranco@suse.de> PR: 281691 Reviewed by: kib, pouria Pull-Request: https://github.com/freebsd/freebsd-src/pull/2147 sys/amd64/linux/syscalls.master | 3 +- sys/amd64/linux32/syscalls.master | 3 +- sys/arm64/linux/syscalls.master | 3 +- sys/compat/linux/linux_dummy.c | 2 -- sys/compat/linux/linux_misc.c | 64 +++++++++++++++++++++++++++++++++++++++ sys/compat/linux/linux_misc.h | 16 ++++++++++ sys/i386/linux/syscalls.master | 3 +- 7 files changed, 88 insertions(+), 6 deletions(-)
A commit in branch main references this bug: URL: https://cgit.FreeBSD.org/src/commit/?id=81f60a964a50b9c22361bb811be9ca089561e80c commit 81f60a964a50b9c22361bb811be9ca089561e80c Author: Ricardo Branco <rbranco@suse.de> AuthorDate: 2026-04-18 10:18:12 +0000 Commit: Pouria Mousavizadeh Tehrani <pouria@FreeBSD.org> CommitDate: 2026-04-22 19:16:44 +0000 linux: make sysent for membarrier Regenerate linux syscall prototypes for membarrier(2). Signed-off-by: Ricardo Branco <rbranco@suse.de> PR: 281691 Reviewed by: kib, pouria Pull-Request: https://github.com/freebsd/freebsd-src/pull/2147 sys/amd64/linux/linux_proto.h | 3 ++- sys/amd64/linux/linux_systrace_args.c | 8 ++++++-- sys/amd64/linux32/linux32_proto.h | 3 ++- sys/amd64/linux32/linux32_systrace_args.c | 8 ++++++-- sys/arm64/linux/linux_proto.h | 3 ++- sys/arm64/linux/linux_systrace_args.c | 8 ++++++-- sys/i386/linux/linux_proto.h | 3 ++- sys/i386/linux/linux_systrace_args.c | 8 ++++++-- 8 files changed, 32 insertions(+), 12 deletions(-)