#include <sys/cdefs.h>
#include <sys/param.h>
#include <sys/kernel.h>
#include <sys/lock.h>
#include <sys/mutex.h>
#include <sys/smp.h>
#include <sys/systm.h>
#include <machine/atomic.h>
#include <machine/param.h>
#include <vm/vm.h>
#include <vm/pmap.h>
Go to the source code of this file.
|
| ATOMIC64_EMU_BIN (add, void,(*p= *p+v), return) |
|
| ATOMIC64_EMU_BIN (clear, void, *p &=~v, return) |
|
| ATOMIC64_EMU_BIN (fetchadd, uint64_t,(*p= *p+v, v= *p - v), return(v)) |
|
| ATOMIC64_EMU_UN (load, uint64_t,(tmp= *p), return(tmp)) |
|
| ATOMIC64_EMU_BIN (set, void, *p|=v, return) |
|
| ATOMIC64_EMU_BIN (subtract, void,(*p= *p - v), return) |
|
| ATOMIC64_EMU_BIN (store, void, *p=v, return) |
|
| ATOMIC64_EMU_BIN (swap, uint64_t, tmp= *p; *p=v;v=tmp, return(v)) |
|
int | atomic_cmpset_64 (volatile uint64_t *p, uint64_t old, uint64_t new) |
|
int | atomic_fcmpset_64 (volatile uint64_t *p, uint64_t *old, uint64_t new) |
|
◆ ATOMIC64_EMU_BIN
#define ATOMIC64_EMU_BIN |
( |
|
op, |
|
|
|
rt, |
|
|
|
block, |
|
|
|
ret |
|
) |
| |
Value: rt \
atomic_##op##_64(volatile uint64_t *p, uint64_t v) { \
uint64_t tmp __unused; \
LOCK_A64(); \
block; \
UNLOCK_A64(); \
ret; } struct hack
Definition at line 90 of file subr_atomic64.c.
◆ ATOMIC64_EMU_UN
#define ATOMIC64_EMU_UN |
( |
|
op, |
|
|
|
rt, |
|
|
|
block, |
|
|
|
ret |
|
) |
| |
Value: rt \
atomic_##op##_64(volatile uint64_t *p) { \
uint64_t tmp __unused; \
LOCK_A64(); \
block; \
UNLOCK_A64(); \
ret; } struct hack
Definition at line 81 of file subr_atomic64.c.
◆ LOCK_A64
#define LOCK_A64 |
( |
| ) |
{ register_t s = intr_disable() |
◆ UNLOCK_A64
#define UNLOCK_A64 |
( |
| ) |
intr_restore(s); } |
◆ anonymous enum
Enumerator |
---|
ATOMIC64_ADD | |
ATOMIC64_CLEAR | |
ATOMIC64_CMPSET | |
ATOMIC64_FCMPSET | |
ATOMIC64_FETCHADD | |
ATOMIC64_LOAD | |
ATOMIC64_SET | |
ATOMIC64_SUBTRACT | |
ATOMIC64_STORE | |
ATOMIC64_SWAP | |
Definition at line 44 of file subr_atomic64.c.
◆ ATOMIC64_EMU_BIN() [1/7]
ATOMIC64_EMU_BIN |
( |
add |
, |
|
|
void |
, |
|
|
*= *+ |
v, |
|
|
return |
|
|
) |
| |
◆ ATOMIC64_EMU_BIN() [2/7]
ATOMIC64_EMU_BIN |
( |
clear |
, |
|
|
void |
, |
|
|
*p & |
= ~v , |
|
|
return |
|
|
) |
| |
◆ ATOMIC64_EMU_BIN() [3/7]
ATOMIC64_EMU_BIN |
( |
fetchadd |
, |
|
|
uint64_t |
, |
|
|
*= *+,= *- |
v, |
|
|
return(v) |
|
|
) |
| |
◆ ATOMIC64_EMU_BIN() [4/7]
ATOMIC64_EMU_BIN |
( |
set |
, |
|
|
void |
, |
|
|
*p| |
= v , |
|
|
return |
|
|
) |
| |
◆ ATOMIC64_EMU_BIN() [5/7]
ATOMIC64_EMU_BIN |
( |
store |
, |
|
|
void |
, |
|
|
* |
p = v , |
|
|
return |
|
|
) |
| |
◆ ATOMIC64_EMU_BIN() [6/7]
ATOMIC64_EMU_BIN |
( |
subtract |
, |
|
|
void |
, |
|
|
*= *- |
v, |
|
|
return |
|
|
) |
| |
◆ ATOMIC64_EMU_BIN() [7/7]
ATOMIC64_EMU_BIN |
( |
swap |
, |
|
|
uint64_t |
, |
|
|
tmp |
= *p; *p=v;v=tmp , |
|
|
return(v) |
|
|
) |
| |
◆ ATOMIC64_EMU_UN()
ATOMIC64_EMU_UN |
( |
load |
, |
|
|
uint64_t |
, |
|
|
(tmp=*p) |
, |
|
|
return(tmp) |
|
|
) |
| |
◆ atomic_cmpset_64()
int atomic_cmpset_64 |
( |
volatile uint64_t * |
p, |
|
|
uint64_t |
old, |
|
|
uint64_t |
new |
|
) |
| |
◆ atomic_fcmpset_64()
int atomic_fcmpset_64 |
( |
volatile uint64_t * |
p, |
|
|
uint64_t * |
old, |
|
|
uint64_t |
new |
|
) |
| |