Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
MEMBARRIER(2)		      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  sup-
		     ported 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  ma-
		     chine-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	barri-
		     ers.

       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.3			October	6, 2024			 MEMBARRIER(2)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=membarrier&sektion=2&manpath=FreeBSD+14.3-RELEASE+and+Ports>

home | help