Manual Page Result
0
Command: membarrier | Section: 2 | Source: FreeBSD | File: membarrier.2.gz
MEMBARRIER(2) FreeBSD System Calls Manual MEMBARRIER(2)
NAME
membarrier - memory barrier
LIBRARY
Standard C Library (libc, -lc)
SYNOPSIS
#include <sys/membarrier.h>
int
membarrier(int cmd, unsigned flags, int cpu_id);
DESCRIPTION
The membarrier system call provides a memory barrier, ensuring ordering
between memory accesses performed by different threads or processes
within the same address space.
The following values for cmd may be specified:
MEMBARRIER_CMD_QUERY
Query supported commands. A bitmask of commands supported
by the kernel is returned.
MEMBARRIER_CMD_GLOBAL
Issue a memory barrier for all threads from all processes.
MEMBARRIER_CMD_SHARED
This is an alias for MEMBARRIER_CMD_GLOBAL.
MEMBARRIER_CMD_GLOBAL_EXPEDITED
Execute a memory barrier on all running threads of all
processes registered with
MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED.
MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED
Register the process to receive
MEMBARRIER_CMD_GLOBAL_EXPEDITED memory barriers.
MEMBARRIER_CMD_PRIVATE_EXPEDITED
Execute a memory barrier on each running thread belonging
to the same process as the thread calling membarrier.
MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED
Register the process to receive
MEMBARRIER_CMD_PRIVATE_EXPEDITED memory barriers.
MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE
In addition to the guarantees provided by
MEMBARRIER_CMD_PRIVATE_EXPEDITED it also executes machine-
specific serialization instructions, which ensures that all
possible speculative and out-of-order activities on the
target CPU are fenced.
MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE
Register the process to receive
MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE memory barriers.
The following cmd values are defined for source compatibility but are not
yet supported:
MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ
MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ
The flags argument must be 0. The cpu_id argument is ignored.
RETURN VALUES
If the cmd is MEMBARRIER_CMD_QUERY a bitmask of supported commands is
returned. Otherwise, on success, membarrier returns 0. On error, -1 is
returned and errno is set to indicate the error.
ERRORS
membarrier may fail with the following errors:
[EINVAL] cmd does not specify a valid command.
[EINVAL] flags is not 0.
[EPERM] An attempt was made to use
MEMBARRIER_CMD_GLOBAL_EXPEDITED,
MEMBARRIER_CMD_PRIVATE_EXPEDITED, or
MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE by a
process that did not previously register use with the
corresponding MEMBARRIER_CMD_REGISTER_* cmd.
STANDARDS
The membarrier system call originated in Linux. This implementation aims
to be source-compatible with the Linux implementation. Certain cmd and
flags values are currently not supported by FreeBSD.
HISTORY
The membarrier function was introduced in FreeBSD 14.1.
FreeBSD 14.1-RELEASE-p8 October 6, 2024 FreeBSD 14.1-RELEASE-p8