Reorder some statments. Fix typo and remove stale comments.
This commit is contained in:
parent
0fffba68bd
commit
8a156460bf
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=161742
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user