[PATCH] [V2] add options to ps(1) to display lwp data
Nicolas Thery
nthery at gmail.com
Tue Aug 14 14:43:15 PDT 2007
2007/8/14, Simon 'corecode' Schubert <corecode at fs.ei.tum.de>:
> Nicolas Thery wrote:
> > Changed sysctl(KERN_PROC, ...) behaviour for kernel threads not associated
> > with lwps. kinfo_lwp.kl_tid is set to -1 in this case instead of thread
> > structure address. This is consistent with kinfo_proc.kp_pid, avoid
> > garbage values in ps -axH output and should not break anything as kl_tid
> > is not used anywhere in the source tree.
>
> > Index: dfly/src/sys/kern/kern_kinfo.c
> > ===================================================================
> > --- dfly.orig/src/sys/kern/kern_kinfo.c 2007-08-14 21:35:18.000000000 +0200
> > +++ dfly/src/sys/kern/kern_kinfo.c 2007-08-14 21:36:39.000000000 +0200
> > @@ -218,7 +218,7 @@
> > kp->kp_stat = SACTIVE;
> >
> > kp->kp_lwp.kl_pid = -1;
> > - kp->kp_lwp.kl_tid = (uintptr_t)td;
> > + kp->kp_lwp.kl_tid = -1;
> > kp->kp_lwp.kl_tdflags = td->td_flags;
> > #ifdef SMP
> > kp->kp_lwp.kl_mpcount = td->td_mpcount;
>
> I don't think this is good. td is the "thread id", and nothing else. Now you've removed the only possible identifier for a kernel thread.
>
> This needs to be reverted, and ps extended to use %#x or so
I understand your point but the existing code already has a similar problem:
when the kernel thread is associated with a lwp, fill_kinfo_lwp() sets kl_tid to
lwp_tid which is an integer allocated in lwp_fork() , not the
associated struct thread
address. It seems that "TID" refers sometimes to a LWP ID and
sometimes to a kernel
thread ID.
Cheers,
Nicolas
More information about the Submit
mailing list