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

FreeBSD Manual Pages

  
 
  

home | help
CASU(9)			   Kernel Developer's Manual		       CASU(9)

NAME
       casueword,  casueword32,	 casuword,  casuword32	--  fetch, compare and
       store data from user-space

SYNOPSIS
       #include	<sys/types.h>
       #include	<sys/systm.h>

       int
       casueword(volatile u_long *base,	   u_long oldval,     u_long *oldvalp,
	   u_long newval);

       int
       casueword32(volatile uint32_t *base,		      uint32_t oldval,
	   uint32_t *oldvalp, uint32_t newval);

       u_long
       casuword(volatile u_long	*base, u_long oldval, u_long newval);

       uint32_t
       casuword32(volatile uint32_t *base, uint32_t oldval, uint32_t newval);

DESCRIPTION
       The casueword functions are designed to perform atomic compare-and-swap
       operation on the	value in the usermode memory of	the current process.

       The casueword routines reads the	value from user	 memory	 with  address
       base, and compare the value read	with oldval.  If the values are	equal,
       newval  is  written  to	the  *base.   In  case	of  casueword32()  and
       casueword(), old	 value	is  stored  into  the  (kernel-mode)  variable
       pointed by *oldvalp.  The userspace value must be naturally aligned.

       The callers of casuword() and casuword32() functions cannot distinguish
       between -1 read from userspace and function failure.

RETURN VALUES
       The casuword() and casuword32() functions return	the data fetched or -1
       on  failure.   The  casueword() and casueword32() functions return 0 on
       success,	-1 on failure to access	memory,	and 1 when comparison or store
       failed.	The store can fail on load-linked/store-conditional  architec-
       tures.

SEE ALSO
       atomic(9), fetch(9), store(9)

FreeBSD	13.2			April 19, 2019			       CASU(9)

NAME | SYNOPSIS | DESCRIPTION | RETURN VALUES | SEE ALSO

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

home | help