let umtxq_busy() only spin on mp machine. make function name

do_rwlock_unlock to be consistent with others.
This commit is contained in:
David Xu 2008-04-03 11:49:20 +00:00
parent 61f3d0ccf7
commit 44253336b6
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=177880

View File

@ -324,6 +324,8 @@ umtxq_busy(struct umtx_key *key)
uc = umtxq_getchain(key); uc = umtxq_getchain(key);
mtx_assert(&uc->uc_lock, MA_OWNED); mtx_assert(&uc->uc_lock, MA_OWNED);
if (uc->uc_busy) { if (uc->uc_busy) {
#ifdef SMP
if (smp_cpus > 1) {
int count = BUSY_SPINS; int count = BUSY_SPINS;
if (count > 0) { if (count > 0) {
umtxq_unlock(key); umtxq_unlock(key);
@ -331,7 +333,9 @@ umtxq_busy(struct umtx_key *key)
cpu_spinwait(); cpu_spinwait();
umtxq_lock(key); umtxq_lock(key);
} }
while (uc->uc_busy != 0) { }
#endif
while (uc->uc_busy) {
uc->uc_waiters++; uc->uc_waiters++;
msleep(uc, &uc->uc_lock, 0, "umtxqb", 0); msleep(uc, &uc->uc_lock, 0, "umtxqb", 0);
uc->uc_waiters--; uc->uc_waiters--;
@ -2604,7 +2608,7 @@ do_rw_wrlock2(struct thread *td, void *obj, struct timespec *timeout)
} }
static int static int
do_rwlock_unlock(struct thread *td, struct urwlock *rwlock) do_rw_unlock(struct thread *td, struct urwlock *rwlock)
{ {
struct umtx_q *uq; struct umtx_q *uq;
uint32_t flags; uint32_t flags;
@ -2896,7 +2900,7 @@ __umtx_op_rw_wrlock(struct thread *td, struct _umtx_op_args *uap)
static int static int
__umtx_op_rw_unlock(struct thread *td, struct _umtx_op_args *uap) __umtx_op_rw_unlock(struct thread *td, struct _umtx_op_args *uap)
{ {
return do_rwlock_unlock(td, uap->obj); return do_rw_unlock(td, uap->obj);
} }
typedef int (*_umtx_op_func)(struct thread *td, struct _umtx_op_args *uap); typedef int (*_umtx_op_func)(struct thread *td, struct _umtx_op_args *uap);