Provided by: freebsd-manpages_12.2-2_all 
      
    
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 architectures.
SEE ALSO
       atomic(9), fetch(9), store(9)
Debian                                           April 19, 2019                                          CASU(9)