NAME
ucas —
atomic memory operations on
user-space address
SYNOPSIS
#include <sys/systm.h>
int
ucas_ptr(
volatile
void *uptr,
void
*old,
void *new,
void *retp);
int
ucas_int(
volatile
int *uptr,
int old,
int new,
int *retp);
DESCRIPTION
These functions provide compare-and-swap (CAS) functionality on user-space
address.
Except that they can be safely used for the kernel to access user-space address,
they are semantically equivalents of
atomic_cas(3).
-
-
- uptr
- The pointer to the variable. This should be a user-space
pointer.
-
-
- old
- The value to compare with the variable.
-
-
- new
- The value to store to the variable.
-
-
- retp
- The pointer to the memory to store the old value of the
variable.
RETURN VALUES
On success, these functions return 0. In that case, the caller can consult the
value returned via
retp to check the result of the CAS
operation. Otherwise, these functions return an appropriate
errno(9) error code, typically
EFAULT
.
SEE ALSO
atomic_cas(3),
intro(9)
BUGS
Conceptually, the
retp argument of
ucas_ptr() would be of
void **
. The
current prototype is a compromise for usability.