Bug 281691 - Linuxulator: missing membarrier(2)
Summary: Linuxulator: missing membarrier(2)
Status: Closed FIXED
Alias: None
Product: Base System
Classification: Unclassified
Component: kern (show other bugs)
Version: 15.0-CURRENT
Hardware: Any Any
: --- Affects Only Me
Assignee: Pouria Mousavizadeh Tehrani
URL:
Keywords:
Depends on:
Blocks: 247219
  Show dependency treegraph
 
Reported: 2024-09-24 17:38 UTC by Edward Tomasz Napierala
Modified: 2026-04-22 19:22 UTC (History)
3 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Edward Tomasz Napierala freebsd_committer freebsd_triage 2024-09-24 17:38:20 UTC
FreeBSD supports membarrier(2) for native binaries, but not for Linux ones.
Comment 1 Ed Maste freebsd_committer freebsd_triage 2024-10-04 01:08:56 UTC
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.
Comment 2 Ed Maste freebsd_committer freebsd_triage 2024-10-06 18:11:17 UTC
See https://reviews.freebsd.org/D46967 for a review to add (the beginnings of) a membarrier(2) man page
Comment 3 Ricardo Branco 2026-04-18 10:27:14 UTC
Fix: https://github.com/freebsd/freebsd-src/pull/2147
Comment 4 Ricardo Branco 2026-04-18 19:49:44 UTC
The above Github PR needs to be applied on top of https://reviews.freebsd.org/D56509
Comment 5 commit-hook freebsd_committer freebsd_triage 2026-04-22 19:22:17 UTC
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(-)
Comment 6 commit-hook freebsd_committer freebsd_triage 2026-04-22 19:22:18 UTC
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(-)