summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/os/pid.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/common/os/pid.c')
-rw-r--r--usr/src/uts/common/os/pid.c31
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