diff options
Diffstat (limited to 'usr/src/uts/common/os/rwlock.c')
| -rw-r--r-- | usr/src/uts/common/os/rwlock.c | 19 |
1 files changed, 4 insertions, 15 deletions
diff --git a/usr/src/uts/common/os/rwlock.c b/usr/src/uts/common/os/rwlock.c index f851686ce0..cf5e635f8a 100644 --- a/usr/src/uts/common/os/rwlock.c +++ b/usr/src/uts/common/os/rwlock.c @@ -24,7 +24,7 @@ */ /* - * Copyright (c) 2013, Joyent, Inc. All rights reserved. + * Copyright 2019 Joyent, Inc. */ #include <sys/param.h> @@ -269,9 +269,6 @@ void (*rw_lock_delay)(uint_t) = NULL; /* * Full-service implementation of rw_enter() to handle all the hard cases. * Called from the assembly version if anything complicated is going on. - * The only semantic difference between calling rw_enter() and calling - * rw_enter_sleep() directly is that we assume the caller has already done - * a THREAD_KPRI_REQUEST() in the RW_READER cases. */ void rw_enter_sleep(rwlock_impl_t *lp, krw_t rw) @@ -342,15 +339,13 @@ rw_enter_sleep(rwlock_impl_t *lp, krw_t rw) } /* - * We really are going to block. Bump the stats, and drop - * kpri if we're a reader. + * We really are going to block, so bump the stats. */ ASSERT(lp->rw_wwwh & lock_wait); ASSERT(lp->rw_wwwh & RW_LOCKED); sleep_time = -gethrtime(); if (rw != RW_WRITER) { - THREAD_KPRI_RELEASE(); CPU_STATS_ADDQ(CPU, sys, rw_rdfails, 1); (void) turnstile_block(ts, TS_READER_Q, lp, &rw_sobj_ops, NULL, NULL); @@ -366,8 +361,8 @@ rw_enter_sleep(rwlock_impl_t *lp, krw_t rw) old >> RW_HOLD_COUNT_SHIFT); /* - * We wake up holding the lock (and having kpri if we're - * a reader) via direct handoff from the previous owner. + * We wake up holding the lock via direct handoff from the + * previous owner. */ break; } @@ -394,7 +389,6 @@ rw_readers_to_wake(turnstile_t *ts) while (next_reader != NULL) { if (DISP_PRIO(next_reader) < wpri) break; - next_reader->t_kpri_req++; next_reader = next_reader->t_link; count++; } @@ -523,7 +517,6 @@ rw_exit_wakeup(rwlock_impl_t *lp) } if (lock_value == RW_READ_LOCK) { - THREAD_KPRI_RELEASE(); LOCKSTAT_RECORD(LS_RW_EXIT_RELEASE, lp, RW_READER); } else { LOCKSTAT_RECORD(LS_RW_EXIT_RELEASE, lp, RW_WRITER); @@ -539,11 +532,9 @@ rw_tryenter(krwlock_t *rwlp, krw_t rw) if (rw != RW_WRITER) { uint_t backoff = 0; int loop_count = 0; - THREAD_KPRI_REQUEST(); for (;;) { if ((old = lp->rw_wwwh) & (rw == RW_READER ? RW_WRITE_CLAIMED : RW_WRITE_LOCKED)) { - THREAD_KPRI_RELEASE(); return (0); } if (casip(&lp->rw_wwwh, old, old + RW_READ_LOCK) == old) @@ -573,7 +564,6 @@ rw_downgrade(krwlock_t *rwlp) { rwlock_impl_t *lp = (rwlock_impl_t *)rwlp; - THREAD_KPRI_REQUEST(); membar_exit(); if ((lp->rw_wwwh & RW_OWNER) != (uintptr_t)curthread) { @@ -612,7 +602,6 @@ rw_tryupgrade(krwlock_t *rwlp) } while (casip(&lp->rw_wwwh, old, new) != old); membar_enter(); - THREAD_KPRI_RELEASE(); LOCKSTAT_RECORD0(LS_RW_TRYUPGRADE_UPGRADE, lp); ASSERT(rw_locked(lp, RW_WRITER)); return (1); |
