diff options
Diffstat (limited to 'usr/src/uts/common/os/pid.c')
| -rw-r--r-- | usr/src/uts/common/os/pid.c | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/usr/src/uts/common/os/pid.c b/usr/src/uts/common/os/pid.c index b555bb82b7..171a8253cc 100644 --- a/usr/src/uts/common/os/pid.c +++ b/usr/src/uts/common/os/pid.c @@ -21,10 +21,11 @@ /* * Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2019 Joyent, Inc. */ /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ -/* All Rights Reserved */ +/* All Rights Reserved */ #include <sys/types.h> #include <sys/param.h> @@ -112,6 +113,18 @@ pid_lookup(pid_t pid) return (pidp); } +struct pid * +pid_find(pid_t pid) +{ + struct pid *pidp; + + mutex_enter(&pidlinklock); + pidp = pid_lookup(pid); + mutex_exit(&pidlinklock); + + return (pidp); +} + void pid_setmin(void) { @@ -417,7 +430,6 @@ sprtrylock_proc(proc_t *p) return (1); p->p_proc_flag |= P_PR_LOCK; - THREAD_KPRI_REQUEST(); return (0); } @@ -502,7 +514,6 @@ sprlock_proc(proc_t *p) } p->p_proc_flag |= P_PR_LOCK; - THREAD_KPRI_REQUEST(); } void @@ -519,7 +530,19 @@ sprunlock(proc_t *p) cv_signal(&pr_pid_cv[p->p_slot]); p->p_proc_flag &= ~P_PR_LOCK; mutex_exit(&p->p_lock); - THREAD_KPRI_RELEASE(); +} + +/* + * Undo effects of sprlock but without dropping p->p_lock + */ +void +sprunprlock(proc_t *p) +{ + ASSERT(p->p_proc_flag & P_PR_LOCK); + ASSERT(MUTEX_HELD(&p->p_lock)); + + cv_signal(&pr_pid_cv[p->p_slot]); + p->p_proc_flag &= ~P_PR_LOCK; } void |
