FreeBSD manual
download PDF document: casuword.9.pdf
CASU(9) FreeBSD 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
architectures.
SEE ALSO
atomic(9), fetch(9), store(9)
FreeBSD 14.0-RELEASE-p11 April 19, 2019 FreeBSD 14.0-RELEASE-p11