Reorder some statments. Fix typo and remove stale comments.

This commit is contained in:
David Xu 2006-08-30 23:59:45 +00:00
parent 0fffba68bd
commit 8a156460bf
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=161742

View File

@ -126,7 +126,7 @@ struct umtx_q {
/* Thread contending with us */ /* Thread contending with us */
TAILQ_HEAD(,umtx_pi) uq_pi_contested; TAILQ_HEAD(,umtx_pi) uq_pi_contested;
/* Inherited prioroty from PP mutex */ /* Inherited priority from PP mutex */
u_char uq_inherited_pri; u_char uq_inherited_pri;
}; };
@ -1728,11 +1728,6 @@ _do_lock_pp(struct thread *td, struct umutex *m, uint32_t flags, int timo,
if (error != 0) if (error != 0)
break; break;
/*
* We set the contested bit, sleep. Otherwise the lock changed
* and we need to retry or we lost a race to the thread
* unlocking the umtx.
*/
umtxq_lock(&uq->uq_key); umtxq_lock(&uq->uq_key);
umtxq_insert(uq); umtxq_insert(uq);
umtxq_unbusy(&uq->uq_key); umtxq_unbusy(&uq->uq_key);
@ -1986,20 +1981,21 @@ do_lock_umutex(struct thread *td, struct umutex *m, struct timespec *ts,
int try) int try)
{ {
uint32_t flags; uint32_t flags;
int ret;
flags = fuword32(&m->m_flags); flags = fuword32(&m->m_flags);
if (flags == -1) if (flags == -1)
return (EFAULT); return (EFAULT);
if ((flags & UMUTEX_PRIO_INHERIT) != 0) switch(flags & (UMUTEX_PRIO_INHERIT | UMUTEX_PRIO_PROTECT)) {
ret = do_lock_pi(td, m, flags, ts, try); case 0:
else if ((flags & UMUTEX_PRIO_PROTECT) != 0) return (do_lock_normal(td, m, flags, ts, try));
ret = do_lock_pp(td, m, flags, ts, try); case UMUTEX_PRIO_INHERIT:
else return (do_lock_pi(td, m, flags, ts, try));
ret = do_lock_normal(td, m, flags, ts, try); case UMUTEX_PRIO_PROTECT:
return (do_lock_pp(td, m, flags, ts, try));
}
return (ret); return (EINVAL);
} }
/* /*
@ -2067,12 +2063,6 @@ _umtx_op(struct thread *td, struct _umtx_op_args *uap)
case UMTX_OP_MUTEX_UNLOCK: case UMTX_OP_MUTEX_UNLOCK:
error = do_unlock_umutex(td, uap->obj); error = do_unlock_umutex(td, uap->obj);
break; break;
case UMTX_OP_MUTEX_TRYLOCK:
error = do_lock_umutex(td, uap->obj, NULL, 1);
break;
case UMTX_OP_SET_CEILING:
error = do_set_ceiling(td, uap->obj, uap->val, uap->uaddr1);
break;
case UMTX_OP_LOCK: case UMTX_OP_LOCK:
/* Allow a null timespec (wait forever). */ /* Allow a null timespec (wait forever). */
if (uap->uaddr2 == NULL) if (uap->uaddr2 == NULL)
@ -2113,6 +2103,12 @@ _umtx_op(struct thread *td, struct _umtx_op_args *uap)
case UMTX_OP_WAKE: case UMTX_OP_WAKE:
error = kern_umtx_wake(td, uap->obj, uap->val); error = kern_umtx_wake(td, uap->obj, uap->val);
break; break;
case UMTX_OP_MUTEX_TRYLOCK:
error = do_lock_umutex(td, uap->obj, NULL, 1);
break;
case UMTX_OP_SET_CEILING:
error = do_set_ceiling(td, uap->obj, uap->val, uap->uaddr1);
break;
default: default:
error = EINVAL; error = EINVAL;
break; break;