Index: sys/compat/linprocfs/linprocfs.c =================================================================== --- sys/compat/linprocfs/linprocfs.c +++ sys/compat/linprocfs/linprocfs.c @@ -767,6 +767,36 @@ return (0); } +static int +linprocfs_get_tty_nr(struct proc *p) +{ + struct session *sp; + struct tty *tp; + const char *ttyname; + int error, major, minor, nr; + + PROC_LOCK_ASSERT(p, MA_OWNED); + + if ((p->p_flag & P_CONTROLT) == 0) + return (-1); + + sp = p->p_pgrp->pg_session; + if (sp == NULL) + return (-1); + + SESS_LOCK(sp); + tp = sp->s_ttyp; + SESS_UNLOCK(sp); + + ttyname = devtoname(tp->t_dev); + error = linux_driver_get_major_minor(ttyname, &major, &minor); + if (error != 0) + return (-1); + + nr = makedev(major, minor); + return (nr); +} + /* * Filler function for proc/pid/stat */ @@ -777,6 +807,7 @@ struct timeval boottime; char state; static int ratelimit = 0; + int tty_nr; vm_offset_t startcode, startdata; getboottime(&boottime); @@ -808,11 +839,9 @@ PS_ADD("ppid", "%d", p->p_pptr ? p->p_pptr->p_pid : 0); PS_ADD("pgrp", "%d", p->p_pgid); PS_ADD("session", "%d", p->p_session->s_sid); + tty_nr = linprocfs_get_tty_nr(p); PROC_UNLOCK(p); - if (kp.ki_tdev == NODEV) - PS_ADD("tty", "%s", "-1"); - else - PS_ADD("tty", "%ju", (uintmax_t)kp.ki_tdev); + PS_ADD("tty", "%d", tty_nr); PS_ADD("tpgid", "%d", kp.ki_tpgid); PS_ADD("flags", "%u", 0); /* XXX */ PS_ADD("minflt", "%lu", kp.ki_rusage.ru_minflt);