summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/sys/proc.h
diff options
context:
space:
mode:
authorDan McDonald <danmcd@mnx.io>2022-05-13 17:20:24 -0400
committerGitHub <noreply@github.com>2022-05-13 17:20:24 -0400
commitbb7d6c9b47695f41cbacbcf6662baf3d0e152fdf (patch)
tree75f2d0cab5fb92f97f2ab2c3186a0b5d1579a33a /usr/src/uts/common/sys/proc.h
parent8ca5534c77e93c25d2c1f777499b12da0f7cc0cd (diff)
parent402559e299331588f209b3a9693e3bcd6a83d22c (diff)
downloadillumos-joyent-OS-8149.tar.gz
Merge branch 'master' into OS-8149OS-8149
Diffstat (limited to 'usr/src/uts/common/sys/proc.h')
-rw-r--r--usr/src/uts/common/sys/proc.h60
1 files changed, 44 insertions, 16 deletions
diff --git a/usr/src/uts/common/sys/proc.h b/usr/src/uts/common/sys/proc.h
index 7d2209132d..74c6d46781 100644
--- a/usr/src/uts/common/sys/proc.h
+++ b/usr/src/uts/common/sys/proc.h
@@ -21,7 +21,8 @@
/*
* Copyright (c) 1988, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright 2018 Joyent, Inc.
+ * Copyright 2021 Joyent, Inc.
+ * Copyright 2021 Oxide Computer Company
*/
/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
@@ -153,7 +154,7 @@ typedef struct proc {
char p_stat; /* status of process */
char p_wcode; /* current wait code */
ushort_t p_pidflag; /* flags protected only by pidlock */
- int p_wdata; /* current wait return value */
+ int p_wdata; /* current wait return value */
pid_t p_ppid; /* process id of parent */
struct proc *p_link; /* forward link */
struct proc *p_parent; /* ptr to parent process */
@@ -162,16 +163,16 @@ typedef struct proc {
struct proc *p_psibling; /* ptr to prev sibling proc on chain */
struct proc *p_sibling_ns; /* prt to siblings with new state */
struct proc *p_child_ns; /* prt to children with new state */
- struct proc *p_next; /* active chain link next */
- struct proc *p_prev; /* active chain link prev */
- struct proc *p_nextofkin; /* gets accounting info at exit */
- struct proc *p_orphan;
- struct proc *p_nextorph;
+ struct proc *p_next; /* active chain link next */
+ struct proc *p_prev; /* active chain link prev */
+ struct proc *p_nextofkin; /* gets accounting info at exit */
+ struct proc *p_orphan;
+ struct proc *p_nextorph;
struct proc *p_pglink; /* process group hash chain link next */
struct proc *p_ppglink; /* process group hash chain link prev */
struct sess *p_sessp; /* session information */
- struct pid *p_pidp; /* process ID info */
- struct pid *p_pgidp; /* process group ID info */
+ struct pid *p_pidp; /* process ID info */
+ struct pid *p_pgidp; /* process group ID info */
/*
* Fields protected by p_lock
*/
@@ -216,7 +217,7 @@ typedef struct proc {
* Per process lwp and kernel thread stuff
*/
id_t p_lwpid; /* most recently allocated lwpid */
- int p_lwpcnt; /* number of lwps in this process */
+ int p_lwpcnt; /* number of lwps in this process */
int p_lwprcnt; /* number of not stopped lwps */
int p_lwpdaemon; /* number of TP_DAEMON lwps */
int p_lwpwait; /* number of lwps in lwp_wait() */
@@ -355,6 +356,8 @@ typedef struct proc {
kcondvar_t p_poolcv; /* synchronization with pools */
uint_t p_poolcnt; /* # threads inside pool barrier */
uint_t p_poolflag; /* pool-related flags (see below) */
+ uint_t p_upanicflag; /* upanic-related flags (see below) */
+ void *p_upanic; /* optional upanic data */
uintptr_t p_portcnt; /* event ports counter */
struct zone *p_zone; /* zone in which process lives */
struct vnode *p_execdir; /* directory that p_exec came from */
@@ -524,6 +527,14 @@ extern struct pid pid0; /* p0's pid */
#define PBWAIT 0x0001 /* process should wait outside fork/exec/exit */
#define PEXITED 0x0002 /* process exited and about to become zombie */
+/*
+ * p_upanicflag codes
+ */
+#define P_UPF_PANICKED 0x0001
+#define P_UPF_HAVEMSG 0x0002
+#define P_UPF_TRUNCMSG 0x0004
+#define P_UPF_INVALMSG 0x0008
+
/* Macro to convert proc pointer to a user block pointer */
#define PTOU(p) (&(p)->p_user)
@@ -701,7 +712,7 @@ extern kthread_t *thread_create(
void (*proc)(),
void *arg,
size_t len,
- proc_t *pp,
+ proc_t *pp,
int state,
pri_t pri);
extern void thread_exit(void) __NORETURN;
@@ -709,10 +720,27 @@ extern void thread_free(kthread_t *);
extern void thread_rele(kthread_t *);
extern void thread_join(kt_did_t);
extern int reaper(void);
-extern void installctx(kthread_t *, void *, void (*)(), void (*)(),
- void (*)(), void (*)(), void (*)(), void (*)());
-extern int removectx(kthread_t *, void *, void (*)(), void (*)(),
- void (*)(), void (*)(), void (*)(), void (*)());
+
+#define CTXOP_TPL_REV 1
+
+struct ctxop_template {
+ uint32_t ct_rev;
+ uint32_t ct_pad;
+ void (*ct_save)(void *);
+ void (*ct_restore)(void *);
+ void (*ct_fork)(void *, void *);
+ void (*ct_lwp_create)(void *, void *);
+ void (*ct_exit)(void *);
+ void (*ct_free)(void *, int);
+};
+
+extern struct ctxop *ctxop_allocate(const struct ctxop_template *, void *);
+extern void ctxop_free(struct ctxop *);
+extern void ctxop_attach(kthread_t *, struct ctxop *);
+extern void ctxop_detach(kthread_t *, struct ctxop *);
+extern void ctxop_install(kthread_t *, const struct ctxop_template *, void *);
+extern int ctxop_remove(kthread_t *, const struct ctxop_template *, void *);
+
extern void savectx(kthread_t *);
extern void restorectx(kthread_t *);
extern void forkctx(kthread_t *, kthread_t *);
@@ -748,7 +776,7 @@ extern int tsd_agent_set(kthread_t *, uint_t, void *);
/* lwp function prototypes */
extern kthread_t *lwp_kernel_create(proc_t *, void (*)(), void *, int, pri_t);
-extern klwp_t *lwp_create(
+extern klwp_t *lwp_create(
void (*proc)(),
caddr_t arg,
size_t len,