cvs commit: src/sys/kern kern_exec.c sysv_ipc.c src/sys/sys proc.h
Simon 'corecode' Schubert
corecode at fs.ei.tum.de
Sun Oct 9 07:41:38 PDT 2005
Matthew Dillon wrote:
:Uhm, so each thread will carry the same information but proc won't?
:
:Alright, I can back it out, it just seemed a bit weird not to have the
:command in struct proc.
:
:And worrying about these 17 bytes seemed not reasonable either.
All processes have threads (all LWP's have thread's too), but not all
threads have processes.
The LWP separation implies that the command should be in the process
structure so all the LWP's can share it, but that would still leaves us
with a duplicate comm[] array in the thread structure which otherwise
must be there for pure kernel threads and I really dislike that because
it adds confusion.
*_comm[] is not the 'official' command name anyway. It's just the
short form used by ps, accounting, and so forth. Lets keep it in the
thread structure.
See this patch: I think it adds too much churd. Mind you, we can't
access p_comm anymore, we always have to find "some" lwp in proc to get
the comm, and this seems backwards. I can commit this to remove p_comm,
but I am still feeling that we shouldn't do this.
cheers
simon
--
Serve - BSD +++ RENT this banner advert +++ ASCII Ribbon /"\
Work - Mac +++ space for low $$$ NOW!1 +++ Campaign \ /
Party Enjoy Relax | http://dragonflybsd.org Against HTML \
Dude 2c 2 the max ! http://golden-apple.biz Mail + News / \
Index: ddb/db_ps.c
===================================================================
RCS file: /home/dcvs/src/sys/ddb/db_ps.c,v
retrieving revision 1.13
diff -u -r1.13 db_ps.c
--- ddb/db_ps.c 25 Apr 2005 22:26:22 -0000 1.13
+++ ddb/db_ps.c 9 Oct 2005 11:50:38 -0000
@@ -87,7 +87,7 @@
} else {
db_printf(" ");
}
- db_printf(" %s\n", p->p_comm ? p->p_comm : "");
+ db_printf(" %s\n", p->p_thread->td_comm);
db_dump_td_tokens(p->p_thread);
p = p->p_list.le_next;
@@ -161,7 +161,7 @@
#endif
td->td_sp,
td->td_wmesg ? td->td_wmesg : "-",
- td->td_proc ? td->td_proc->p_comm : td->td_comm);
+ td->td_comm);
if (td->td_preempted)
db_printf(" PREEMPTING THREAD %p\n", td->td_preempted);
db_dump_td_tokens(td);
@@ -189,7 +189,7 @@
#endif
td->td_sp,
td->td_wmesg ? td->td_wmesg : "-",
- td->td_proc ? td->td_proc->p_comm : td->td_comm);
+ td->td_comm);
db_dump_td_tokens(td);
}
}
Index: dev/raid/vinum/vinumioctl.c
===================================================================
RCS file: /home/dcvs/src/sys/dev/raid/vinum/vinumioctl.c,v
retrieving revision 1.5
diff -u -r1.5 vinumioctl.c
--- dev/raid/vinum/vinumioctl.c 15 Nov 2003 21:05:42 -0000 1.5
+++ dev/raid/vinum/vinumioctl.c 9 Oct 2005 11:06:06 -0000
@@ -314,7 +314,7 @@
log(LOG_WARNING,
"vinumioctl: invalid ioctl from process %d (%s): %lx\n",
curproc->p_pid,
- curproc->p_comm,
+ curthread->td_comm,
cmd);
return EINVAL;
Index: emulation/linux/i386/linprocfs/linprocfs_misc.c
===================================================================
RCS file: /home/dcvs/src/sys/emulation/linux/i386/linprocfs/linprocfs_misc.c,v
retrieving revision 1.11
diff -u -r1.11 linprocfs_misc.c
--- emulation/linux/i386/linprocfs/linprocfs_misc.c 27 Apr 2005 14:31:19 -0000 1.11
+++ emulation/linux/i386/linprocfs/linprocfs_misc.c 9 Oct 2005 11:09:39 -0000
@@ -338,11 +338,14 @@
struct uio *uio;
{
char *ps, psbuf[1024];
+ struct lwp *lp;
+
+ lp = LIST_FIRST(&p->p_lwps); /* XXX */
ps = psbuf;
ps += sprintf(ps, "%d", p->p_pid);
#define PS_ADD(name, fmt, arg) ps += sprintf(ps, " " fmt, arg)
- PS_ADD("comm", "(%s)", p->p_comm);
+ PS_ADD("comm", "(%s)", lp->lwp_thread->td_comm);
PS_ADD("statr", "%c", '0'); /* XXX */
PS_ADD("ppid", "%d", p->p_pptr ? p->p_pptr->p_pid : 0);
PS_ADD("pgrp", "%d", p->p_pgid);
@@ -406,8 +409,11 @@
{
char *ps, psbuf[1024];
char *state;
+ struct lwp *lp;
int i;
+ lp = LIST_FIRST(&p->p_lwps); /* XXX */
+
ps = psbuf;
if (p->p_stat > sizeof state_str / sizeof *state_str)
@@ -416,7 +422,7 @@
state = state_str[(int)p->p_stat];
#define PS_ADD ps += sprintf
- PS_ADD(ps, "Name:\t%s\n", p->p_comm); /* XXX escape */
+ PS_ADD(ps, "Name:\t%s\n", lp->lwp_thread->td_comm); /* XXX escape */
PS_ADD(ps, "State:\t%s\n", state);
/*
Index: emulation/posix4/p1003_1b.c
===================================================================
RCS file: /home/dcvs/src/sys/emulation/posix4/p1003_1b.c,v
retrieving revision 1.7
diff -u -r1.7 p1003_1b.c
--- emulation/posix4/p1003_1b.c 27 Nov 2003 19:11:17 -0000 1.7
+++ emulation/posix4/p1003_1b.c 9 Oct 2005 11:10:14 -0000
@@ -121,7 +121,7 @@
{
struct proc *p = curproc;
log(LOG_ERR, "cmd %s pid %d tried to use non-present %s\n",
- p->p_comm, p->p_pid, s);
+ curthread->td_comm, p->p_pid, s);
/* a " return nosys(p, uap); " here causes a core dump.
*/
Index: i386/i386/trap.c
===================================================================
RCS file: /home/dcvs/src/sys/i386/i386/trap.c,v
retrieving revision 1.61
diff -u -r1.61 trap.c
--- i386/i386/trap.c 8 Oct 2005 12:24:26 -0000 1.61
+++ i386/i386/trap.c 9 Oct 2005 11:10:48 -0000
@@ -403,7 +403,7 @@
if (ISPL(frame.tf_cs)==SEL_UPL || (frame.tf_eflags & PSL_VM)) {
printf(
"pid %ld (%s): trap %d with interrupts disabled\n",
- (long)curproc->p_pid, curproc->p_comm, type);
+ (long)curproc->p_pid, curthread->td_comm, type);
} else if (type != T_BPTFLT && type != T_TRCTRAP) {
/*
* XXX not quite right, since this may be for a
@@ -1100,8 +1100,7 @@
printf("current process = ");
if (curproc) {
printf("%lu (%s)\n",
- (u_long)curproc->p_pid, curproc->p_comm ?
- curproc->p_comm : "");
+ (u_long)curproc->p_pid, curthread->td_comm);
} else {
printf("Idle\n");
}
Index: i386/i386/vm_machdep.c
===================================================================
RCS file: /home/dcvs/src/sys/i386/i386/vm_machdep.c,v
retrieving revision 1.36
diff -u -r1.36 vm_machdep.c
--- i386/i386/vm_machdep.c 16 Jun 2005 21:12:44 -0000 1.36
+++ i386/i386/vm_machdep.c 9 Oct 2005 10:59:01 -0000
@@ -223,12 +223,18 @@
void (*func) (void *);
void *arg;
{
+ struct lwp *lp;
+
+ KKASSERT(p->p_nthreads == 1);
+
+ lp = LIST_FIRST(&p->p_lwps);
+
/*
* Note that the trap frame follows the args, so the function
* is really called like this: func(arg, frame);
*/
- p->p_thread->td_pcb->pcb_esi = (int) func; /* function */
- p->p_thread->td_pcb->pcb_ebx = (int) arg; /* first arg */
+ lp->lwp_thread->td_pcb->pcb_esi = (int) func; /* function */
+ lp->lwp_thread->td_pcb->pcb_ebx = (int) arg; /* first arg */
}
void
Index: i386/isa/npx.c
===================================================================
RCS file: /home/dcvs/src/sys/i386/isa/npx.c,v
retrieving revision 1.24
diff -u -r1.24 npx.c
--- i386/isa/npx.c 16 Jun 2005 21:12:47 -0000 1.24
+++ i386/isa/npx.c 9 Oct 2005 11:11:11 -0000
@@ -566,7 +566,7 @@
if (masked_exceptions & 0x0d)
log(LOG_ERR,
"pid %d (%s) exited with masked floating point exceptions 0x%02x\n",
- p->p_pid, p->p_comm, masked_exceptions);
+ p->p_pid, curthread->td_comm, masked_exceptions);
}
#endif
}
Index: kern/imgact_elf.c
===================================================================
RCS file: /home/dcvs/src/sys/kern/imgact_elf.c,v
retrieving revision 1.32
diff -u -r1.32 imgact_elf.c
--- kern/imgact_elf.c 2 Sep 2005 07:16:58 -0000 1.32
+++ kern/imgact_elf.c 9 Oct 2005 11:16:49 -0000
@@ -1211,7 +1211,9 @@
prstatus_t *status;
prfpregset_t *fpregset;
prpsinfo_t *psinfo;
+ struct lwp *lp = &p->p_lwp; /* XXX lwp */
int nbytes;
+
tempdata = malloc(sizeof(*tempdata), M_TEMP, M_ZERO | M_WAITOK);
status = &tempdata->status;
fpregset = &tempdata->fpregset;
@@ -1231,10 +1233,11 @@
psinfo->pr_version = PRPSINFO_VERSION;
psinfo->pr_psinfosz = sizeof(prpsinfo_t);
- strncpy(psinfo->pr_fname, p->p_comm, sizeof(psinfo->pr_fname) - 1);
+ strncpy(psinfo->pr_fname, lp->lwp_thread->td_comm,
+ sizeof(psinfo->pr_fname) - 1);
/* XXX - We don't fill in the command line arguments properly yet. */
- strncpy(psinfo->pr_psargs, p->p_comm, PRARGSZ);
+ strncpy(psinfo->pr_psargs, lp->lwp_thread->td_comm, PRARGSZ);
/* Fill in the header. */
error = elf_puthdr(p, target, status, fpregset, psinfo, numsegs);
Index: kern/init_main.c
===================================================================
RCS file: /home/dcvs/src/sys/kern/init_main.c,v
retrieving revision 1.46
diff -u -r1.46 init_main.c
--- kern/init_main.c 8 Oct 2005 19:46:50 -0000 1.46
+++ kern/init_main.c 9 Oct 2005 11:53:06 -0000
@@ -318,7 +318,8 @@
p->p_peers = 0;
p->p_leader = p;
- bcopy("swapper", p->p_comm, sizeof ("swapper"));
+ bcopy("swapper", LIST_FIRST(&p->p_lwps)->lwp_thread->td_comm,
+ sizeof ("swapper"));
/* Create credentials. */
p->p_ucred = crget();
Index: kern/kern_acct.c
===================================================================
RCS file: /home/dcvs/src/sys/kern/kern_acct.c,v
retrieving revision 1.19
diff -u -r1.19 kern_acct.c
--- kern/kern_acct.c 8 Oct 2005 19:46:50 -0000 1.19
+++ kern/kern_acct.c 9 Oct 2005 11:18:20 -0000
@@ -209,7 +209,7 @@
*/
/* (1) The name of the command that ran */
- bcopy(p->p_comm, acct.ac_comm, sizeof acct.ac_comm);
+ bcopy(td->td_comm, acct.ac_comm, sizeof acct.ac_comm);
/* (2) The amount of user and system time that was used */
calcru(p, &ut, &st, NULL);
Index: kern/kern_checkpoint.c
===================================================================
RCS file: /home/dcvs/src/sys/kern/kern_checkpoint.c,v
retrieving revision 1.5
diff -u -r1.5 kern_checkpoint.c
--- kern/kern_checkpoint.c 9 Aug 2005 02:49:49 -0000 1.5
+++ kern/kern_checkpoint.c 9 Oct 2005 11:25:49 -0000
@@ -287,6 +287,7 @@
elf_loadnotes(struct proc *p, prpsinfo_t *psinfo, prstatus_t *status,
prfpregset_t *fpregset)
{
+ struct lwp *lp = &p->p_lwp;
int error;
/* validate status and psinfo */
@@ -304,7 +305,8 @@
if ((error = set_regs(p, &status->pr_reg)) != 0)
goto done;
error = set_fpregs(p, fpregset);
- strlcpy(p->p_comm, psinfo->pr_fname, sizeof(p->p_comm));
+ strlcpy(lp->lwp_thread->td_comm, psinfo->pr_fname,
+ sizeof(lp->lwp_thread->td_comm));
/* XXX psinfo->pr_psargs not yet implemented */
done:
TRACE_EXIT;
@@ -731,6 +733,7 @@
int
checkpoint_signal_handler(struct proc *p)
{
+ struct lwp *lp = &p->p_lwp;
char *buf;
struct file *fp;
struct nlookupdata nd;
@@ -747,14 +750,15 @@
return (EPERM);
}
- buf = ckpt_expand_name(p->p_comm, p->p_ucred->cr_uid, p->p_pid);
+ buf = ckpt_expand_name(lp->lwp_thread->td_comm, p->p_ucred->cr_uid,
+ p->p_pid);
if (buf == NULL) {
chptinuse--;
return (ENOMEM);
}
log(LOG_INFO, "pid %d (%s), uid %d: checkpointing to %s\n",
- p->p_pid, p->p_comm,
+ p->p_pid, lp->lwp_thread->td_comm,
(p->p_ucred ? p->p_ucred->cr_uid : -1),
buf);
Index: kern/kern_exec.c
===================================================================
RCS file: /home/dcvs/src/sys/kern/kern_exec.c,v
retrieving revision 1.34
diff -u -r1.34 kern_exec.c
--- kern/kern_exec.c 8 Oct 2005 14:31:26 -0000 1.34
+++ kern/kern_exec.c 9 Oct 2005 11:26:39 -0000
@@ -336,9 +336,8 @@
/* name this process - nameiexec(p, ndp) */
len = min(nd->nl_ncp->nc_nlen, MAXCOMLEN);
- bcopy(nd->nl_ncp->nc_name, p->p_comm, len);
- p->p_comm[len] = 0;
- bcopy(p->p_comm, p->p_lwp.lwp_thread->td_comm, MAXCOMLEN+1);
+ bcopy(nd->nl_ncp->nc_name, td->td_comm, len);
+ td->td_comm[len] = 0;
/*
* mark as execed, wakeup the process that vforked (if any) and tell
Index: kern/kern_fork.c
===================================================================
RCS file: /home/dcvs/src/sys/kern/kern_fork.c,v
retrieving revision 1.40
diff -u -r1.40 kern_fork.c
--- kern/kern_fork.c 8 Oct 2005 19:46:50 -0000 1.40
+++ kern/kern_fork.c 9 Oct 2005 13:54:18 -0000
@@ -297,6 +297,7 @@
LIST_INSERT_HEAD(&newproc->p_lwps, &newproc->p_lwp, lwp_list);
newproc->p_lwp.lwp_proc = newproc;
newproc->p_lwp.lwp_tid = 0;
+ newproc->p_nthreads = 1;
/*
* Find an unused process ID. We remember a range of unused IDs
@@ -638,6 +639,12 @@
void
start_forked_proc(struct proc *p1, struct proc *p2)
{
+ struct lwp *lp2;
+
+ KKASSERT(p2 != NULL && p2->p_nthreads == 1);
+
+ lp2 = LIST_FIRST(&p2->p_lwps);
+
/*
* Move from SIDL to RUN queue, and activate the process's thread.
* Activation of the thread effectively makes the process "a"
Index: kern/kern_ktrace.c
===================================================================
RCS file: /home/dcvs/src/sys/kern/kern_ktrace.c,v
retrieving revision 1.19
diff -u -r1.19 kern_ktrace.c
--- kern/kern_ktrace.c 28 Jul 2005 18:10:23 -0000 1.19
+++ kern/kern_ktrace.c 9 Oct 2005 11:27:04 -0000
@@ -73,7 +73,7 @@
kth->ktr_type = type;
microtime(&kth->ktr_time);
kth->ktr_pid = p->p_pid;
- bcopy(p->p_comm, kth->ktr_comm, MAXCOMLEN + 1);
+ bcopy(curthread->td_comm, kth->ktr_comm, MAXCOMLEN + 1);
return (kth);
}
Index: kern/kern_lockf.c
===================================================================
RCS file: /home/dcvs/src/sys/kern/kern_lockf.c,v
retrieving revision 1.24
diff -u -r1.24 kern_lockf.c
--- kern/kern_lockf.c 14 Apr 2005 08:14:31 -0000 1.24
+++ kern/kern_lockf.c 9 Oct 2005 11:29:07 -0000
@@ -799,12 +799,13 @@
static void
_lf_printf(const char *ctl, ...)
{
- struct proc *p;
+ struct lwp *lp;
__va_list va;
if (lf_print_ranges) {
- if ((p = curproc) != NULL)
- printf("pid %d (%s): ", p->p_pid, p->p_comm);
+ if ((lp = curthread->td_lwp) != NULL)
+ printf("pid %d tid %d (%s): ", lp->lwp_proc->p_pid,
+ lp->lwp_tid, lp->lwp_thrad->td_comm);
}
__va_start(va, ctl);
vprintf(ctl, va);
Index: kern/kern_shutdown.c
===================================================================
RCS file: /home/dcvs/src/sys/kern/kern_shutdown.c,v
retrieving revision 1.22
diff -u -r1.22 kern_shutdown.c
--- kern/kern_shutdown.c 19 Jul 2005 19:53:53 -0000 1.22
+++ kern/kern_shutdown.c 9 Oct 2005 11:29:37 -0000
@@ -708,7 +708,7 @@
td = (struct thread *)arg;
if ((p = td->td_proc) != NULL) {
printf("Waiting (max %d seconds) for system process `%s' to stop...",
- kproc_shutdown_wait, p->p_comm);
+ kproc_shutdown_wait, td->td_comm);
} else {
printf("Waiting (max %d seconds) for system thread %s to stop...",
kproc_shutdown_wait, td->td_comm);
Index: kern/kern_sig.c
===================================================================
RCS file: /home/dcvs/src/sys/kern/kern_sig.c,v
retrieving revision 1.37
diff -u -r1.37 kern_sig.c
--- kern/kern_sig.c 6 Jun 2005 15:02:28 -0000 1.37
+++ kern/kern_sig.c 9 Oct 2005 11:33:43 -0000
@@ -1459,7 +1459,10 @@
void
killproc(struct proc *p, char *why)
{
- log(LOG_ERR, "pid %d (%s), uid %d, was killed: %s\n", p->p_pid, p->p_comm,
+ struct lwp *lp = LIST_FIRST(&p->p_lwps); /* XXX */
+
+ log(LOG_ERR, "pid %d (%s), uid %d, was killed: %s\n", p->p_pid,
+ lp->lwp_thread->td_comm,
p->p_ucred ? p->p_ucred->cr_uid : -1, why);
psignal(p, SIGKILL);
}
@@ -1475,6 +1478,8 @@
void
sigexit(struct proc *p, int sig)
{
+ struct lwp *lp = &p->p_lwp; /* XXX lwp */
+
p->p_acflag |= AXSIG;
if (sigprop(sig) & SA_CORE) {
p->p_sig = sig;
@@ -1489,7 +1494,7 @@
if (kern_logsigexit)
log(LOG_INFO,
"pid %d (%s), uid %d: exited on signal %d%s\n",
- p->p_pid, p->p_comm,
+ p->p_pid, lp->lwp_thread->td_comm,
p->p_ucred ? p->p_ucred->cr_uid : -1,
sig &~ WCOREFLAG,
sig & WCOREFLAG ? " (core dumped)" : "");
@@ -1591,6 +1596,7 @@
static int
coredump(struct proc *p)
{
+ struct lwp *lp = &p->p_lwp;
struct vnode *vp;
struct ucred *cred = p->p_ucred;
struct thread *td = p->p_thread;
@@ -1618,7 +1624,7 @@
if (limit == 0)
return EFBIG;
- name = expand_name(p->p_comm, p->p_ucred->cr_uid, p->p_pid);
+ name = expand_name(lp->lwp_thread->td_comm, p->p_ucred->cr_uid, p->p_pid);
if (name == NULL)
return (EINVAL);
error = nlookup_init(&nd, name, UIO_SYSSPACE, NLC_LOCKVP);
Index: kern/sysv_ipc.c
===================================================================
RCS file: /home/dcvs/src/sys/kern/sysv_ipc.c,v
retrieving revision 1.8
diff -u -r1.8 sysv_ipc.c
--- kern/sysv_ipc.c 8 Oct 2005 14:31:26 -0000 1.8
+++ kern/sysv_ipc.c 9 Oct 2005 11:34:59 -0000
@@ -86,10 +86,12 @@
sysv_nosys(char *s)
{
struct thread *td = curthread;
+ struct lwp *lp = td->td_lwp;
struct proc *p = td->td_proc;
- log(LOG_ERR, "cmd %s pid %d tried to use non-present %s\n",
- (p ? p->p_comm : td->td_comm),
+ log(LOG_ERR, "cmd %s pid %d tid %d tried to use non-present %s\n",
+ td->td_comm,
+ (lp ? lp->lwp_tid : -1),
(p ? p->p_pid : -1), s);
}
Index: kern/tty.c
===================================================================
RCS file: /home/dcvs/src/sys/kern/tty.c,v
retrieving revision 1.18
diff -u -r1.18 tty.c
--- kern/tty.c 27 Jun 2005 18:37:57 -0000 1.18
+++ kern/tty.c 9 Oct 2005 11:38:06 -0000
@@ -2379,6 +2379,7 @@
*/
char buf[64];
const char *str;
+ struct lwp *lp;
int isinmem;
long vmsz;
int pctcpu;
@@ -2404,7 +2405,7 @@
str = "iowait";
snprintf(buf, sizeof(buf), "cmd: %s %d [%s]",
- (pick->p_thread ? pick->p_comm : "?"),
+ (pick->p_thread ? pick->p_thread->td_comm : "?"),
pick->p_pid, str);
/*
Index: kern/vfs_aio.c
===================================================================
RCS file: /home/dcvs/src/sys/kern/vfs_aio.c,v
retrieving revision 1.18
diff -u -r1.18 vfs_aio.c
--- kern/vfs_aio.c 3 Aug 2005 16:36:33 -0000 1.18
+++ kern/vfs_aio.c 9 Oct 2005 11:39:04 -0000
@@ -618,13 +618,15 @@
struct aioproclist *aiop;
struct kaioinfo *ki;
struct proc *curcp, *mycp, *userp;
+ struct thread *mytd;
struct vmspace *myvm, *tmpvm;
struct ucred *cr;
/*
* Local copies of curproc (cp) and vmspace (myvm)
*/
- mycp = curproc;
+ mytd = curthread;
+ mycp = mytd->td_proc;
myvm = mycp->p_vmspace;
if (mycp->p_textvp) {
@@ -652,7 +654,7 @@
crit_exit();
/* Make up a name for the daemon. */
- strcpy(mycp->p_comm, "aiod");
+ strcpy(mytd->td_comm, "aiod");
/*
* Get rid of our current filedescriptors. AIOD's don't need any
Index: kern/vfs_journal.c
===================================================================
RCS file: /home/dcvs/src/sys/kern/vfs_journal.c,v
retrieving revision 1.23
diff -u -r1.23 vfs_journal.c
--- kern/vfs_journal.c 17 Sep 2005 07:43:00 -0000 1.23
+++ kern/vfs_journal.c 9 Oct 2005 11:39:41 -0000
@@ -1806,7 +1806,7 @@
jrecord_leaf(jrec, JLEAF_GID, &cred->cr_gid, sizeof(cred->cr_gid));
if (td && (p = td->td_proc) != NULL) {
jrecord_leaf(jrec, JLEAF_PID, &p->p_pid, sizeof(p->p_pid));
- jrecord_leaf(jrec, JLEAF_COMM, p->p_comm, sizeof(p->p_comm));
+ jrecord_leaf(jrec, JLEAF_COMM, td->td_comm, sizeof(td->td_comm));
}
jrecord_pop(jrec, save);
}
Index: netproto/smb/smb_subr.c
===================================================================
RCS file: /home/dcvs/src/sys/netproto/smb/smb_subr.c,v
retrieving revision 1.14
diff -u -r1.14 smb_subr.c
--- netproto/smb/smb_subr.c 2 Mar 2005 19:14:51 -0000 1.14
+++ netproto/smb/smb_subr.c 9 Oct 2005 10:51:43 -0000
@@ -372,6 +372,7 @@
int error;
__va_list ap;
struct proc *p2;
+ struct lwp *lp2;
if (!proc0.p_stats || proc0.p_thread->td_start.tv_sec == 0) {
panic("kthread_create called too soon");
@@ -381,6 +382,8 @@
if (error)
return error;
+ lp2 = LIST_FIRST(&p2->p_lwps);
+
/* save a global descriptor, if desired */
if (newpp != NULL)
*newpp = p2;
@@ -391,7 +394,8 @@
/* set up arg0 for 'ps', et al */
__va_start(ap, fmt);
- vsnprintf(p2->p_comm, sizeof(p2->p_comm), fmt, ap);
+ vsnprintf(lp2->lwp_thread->td_comm,
+ sizeof(lp2->lwp_thread->td_comm), fmt, ap);
__va_end(ap);
/* call the processes' main()... */
Index: sys/proc.h
===================================================================
RCS file: /home/dcvs/src/sys/sys/proc.h,v
retrieving revision 1.66
diff -u -r1.66 proc.h
--- sys/proc.h 8 Oct 2005 19:46:51 -0000 1.66
+++ sys/proc.h 9 Oct 2005 11:03:35 -0000
@@ -258,15 +258,14 @@
#define p_endzero p_startcopy
/* The following fields are all copied upon creation in fork. */
-#define p_startcopy p_comm
+#define p_startcopy p_lock
#define p_sigmask p_lwp.lwp_sigmask
#define p_sigstk p_lwp.lwp_sigstk
- char p_comm[MAXCOMLEN+1]; /* typ 16+1 bytes */
char p_lock; /* Process lock (prevent swap) count. */
char p_nice; /* Process "nice" value. */
- char p_pad3;
+ char p_pad3[2];
struct pgrp *p_pgrp; /* Pointer to process group. */
Index: vfs/procfs/procfs_status.c
===================================================================
RCS file: /home/dcvs/src/sys/vfs/procfs/procfs_status.c,v
retrieving revision 1.10
diff -u -r1.10 procfs_status.c
--- vfs/procfs/procfs_status.c 8 Oct 2005 19:46:51 -0000 1.10
+++ vfs/procfs/procfs_status.c 9 Oct 2005 12:03:04 -0000
@@ -64,6 +64,7 @@
struct session *sess;
struct tty *tp;
struct ucred *cr;
+ struct lwp *lp;
char *ps;
char *sep;
int pid, ppid, pgid, sid;
@@ -80,6 +81,7 @@
pgid = p->p_pgrp->pg_id;
sess = p->p_pgrp->pg_session;
sid = sess->s_leader ? sess->s_leader->p_pid : 0;
+ lp = LIST_FIRST(&p->p_lwps); /* XXX */
/* comm pid ppid pgid sid maj,min ctty,sldr start ut st wmsg
euid ruid rgid,egid,groups[1 .. NGROUPS]
@@ -88,7 +90,7 @@
("Too short buffer for new MAXCOMLEN"));
ps = psbuf;
- bcopy(p->p_comm, ps, MAXCOMLEN);
+ bcopy(lp->lwp_thread->td_comm, ps, MAXCOMLEN);
ps[MAXCOMLEN] = '\0';
ps += strlen(ps);
DOCHECK();
@@ -183,6 +185,7 @@
procfs_docmdline(struct proc *curp, struct proc *p, struct pfsnode *pfs,
struct uio *uio)
{
+ struct lwp *lp;
char *ps;
int xlen;
int error;
@@ -195,7 +198,9 @@
if (uio->uio_rw != UIO_READ)
return (EOPNOTSUPP);
-
+
+ lp = LIST_FIRST(&p->p_lwps); /* XXX */
+
/*
* If we are using the ps/cmdline caching, use that. Otherwise
* revert back to the old way which only implements full cmdline
@@ -214,7 +219,7 @@
buflen = p->p_args->ar_length;
buf = 0;
} else if (p != curp) {
- bp = p->p_comm;
+ bp = lp->lwp_thread->td_comm;
buflen = MAXCOMLEN;
buf = 0;
} else {
Index: vfs/ufs/ffs_alloc.c
===================================================================
RCS file: /home/dcvs/src/sys/vfs/ufs/ffs_alloc.c,v
retrieving revision 1.14
diff -u -r1.14 ffs_alloc.c
--- vfs/ufs/ffs_alloc.c 14 Aug 2005 18:53:42 -0000 1.14
+++ vfs/ufs/ffs_alloc.c 9 Oct 2005 11:44:33 -0000
@@ -1812,10 +1812,11 @@
struct proc *p;
if ((p = td->td_proc) != NULL) {
- log(LOG_ERR, "pid %d (%s), uid %d on %s: %s\n", p ? p->p_pid : -1,
- p ? p->p_comm : "-", uid, fs->fs_fsmnt, cp);
+ log(LOG_ERR, "pid %d tid %d (%s), uid %d on %s: %s\n",
+ p->p_pid, td->td_lwp->lwp_tid,
+ td->td_comm, uid, fs->fs_fsmnt, cp);
} else {
- log(LOG_ERR, "system thread %p, uid %d on %s: %s\n",
- td, uid, fs->fs_fsmnt, cp);
+ log(LOG_ERR, "system thread %p (%s), uid %d on %s: %s\n",
+ td, td->td_comm, uid, fs->fs_fsmnt, cp);
}
}
Index: vm/vm_fault.c
===================================================================
RCS file: /home/dcvs/src/sys/vm/vm_fault.c,v
retrieving revision 1.18
diff -u -r1.18 vm_fault.c
--- vm/vm_fault.c 12 Oct 2004 19:29:34 -0000 1.18
+++ vm/vm_fault.c 9 Oct 2005 12:11:33 -0000
@@ -544,8 +544,9 @@
*/
if (rv == VM_PAGER_ERROR)
- printf("vm_fault: pager read error, pid %d (%s)\n",
- curproc->p_pid, curproc->p_comm);
+ printf("vm_fault: pager read error, pid %d tid %d (%s)\n",
+ curproc->p_pid, curthread->td_lwp->lwp_tid,
+ curthread->td_comm);
/*
* Data outside the range of the pager or an I/O error
*/
Index: vm/vm_glue.c
===================================================================
RCS file: /home/dcvs/src/sys/vm/vm_glue.c,v
retrieving revision 1.34
diff -u -r1.34 vm_glue.c
--- vm/vm_glue.c 8 Oct 2005 19:46:51 -0000 1.34
+++ vm/vm_glue.c 9 Oct 2005 11:48:06 -0000
@@ -236,7 +236,7 @@
td2 = lwkt_alloc_thread(NULL, LWKT_THREAD_STACK, -1);
pmap_init_proc(p2, td2);
lwkt_setpri(td2, TDPRI_KERN_USER);
- lwkt_set_comm(td2, "%s", p1->p_comm);
+ lwkt_set_comm(td2, "%s", LIST_FIRST(&p1->p_lwps)->lwp_thread->td_comm);
up = p2->p_addr;
More information about the Commits
mailing list