Author: vangyzen
Date: Thu Dec 15 16:52:17 2016
New Revision: 310121
URL: https://svnweb.freebsd.org/changeset/base/310121

Log:
  MFC r309676
  
  Export the whole thread name in kinfo_proc
  
  kinfo_proc::ki_tdname is three characters shorter than
  thread::td_name.  Add a ki_moretdname field for these three
  extra characters.  Add the new field to kinfo_proc32, as well.
  Update all in-tree consumers to read the new field and assemble
  the full name, except for lldb's HostThreadFreeBSD.cpp, which
  I will handle separately.  Bump __FreeBSD_version.
  
  Sponsored by: Dell EMC

Modified:
  stable/10/bin/ps/print.c
  stable/10/lib/libkvm/kvm_proc.c
  stable/10/sys/compat/freebsd32/freebsd32.h
  stable/10/sys/kern/kern_proc.c
  stable/10/sys/sys/param.h
  stable/10/sys/sys/user.h
  stable/10/usr.bin/procstat/procstat.c
  stable/10/usr.bin/procstat/procstat.h
  stable/10/usr.bin/procstat/procstat_cs.c
  stable/10/usr.bin/procstat/procstat_kstack.c
  stable/10/usr.bin/procstat/procstat_threads.c
  stable/10/usr.bin/top/machine.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/bin/ps/print.c
