Provided by: freebsd-manpages_12.2-2_all bug

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)