MTX_EXCLUSIVE
if ((lock & MTX_EXCLUSIVE) && mtx->mtx_owner == curthread) {
if ((lock & (MTX_EXCLUSIVE | MTX_EXWANTED)) == 0) {
nlock = MTX_EXCLUSIVE | 1;
} else if ((lock & MTX_EXCLUSIVE) &&
nlock = MTX_EXCLUSIVE | 1;
} else if ((lock & MTX_EXCLUSIVE) &&
if ((lock & MTX_EXCLUSIVE) == 0) {
nlock = MTX_EXCLUSIVE | 1;
} else if ((lock & MTX_EXCLUSIVE) &&
if ((lock & MTX_EXCLUSIVE) == 0) {
if ((lock & MTX_EXCLUSIVE) == 0) {
nlock = lock & ~MTX_EXCLUSIVE;
nlock = lock | MTX_EXCLUSIVE;
} else if (lock & MTX_EXCLUSIVE) {
case MTX_EXCLUSIVE | 1:
case MTX_EXCLUSIVE | MTX_EXWANTED | 1:
case MTX_EXCLUSIVE | MTX_EXWANTED | MTX_SHWANTED | 1:
case MTX_EXCLUSIVE | MTX_SHWANTED | 1:
nlock = olock | MTX_LINKSPIN | MTX_EXCLUSIVE; /* upgrade if necc */
nlock &= ~MTX_EXCLUSIVE;
nlock = MTX_EXCLUSIVE | 1;
if (atomic_cmpset_int(&mtx->mtx_lock, 0, MTX_EXCLUSIVE | 1) == 0)
if (atomic_cmpset_int(&mtx->mtx_lock, 0, MTX_EXCLUSIVE | 1) == 0) {
if (atomic_cmpset_int(&mtx->mtx_lock, 0, MTX_EXCLUSIVE | 1) == 0)
if (atomic_cmpset_int(&mtx->mtx_lock, 0, MTX_EXCLUSIVE | 1) == 0)
KKASSERT((mtx->mtx_lock & MTX_EXCLUSIVE) == 0 &&
if (atomic_cmpset_int(&mtx->mtx_lock, 0, MTX_EXCLUSIVE | 1) == 0)
if (atomic_cmpset_int(&mtx->mtx_lock, 0, MTX_EXCLUSIVE | 1) == 0)
if (atomic_cmpset_int(&mtx->mtx_lock, 0, MTX_EXCLUSIVE | 1) == 0)
KKASSERT((mtx->mtx_lock & MTX_EXCLUSIVE) &&
if (atomic_cmpset_int(&mtx->mtx_lock, MTX_EXCLUSIVE | 1, 1) == 0)
if (atomic_cmpset_int(&mtx->mtx_lock, 1, MTX_EXCLUSIVE | 1)) {
KKASSERT((mtx->mtx_lock & MTX_EXCLUSIVE) == 0 ||
if (lock == (MTX_EXCLUSIVE | 1)) {
KKASSERT((mtx->mtx_lock & MTX_EXCLUSIVE) == 0 ||
if (lock == (MTX_EXCLUSIVE | 1)) {
return((mtx->mtx_lock & MTX_EXCLUSIVE) != 0);
return((mtx->mtx_lock & MTX_EXCLUSIVE) != 0);
return((mtx->mtx_lock & MTX_EXCLUSIVE) && mtx->mtx_owner == curthread);
return((mtx->mtx_lock & MTX_EXCLUSIVE) == 0 ||
state = (mtx->mtx_lock & MTX_EXCLUSIVE);
if (state & MTX_EXCLUSIVE)
KKASSERT(chain->lock.mtx_lock & MTX_EXCLUSIVE);
KKASSERT(chain->lock.mtx_lock & MTX_EXCLUSIVE);
mtx->mtx_lock |= MTX_EXCLUSIVE;
mtx->mtx_lock |= MTX_EXCLUSIVE;
mtx->mtx_lock |= MTX_EXCLUSIVE;
mtx->mtx_lock |= MTX_EXCLUSIVE;
mtx->mtx_lock |= MTX_EXCLUSIVE;
mtx->mtx_lock &= ~MTX_EXCLUSIVE;