SX_LOCK_SHARED
#define rw_read_held(lock) ((lock)->sx_lock != SX_LOCK_UNLOCKED && ((lock)->sx_lock & SX_LOCK_SHARED))
if ((x & SX_LOCK_SHARED) == 0) {
if (!(x & SX_LOCK_SHARED))
if (!(x & SX_LOCK_SHARED)) {
LOCKSTAT_READER, (state & SX_LOCK_SHARED) == 0,
(state & SX_LOCK_SHARED) == 0 ? 0 : SX_SHARERS(state));
LOCKSTAT_READER, (state & SX_LOCK_SHARED) == 0,
(state & SX_LOCK_SHARED) == 0 ? 0 : SX_SHARERS(state));
(!(sx->sx_lock & SX_LOCK_SHARED) && (slocked ||
if (!(sx->sx_lock & SX_LOCK_SHARED)) {
} else if (sx->sx_lock & SX_LOCK_SHARED)
if (sx->sx_lock & SX_LOCK_SHARED)
return ((x & SX_LOCK_SHARED) != 0 ? (SX_SHARERS(x) != 0) :
if (!(x & SX_LOCK_SHARED))
if (x == (SX_LOCK_SHARED | SX_LOCK_WRITE_SPINNER)) {
if ((x & SX_LOCK_SHARED) == 0) {
if (!(x & SX_LOCK_SHARED))
if (!(x & SX_LOCK_SHARED)) {
if ((x & ~setx) == SX_LOCK_SHARED) {
LOCKSTAT_WRITER, (state & SX_LOCK_SHARED) == 0,
(state & SX_LOCK_SHARED) == 0 ? 0 : SX_SHARERS(state));
LOCKSTAT_WRITER, (state & SX_LOCK_SHARED) == 0,
(state & SX_LOCK_SHARED) == 0 ? 0 : SX_SHARERS(state));
MPASS(!(x & SX_LOCK_SHARED));
if ((x & (SX_LOCK_SHARED | SX_LOCK_EXCLUSIVE_WAITERS | SX_LOCK_WRITE_SPINNER))
== SX_LOCK_SHARED)
if (!fp && td->td_sx_slocks && (x & SX_LOCK_SHARED))
((sx)->sx_lock & SX_LOCK_SHARED ? NULL : \
(((sx)->sx_lock & ~(SX_LOCK_FLAGMASK & ~SX_LOCK_SHARED)) == \
(SX_LOCK_SHARED | SX_LOCK_SHARED_WAITERS | \
((x) << SX_SHARERS_SHIFT | SX_LOCK_SHARED)
((v & SX_LOCK_SHARED) ? NULL : (struct thread *)SX_OWNER(v))