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

  
 
  

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 be-
     tween  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  tar-
		   get CPU are fenced.

     MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE
		   Register	    the 	process        to	 receive
		   MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE memory barriers.

     MEMBARRIER_CMD_GET_REGISTRATIONS
		   Return the bitmask of the currently registered receive 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 re-
     turned.  For the MEMBARRIER_CMD_GET_REGISTRATIONS command, a bitmask of the
     registrations for the current process is returned.  Otherwise, on	success,
     membarrier  returns  0.  On error, -1 is returned and errno is set to indi-
     cate 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 corre-
			sponding 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 15.1			 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+15.1-RELEASE+and+Ports.quarterly>

home | help