ipf_lk
if (!cv_wait_sig(&ifs->ifs_ipfauthwait, &ifs->ifs_ipf_authmx.ipf_lk))
ASSERT(RW_WRITE_HELD(&ifs->ifs_ipf_global.ipf_lk));
ASSERT(RW_WRITE_HELD(&ifs->ifs_ipf_global.ipf_lk));
if (!cv_wait_sig(&ifs->ifs_iplwait, &ifs->ifs_ipl_mutex.ipf_lk)) {
ASSERT(rw_read_locked(&ifs->ifs_ipf_global.ipf_lk) == 0);
ASSERT(rw_read_locked(&ifs->ifs_ip_poolrw.ipf_lk) == 0);
ASSERT(rw_read_locked(&ifs->ifs_ip_poolrw.ipf_lk) == 0);
ASSERT(rw_read_locked(&ifs->ifs_ip_poolrw.ipf_lk) == 0);
ASSERT(rw_read_locked(&ifs->ifs_ip_poolrw.ipf_lk) == 0);
ASSERT(rw_read_locked(&ifs->ifs_ipf_state.ipf_lk) == 0);
ASSERT(rw_write_held(&ifs->ifs_ipf_global.ipf_lk) == 0 ||
rw_write_held(&ifs->ifs_ipf_state.ipf_lk) == 0);
# define MUTEX_INIT(x,y) spin_lock_init(&(x)->ipf_lk)
# define MUTEX_ENTER(x) spin_lock(&(x)->ipf_lk)
# define MUTEX_EXIT(x) spin_unlock(&(x)->ipf_lk)
# define MUTEX_NUKE(x) bzero(&(x)->ipf_lk, sizeof((x)->ipf_lk))
# define RWLOCK_INIT(x,y) rwlock_init(&(x)->ipf_lk)
# define READ_ENTER(x) lock_read((x)->ipf_lk)
# define WRITE_ENTER(x) lock_write((x)->ipf_lk)
# define MUTEX_DOWNGRADE(x) lock_write_to_read((x)->ipf_lk)
# define RWLOCK_INIT(x, y) lock_alloc(&(x)->ipf_lk, \
lock_init((x)->ipf_lk, TRUE)
# define RWLOCK_EXIT(x) lock_done((x)->ipf_lk)
# define RW_DESTROY(x) lock_free(&(x)->ipf_lk)
# define MUTEX_ENTER(x) simple_lock((x)->ipf_lk)
# define MUTEX_INIT(x, y) lock_alloc(&(x)->ipf_lk, \
simple_lock_init((x)->ipf_lk)
# define MUTEX_DESTROY(x) lock_free(&(x)->ipf_lk)
# define MUTEX_EXIT(x) simple_unlock((x)->ipf_lk)
# define MUTEX_NUKE(x) bzero(&(x)->ipf_lk, sizeof((x)->ipf_lk))
# define MUTEX_ENTER(x) mutex_enter(&(x)->ipf_lk)
# define READ_ENTER(x) rw_enter(&(x)->ipf_lk, RW_READER)
# define WRITE_ENTER(x) rw_enter(&(x)->ipf_lk, RW_WRITER)
# define MUTEX_DOWNGRADE(x) rw_downgrade(&(x)->ipf_lk)
# define RWLOCK_INIT(x, y) rw_init(&(x)->ipf_lk, (y), \
# define RWLOCK_EXIT(x) rw_exit(&(x)->ipf_lk)
# define RW_DESTROY(x) rw_destroy(&(x)->ipf_lk)
# define MUTEX_INIT(x, y) mutex_init(&(x)->ipf_lk, (y), \
# define MUTEX_DESTROY(x) mutex_destroy(&(x)->ipf_lk)
# define MUTEX_EXIT(x) mutex_exit(&(x)->ipf_lk)
# define ATOMIC_INCL(x) lock_and_incr_int64(&ipf_rw.ipf_lk, &(x), 1)
# define ATOMIC_DECL(x) lock_and_incr_int64(&ipf_rw.ipf_lk, &(x), -1)
# define ATOMIC_INCL(x) lock_and_incr_int32(&ipf_rw.ipf_lk, &(x), 1)
# define ATOMIC_DECL(x) lock_and_incr_int32(&ipf_rw.ipf_lk, &(x), -1)
# define ATOMIC_INC64(x) lock_and_incr_int64(&ipf_rw.ipf_lk, &(x), 1)
# define ATOMIC_INC32(x) lock_and_incr_int32(&ipf_rw.ipf_lk, &(x), 1)
# define ATOMIC_INC16(x) lock_and_incr_int16(&ipf_rw.ipf_lk, &(x), 1)
# define ATOMIC_DEC64(x) lock_and_incr_int64(&ipf_rw.ipf_lk, &(x), -1)
# define ATOMIC_DEC32(x) lock_and_incr_int32(&ipf_rw.ipf_lk, &(x), -1)
# define ATOMIC_DEC16(x) lock_and_incr_int16(&ipf_rw.ipf_lk, &(x), -1)
# define MUTEX_INIT(x, y) initlock(&(x)->ipf_lk, 0, 0, (y))
# define MUTEX_ENTER(x) spinlock(&(x)->ipf_lk)
# define MUTEX_EXIT(x) spinunlock(&(x)->ipf_lk);
# define READ_ENTER(x) lock_read(&(x)->ipf_lk)
# define WRITE_ENTER(x) lock_write(&(x)->ipf_lk)
# define RWLOCK_INIT(x, y) rwlock_init4(&(x)->ipf_lk, 0, RWLCK_CANSLEEP, 0, y)
# define RWLOCK_INIT(x, y) lock_init3(&(x)->ipf_lk, 0, 1, 0, 0, y)
# define RWLOCK_EXIT(x) lock_done(&(x)->ipf_lk)
# define RWLOCK_INIT(x, y) initlock(&(x)->ipf_lk, 0, 0, y)
# define MUTEX_INIT(x, y) mutex_init(&(x)->ipf_lk, \
# define MUTEX_ENTER(x) mutex_lock(&(x)->ipf_lk, 0)
# define MUTEX_EXIT(x) mutex_unlock(&(x)->ipf_lk)
# define MUTEX_DESTROY(x) mutex_destroy(&(x)->ipf_lk)
# define MUTEX_DOWNGRADE(x) mrdemote(&(x)->ipf_lk)
# define RWLOCK_INIT(x, y) mrinit(&(x)->ipf_lk, y)
# define RW_DESTROY(x) mrfree(&(x)->ipf_lk)
# define READ_ENTER(x) RW_RDLOCK(&(x)->ipf_lk)
# define WRITE_ENTER(x) RW_WRLOCK(&(x)->ipf_lk)
# define RWLOCK_EXIT(x) RW_UNLOCK(&(x)->ipf_lk)
# define READ_ENTER(x) MUTEX_ENTER(&(x)->ipf_lk)
# define WRITE_ENTER(x) MUTEX_ENTER(&(x)->ipf_lk)
# define RWLOCK_EXIT(x) MUTEX_EXIT(&(x)->ipf_lk)
# define MUTEX_EXIT(x) UNLOCK((x)->ipf_lk.l, (x)->ipf_lk.pl);
# define MUTEX_INIT(x,y) (x)->ipf_lk.l = LOCK_ALLOC((uchar_t)-1, IPF_LOCK_PL, (lkinfo_t *)-1, KM_NOSLEEP)
# define MUTEX_DESTROY(x) LOCK_DEALLOC((x)->ipf_lk.l)
# define MUTEX_ENTER(x) (x)->ipf_lk.pl = LOCK((x)->ipf_lk.l, \
# define READ_ENTER(x) lock_read(&(x)->ipf_lk)
# define WRITE_ENTER(x) lock_write(&(x)->ipf_lk)
# define MUTEX_DOWNGRADE(x) lock_write_to_read(&(x)->ipf_lk)
# define RWLOCK_INIT(x, y) lock_init(&(x)->ipf_lk, TRUE)
# define RWLOCK_EXIT(x) lock_done(&(x)->ipf_lk)
# define RW_DESTROY(x) lock_terminate(&(x)->ipf_lk)
# define MUTEX_ENTER(x) simple_lock(&(x)->ipf_lk)
# define MUTEX_INIT(x, y) simple_lock_init(&(x)->ipf_lk)
# define MUTEX_DESTROY(x) simple_lock_terminate(&(x)->ipf_lk)
# define MUTEX_EXIT(x) simple_unlock(&(x)->ipf_lk)
# define MUTEX_ENTER(x) mtx_lock(&(x)->ipf_lk)
# define MUTEX_EXIT(x) mtx_unlock(&(x)->ipf_lk)
# define MUTEX_INIT(x,y) mtx_init(&(x)->ipf_lk, (y), NULL,\
# define MUTEX_DESTROY(x) mtx_destroy(&(x)->ipf_lk)
# define READ_ENTER(x) mtx_lock(&(x)->ipf_lk)
# define WRITE_ENTER(x) mtx_lock(&(x)->ipf_lk)
# define RWLOCK_EXIT(x) mtx_unlock(&(x)->ipf_lk)
# define RWLOCK_INIT(x,y) mtx_init(&(x)->ipf_lk, (y), NULL,\
# define RW_DESTROY(x) mtx_destroy(&(x)->ipf_lk)
# define READ_ENTER(x) sx_slock(&(x)->ipf_lk)
# define WRITE_ENTER(x) sx_xlock(&(x)->ipf_lk)
# define MUTEX_DOWNGRADE(x) sx_downgrade(&(x)->ipf_lk)
# define RWLOCK_INIT(x, y) sx_init(&(x)->ipf_lk, (y))
# define RW_DESTROY(x) sx_destroy(&(x)->ipf_lk)
if ((x)->ipf_lk.sx_cnt < 0) \
sx_xunlock(&(x)->ipf_lk); \
sx_sunlock(&(x)->ipf_lk); \
# define ATOMIC_INC(x) { mtx_lock(&ipf_rw.ipf_lk); (x)++; \
mtx_unlock(&ipf_rw.ipf_lk); }
# define ATOMIC_DEC(x) { mtx_lock(&ipf_rw.ipf_lk); (x)--; \
mtx_unlock(&ipf_rw.ipf_lk); }