==============================================================================
--- stable/10/bin/ps/print.c    Thu Dec 15 16:51:33 2016        (r310120)
+++ stable/10/bin/ps/print.c    Thu Dec 15 16:52:17 2016        (r310121)
@@ -119,11 +119,12 @@ command(KINFO *k, VARENT *ve)
        if (cflag) {
                /* If it is the last field, then don't pad */
                if (STAILQ_NEXT(ve, next_ve) == NULL) {
-                       asprintf(&str, "%s%s%s%s",
+                       asprintf(&str, "%s%s%s%s%s",
                            k->ki_d.prefix ? k->ki_d.prefix : "",
                            k->ki_p->ki_comm,
                            (showthreads && k->ki_p->ki_numthreads > 1) ? "/" : 
"",
-                           (showthreads && k->ki_p->ki_numthreads > 1) ? 
k->ki_p->ki_tdname : "");
+                           (showthreads && k->ki_p->ki_numthreads > 1) ? 
k->ki_p->ki_tdname : "",
+                           (showthreads && k->ki_p->ki_numthreads > 1) ? 
k->ki_p->ki_moretdname : "");
                } else
                        str = strdup(k->ki_p->ki_comm);
 
@@ -171,14 +172,16 @@ ucomm(KINFO *k, VARENT *ve)
        char *str;
 
        if (STAILQ_NEXT(ve, next_ve) == NULL) { /* last field, don't pad */
-               asprintf(&str, "%s%s%s%s",
+               asprintf(&str, "%s%s%s%s%s",
                    k->ki_d.prefix ? k->ki_d.prefix : "",
                    k->ki_p->ki_comm,
                    (showthreads && k->ki_p->ki_numthreads > 1) ? "/" : "",
-                   (showthreads && k->ki_p->ki_numthreads > 1) ? 
k->ki_p->ki_tdname : "");
+                   (showthreads && k->ki_p->ki_numthreads > 1) ? 
k->ki_p->ki_tdname : "",
+                   (showthreads && k->ki_p->ki_numthreads > 1) ? 
k->ki_p->ki_moretdname : "");
        } else {
                if (showthreads && k->ki_p->ki_numthreads > 1)
-                       asprintf(&str, "%s/%s", k->ki_p->ki_comm, 
k->ki_p->ki_tdname);
+                       asprintf(&str, "%s/%s%s", k->ki_p->ki_comm,
+                           k->ki_p->ki_tdname, k->ki_p->ki_moretdname);
                else
                        str = strdup(k->ki_p->ki_comm);
        }
@@ -191,7 +194,8 @@ tdnam(KINFO *k, VARENT *ve __unused)
        char *str;
 
        if (showthreads && k->ki_p->ki_numthreads > 1)
-               str = strdup(k->ki_p->ki_tdname);
+               asprintf(&str, "%s%s", k->ki_p->ki_tdname,
+                   k->ki_p->ki_moretdname);
        else
                str = strdup("      ");
 

Modified: stable/10/lib/libkvm/kvm_proc.c
==============================================================================
--- stable/10/lib/libkvm/kvm_proc.c     Thu Dec 15 16:51:33 2016        
(r310120)
+++ stable/10/lib/libkvm/kvm_proc.c     Thu Dec 15 16:52:17 2016        
(r310121)
@@ -424,8 +424,6 @@ nopgrp:
                        kp->ki_pri.pri_native = mtd.td_base_pri;
                        kp->ki_lastcpu = mtd.td_lastcpu;
                        kp->ki_wchan = mtd.td_wchan;
-                       if (mtd.td_name[0] != 0)
-                               strlcpy(kp->ki_tdname, mtd.td_name, MAXCOMLEN);
                        kp->ki_oncpu = mtd.td_oncpu;
                        if (mtd.td_name[0] != '\0')
                                strlcpy(kp->ki_tdname, mtd.td_name, 
sizeof(kp->ki_tdname));

Modified: stable/10/sys/compat/freebsd32/freebsd32.h
==============================================================================
--- stable/10/sys/compat/freebsd32/freebsd32.h  Thu Dec 15 16:51:33 2016        
(r310120)
+++ stable/10/sys/compat/freebsd32/freebsd32.h  Thu Dec 15 16:52:17 2016        
(r310121)
@@ -315,7 +315,8 @@ struct kinfo_proc32 {
        char    ki_comm[COMMLEN+1];
        char    ki_emul[KI_EMULNAMELEN+1];
        char    ki_loginclass[LOGINCLASSLEN+1];
-       char    ki_sparestrings[50];
+       char    ki_moretdname[MAXCOMLEN-TDNAMLEN+1];
+       char    ki_sparestrings[46];
        int     ki_spareints[KI_NSPARE_INT];
        int     ki_flag2;
        int     ki_fibnum;

Modified: stable/10/sys/kern/kern_proc.c
==============================================================================
--- stable/10/sys/kern/kern_proc.c      Thu Dec 15 16:51:33 2016        
(r310120)
+++ stable/10/sys/kern/kern_proc.c      Thu Dec 15 16:52:17 2016        
(r310121)
@@ -959,7 +959,14 @@ fill_kinfo_thread(struct thread *td, str
                strlcpy(kp->ki_wmesg, td->td_wmesg, sizeof(kp->ki_wmesg));
        else
                bzero(kp->ki_wmesg, sizeof(kp->ki_wmesg));
-       strlcpy(kp->ki_tdname, td->td_name, sizeof(kp->ki_tdname));
+       if (strlcpy(kp->ki_tdname, td->td_name, sizeof(kp->ki_tdname)) >=
+           sizeof(kp->ki_tdname)) {
+               strlcpy(kp->ki_moretdname,
+                   td->td_name + sizeof(kp->ki_tdname) - 1,
+                   sizeof(kp->ki_moretdname));
+       } else {
+               bzero(kp->ki_moretdname, sizeof(kp->ki_moretdname));
+       }
        if (TD_ON_LOCK(td)) {
                kp->ki_kiflag |= KI_LOCKBLOCK;
                strlcpy(kp->ki_lockname, td->td_lockname,
@@ -1180,6 +1187,7 @@ freebsd32_kinfo_proc_out(const struct ki
        bcopy(ki->ki_comm, ki32->ki_comm, COMMLEN + 1);
        bcopy(ki->ki_emul, ki32->ki_emul, KI_EMULNAMELEN + 1);
        bcopy(ki->ki_loginclass, ki32->ki_loginclass, LOGINCLASSLEN + 1);
+       bcopy(ki->ki_moretdname, ki32->ki_moretdname, MAXCOMLEN - TDNAMLEN + 1);
        CP(*ki, *ki32, ki_flag2);
        CP(*ki, *ki32, ki_fibnum);
        CP(*ki, *ki32, ki_cr_flags);

Modified: stable/10/sys/sys/param.h
==============================================================================
--- stable/10/sys/sys/param.h   Thu Dec 15 16:51:33 2016        (r310120)
+++ stable/10/sys/sys/param.h   Thu Dec 15 16:52:17 2016        (r310121)
@@ -58,7 +58,7 @@
  *             in the range 5 to 9.
  */
 #undef __FreeBSD_version
-#define __FreeBSD_version 1003510      /* Master, propagated to newvers */
+#define __FreeBSD_version 1003511      /* Master, propagated to newvers */
 
 /*
  * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,

Modified: stable/10/sys/sys/user.h
==============================================================================
--- stable/10/sys/sys/user.h    Thu Dec 15 16:51:33 2016        (r310120)
+++ stable/10/sys/sys/user.h    Thu Dec 15 16:52:17 2016        (r310121)
@@ -180,12 +180,13 @@ struct kinfo_proc {
        char    ki_comm[COMMLEN+1];     /* command name */
        char    ki_emul[KI_EMULNAMELEN+1];  /* emulation name */
        char    ki_loginclass[LOGINCLASSLEN+1]; /* login class */
+       char    ki_moretdname[MAXCOMLEN-TDNAMLEN+1];    /* more thread name */
        /*
         * When adding new variables, take space for char-strings from the
         * front of ki_sparestrings, and ints from the end of ki_spareints.
         * That way the spare room from both arrays will remain contiguous.
         */
-       char    ki_sparestrings[50];    /* spare string space */
+       char    ki_sparestrings[46];    /* spare string space */
        int     ki_spareints[KI_NSPARE_INT];    /* spare room for growth */
        int     ki_flag2;               /* P2_* flags */
        int     ki_fibnum;              /* Default FIB number */

Modified: stable/10/usr.bin/procstat/procstat.c
==============================================================================
--- stable/10/usr.bin/procstat/procstat.c       Thu Dec 15 16:51:33 2016        
(r310120)
+++ stable/10/usr.bin/procstat/procstat.c       Thu Dec 15 16:52:17 2016        
(r310121)
@@ -34,6 +34,7 @@
 #include <libprocstat.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <sysexits.h>
 #include <unistd.h>
 
@@ -115,6 +116,21 @@ kinfo_proc_sort(struct kinfo_proc *kipp,
        qsort(kipp, count, sizeof(*kipp), kinfo_proc_compare);
 }
 
+const char *
+kinfo_proc_thread_name(const struct kinfo_proc *kipp)
+{
+       static char name[MAXCOMLEN+1];
+
+       strlcpy(name, kipp->ki_tdname, sizeof(name));
+       strlcat(name, kipp->ki_moretdname, sizeof(name));
+       if (name[0] == '\0' || strcmp(kipp->ki_comm, name) == 0) {
+               name[0] = '-';
+               name[1] = '\0';
+       }
+
+       return (name);
+}
+
 int
 main(int argc, char *argv[])
 {

Modified: stable/10/usr.bin/procstat/procstat.h
==============================================================================
--- stable/10/usr.bin/procstat/procstat.h       Thu Dec 15 16:51:33 2016        
(r310120)
+++ stable/10/usr.bin/procstat/procstat.h       Thu Dec 15 16:52:17 2016        
(r310121)
@@ -33,6 +33,7 @@ extern int    hflag, nflag, Cflag, Hflag;
 
 struct kinfo_proc;
 void   kinfo_proc_sort(struct kinfo_proc *kipp, int count);
+const char *   kinfo_proc_thread_name(const struct kinfo_proc *kipp);
 
 void   procstat_args(struct procstat *prstat, struct kinfo_proc *kipp);
 void   procstat_auxv(struct procstat *prstat, struct kinfo_proc *kipp);

Modified: stable/10/usr.bin/procstat/procstat_cs.c
==============================================================================
--- stable/10/usr.bin/procstat/procstat_cs.c    Thu Dec 15 16:51:33 2016        
(r310120)
+++ stable/10/usr.bin/procstat/procstat_cs.c    Thu Dec 15 16:52:17 2016        
(r310121)
@@ -50,7 +50,7 @@ procstat_cs(struct procstat *procstat, s
        int once, twice, lastcpu, cpu;
 
        if (!hflag)
-               printf("%5s %6s %-16s %-16s %2s %4s %-7s\n", "PID",
+               printf("%5s %6s %-19s %-19s %2s %4s %-7s\n", "PID",
                    "TID", "COMM", "TDNAME", "CPU", "CSID", "CPU MASK");
 
        kip = procstat_getprocs(procstat, KERN_PROC_PID | KERN_PROC_INC_THREAD,
@@ -62,11 +62,9 @@ procstat_cs(struct procstat *procstat, s
                kipp = &kip[i];
                printf("%5d ", kipp->ki_pid);
                printf("%6d ", kipp->ki_tid);
-               printf("%-16s ", strlen(kipp->ki_comm) ?
+               printf("%-19s ", strlen(kipp->ki_comm) ?
                    kipp->ki_comm : "-");
-               printf("%-16s ", (strlen(kipp->ki_tdname) &&
-                   (strcmp(kipp->ki_comm, kipp->ki_tdname) != 0)) ?
-                   kipp->ki_tdname : "-");
+               printf("%-19s ", kinfo_proc_thread_name(kipp));
                if (kipp->ki_oncpu != 255)
                        printf("%3d ", kipp->ki_oncpu);
                else if (kipp->ki_lastcpu != 255)

Modified: stable/10/usr.bin/procstat/procstat_kstack.c
==============================================================================
--- stable/10/usr.bin/procstat/procstat_kstack.c        Thu Dec 15 16:51:33 
2016        (r310120)
+++ stable/10/usr.bin/procstat/procstat_kstack.c        Thu Dec 15 16:52:17 
2016        (r310121)
@@ -134,7 +134,7 @@ procstat_kstack(struct procstat *procsta
        unsigned int kip_count, kstk_count;
 
        if (!hflag)
-               printf("%5s %6s %-16s %-16s %-29s\n", "PID", "TID", "COMM",
+               printf("%5s %6s %-19s %-19s %-29s\n", "PID", "TID", "COMM",
                    "TDNAME", "KSTACK");
 
        kkstp = kkstp_free = procstat_getkstack(procstat, kipp, &kstk_count);
@@ -171,10 +171,8 @@ procstat_kstack(struct procstat *procsta
 
                printf("%5d ", kipp->ki_pid);
                printf("%6d ", kkstp->kkst_tid);
-               printf("%-16s ", kipp->ki_comm);
-               printf("%-16s ", (strlen(kipp->ki_tdname) &&
-                   (strcmp(kipp->ki_comm, kipp->ki_tdname) != 0)) ?
-                   kipp->ki_tdname : "-");
+               printf("%-19s ", kipp->ki_comm);
+               printf("%-19s ", kinfo_proc_thread_name(kipp));
 
                switch (kkstp->kkst_state) {
                case KKST_STATE_RUNNING:

Modified: stable/10/usr.bin/procstat/procstat_threads.c
==============================================================================
--- stable/10/usr.bin/procstat/procstat_threads.c       Thu Dec 15 16:51:33 
2016        (r310120)
+++ stable/10/usr.bin/procstat/procstat_threads.c       Thu Dec 15 16:52:17 
2016        (r310121)
@@ -47,7 +47,7 @@ procstat_threads(struct procstat *procst
        const char *str;
 
        if (!hflag)
-               printf("%5s %6s %-16s %-16s %2s %4s %-7s %-9s\n", "PID",
+               printf("%5s %6s %-19s %-19s %2s %4s %-7s %-9s\n", "PID",
                    "TID", "COMM", "TDNAME", "CPU", "PRI", "STATE", "WCHAN");
 
        kip = procstat_getprocs(procstat, KERN_PROC_PID | KERN_PROC_INC_THREAD,
@@ -59,11 +59,9 @@ procstat_threads(struct procstat *procst
                kipp = &kip[i];
                printf("%5d ", kipp->ki_pid);
                printf("%6d ", kipp->ki_tid);
-               printf("%-16s ", strlen(kipp->ki_comm) ?
+               printf("%-19s ", strlen(kipp->ki_comm) ?
                    kipp->ki_comm : "-");
-               printf("%-16s ", (strlen(kipp->ki_tdname) &&
-                   (strcmp(kipp->ki_comm, kipp->ki_tdname) != 0)) ?
-                   kipp->ki_tdname : "-");
+               printf("%-19s ", kinfo_proc_thread_name(kipp));
                if (kipp->ki_oncpu != 255)
                        printf("%3d ", kipp->ki_oncpu);
                else if (kipp->ki_lastcpu != 255)

Modified: stable/10/usr.bin/top/machine.c
==============================================================================
--- stable/10/usr.bin/top/machine.c     Thu Dec 15 16:51:33 2016        
(r310120)
+++ stable/10/usr.bin/top/machine.c     Thu Dec 15 16:52:17 2016        
(r310121)
@@ -889,8 +889,8 @@ format_next_process(caddr_t handle, char
        if (!(flags & FMT_SHOWARGS)) {
                if (ps.thread && pp->ki_flag & P_HADTHREADS &&
                    pp->ki_tdname[0]) {
-                       snprintf(cmdbuf, cmdlen, "%s{%s}", pp->ki_comm,
-                           pp->ki_tdname);
+                       snprintf(cmdbuf, cmdlen, "%s{%s%s}", pp->ki_comm,
+                           pp->ki_tdname, pp->ki_moretdname);
                } else {
                        snprintf(cmdbuf, cmdlen, "%s", pp->ki_comm);
                }
@@ -902,7 +902,8 @@ format_next_process(caddr_t handle, char
                        if (ps.thread && pp->ki_flag & P_HADTHREADS &&
                            pp->ki_tdname[0]) {
                                snprintf(cmdbuf, cmdlen,
-                                   "[%s{%s}]", pp->ki_comm, pp->ki_tdname);
+                                   "[%s{%s%s}]", pp->ki_comm, pp->ki_tdname,
+                                   pp->ki_moretdname);
                        } else {
                                snprintf(cmdbuf, cmdlen,
                                    "[%s]", pp->ki_comm);
@@ -950,8 +951,9 @@ format_next_process(caddr_t handle, char
                                if (ps.thread && pp->ki_flag & P_HADTHREADS &&
                                    pp->ki_tdname[0])
                                        snprintf(cmdbuf, cmdlen,
-                                           "%s (%s){%s}", argbuf, pp->ki_comm,
-                                           pp->ki_tdname);
+                                           "%s (%s){%s%s}", argbuf,
+                                           pp->ki_comm, pp->ki_tdname,
+                                           pp->ki_moretdname);
                                else
                                        snprintf(cmdbuf, cmdlen,
                                            "%s (%s)", argbuf, pp->ki_comm);
@@ -959,7 +961,8 @@ format_next_process(caddr_t handle, char
                                if (ps.thread && pp->ki_flag & P_HADTHREADS &&
                                    pp->ki_tdname[0])
                                        snprintf(cmdbuf, cmdlen,
-                                           "%s{%s}", argbuf, pp->ki_tdname);
+                                           "%s{%s%s}", argbuf, pp->ki_tdname,
+                                           pp->ki_moretdname);
                                else
                                        strlcpy(cmdbuf, argbuf, cmdlen);
                        }
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to