diff options
author | ethindra <none@none> | 2008-04-10 18:39:54 -0700 |
---|---|---|
committer | ethindra <none@none> | 2008-04-10 18:39:54 -0700 |
commit | 25b463cd92e47dd38c37cca8e3284b1ed92d792b (patch) | |
tree | 4ee33d55ef5d26de29606f07a823094d59037f02 | |
parent | 20ae46ebaff1237662e05edf9db61538aa85d448 (diff) | |
download | illumos-gate-25b463cd92e47dd38c37cca8e3284b1ed92d792b.tar.gz |
6664495 procfs sees controlling ttys everywhere on (s10) E15k/E25k
-rw-r--r-- | usr/src/uts/common/fs/proc/prioctl.c | 31 | ||||
-rw-r--r-- | usr/src/uts/common/fs/proc/prsubr.c | 47 |
2 files changed, 42 insertions, 36 deletions
diff --git a/usr/src/uts/common/fs/proc/prioctl.c b/usr/src/uts/common/fs/proc/prioctl.c index 45fddda6f6..45a10b88f7 100644 --- a/usr/src/uts/common/fs/proc/prioctl.c +++ b/usr/src/uts/common/fs/proc/prioctl.c @@ -19,7 +19,7 @@ * CDDL HEADER END */ /* - * Copyright 2007 Sun Microsystems, Inc. All rights reserved. + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -1421,7 +1421,7 @@ oprgetstatus32(kthread_t *t, prstatus32_t *sp, zone_t *zp) TICK_TO_TIMESTRUC32(p->p_cutime, &sp->pr_cutime); TICK_TO_TIMESTRUC32(p->p_cstime, &sp->pr_cstime); (void) strncpy(sp->pr_clname, sclass[t->t_cid].cl_name, - sizeof (sp->pr_clname) - 1); + sizeof (sp->pr_clname) - 1); sp->pr_who = t->t_tid; sp->pr_nlwp = p->p_lwpcnt; sp->pr_brkbase = (caddr32_t)(uintptr_t)p->p_brkbase; @@ -1456,7 +1456,7 @@ oprgetstatus32(kthread_t *t, prstatus32_t *sp, zone_t *zp) auxv_t *auxp; sp->pr_syscall = get_syscall32_args(lwp, - (int *)sp->pr_sysarg, &i); + (int *)sp->pr_sysarg, &i); sp->pr_nsysarg = (short)i; if (t->t_whystop == PR_SYSEXIT && (t->t_sysnum == SYS_exec || t->t_sysnum == SYS_execve)) { @@ -1468,7 +1468,8 @@ oprgetstatus32(kthread_t *t, prstatus32_t *sp, zone_t *zp) i++, auxp++) { if (auxp->a_type == AT_SUN_EXECNAME) { sp->pr_sysarg[0] = - (caddr32_t)(uintptr_t)auxp->a_un.a_ptr; + (caddr32_t) + (uintptr_t)auxp->a_un.a_ptr; break; } } @@ -1589,7 +1590,7 @@ oprgetpsinfo32(proc_t *p, prpsinfo32_t *psp, kthread_t *tp) psp->pr_wchan = 0; /* cannot represent in 32 bits */ psp->pr_pri = t->t_pri; (void) strncpy(psp->pr_clname, sclass[t->t_cid].cl_name, - sizeof (psp->pr_clname) - 1); + sizeof (psp->pr_clname) - 1); retval = CL_DONICE(t, NULL, 0, &niceval); if (retval == 0) { psp->pr_oldpri = v.v_maxsyspri - psp->pr_pri; @@ -1605,9 +1606,10 @@ oprgetpsinfo32(proc_t *p, prpsinfo32_t *psp, kthread_t *tp) /* * If the controlling terminal is the real * or workstation console device, map to what the - * user thinks is the console device. + * user thinks is the console device. Handle case when + * rwsconsdev or rconsdev is set to NODEV for Starfire. */ - if (d == rwsconsdev || d == rconsdev) + if ((d == rwsconsdev || d == rconsdev) && d != NODEV) d = uconsdev; } #endif @@ -2864,7 +2866,7 @@ startover: for (i = 0; i < __KERN_NAUXV_IMPL; i++) { un32.auxv[i].a_type = up->u_auxv[i].a_type; un32.auxv[i].a_un.a_val = - (int32_t)up->u_auxv[i].a_un.a_val; + (int32_t)up->u_auxv[i].a_un.a_val; } prunlock(pnp); if (copyout(un32.auxv, cmaddr, @@ -3251,7 +3253,7 @@ oprgetstatus(kthread_t *t, prstatus_t *sp, zone_t *zp) TICK_TO_TIMESTRUC(p->p_cutime, &sp->pr_cutime); TICK_TO_TIMESTRUC(p->p_cstime, &sp->pr_cstime); (void) strncpy(sp->pr_clname, sclass[t->t_cid].cl_name, - sizeof (sp->pr_clname) - 1); + sizeof (sp->pr_clname) - 1); sp->pr_who = t->t_tid; sp->pr_nlwp = p->p_lwpcnt; sp->pr_brkbase = p->p_brkbase; @@ -3286,7 +3288,7 @@ oprgetstatus(kthread_t *t, prstatus_t *sp, zone_t *zp) auxv_t *auxp; sp->pr_syscall = get_syscall_args(lwp, - (long *)sp->pr_sysarg, &i); + (long *)sp->pr_sysarg, &i); sp->pr_nsysarg = (short)i; if (t->t_whystop == PR_SYSEXIT && (t->t_sysnum == SYS_exec || t->t_sysnum == SYS_execve)) { @@ -3298,7 +3300,7 @@ oprgetstatus(kthread_t *t, prstatus_t *sp, zone_t *zp) i++, auxp++) { if (auxp->a_type == AT_SUN_EXECNAME) { sp->pr_sysarg[0] = - (uintptr_t)auxp->a_un.a_ptr; + (uintptr_t)auxp->a_un.a_ptr; break; } } @@ -3422,7 +3424,7 @@ oprgetpsinfo(proc_t *p, prpsinfo_t *psp, kthread_t *tp) psp->pr_wchan = t->t_wchan; psp->pr_pri = t->t_pri; (void) strncpy(psp->pr_clname, sclass[t->t_cid].cl_name, - sizeof (psp->pr_clname) - 1); + sizeof (psp->pr_clname) - 1); retval = CL_DONICE(t, NULL, 0, &niceval); if (retval == 0) { psp->pr_oldpri = v.v_maxsyspri - psp->pr_pri; @@ -3438,9 +3440,10 @@ oprgetpsinfo(proc_t *p, prpsinfo_t *psp, kthread_t *tp) /* * If the controlling terminal is the real * or workstation console device, map to what the - * user thinks is the console device. + * user thinks is the console device. Handle case when + * rwsconsdev or rconsdev is set to NODEV for Starfire. */ - if (d == rwsconsdev || d == rconsdev) + if ((d == rwsconsdev || d == rconsdev) && d != NODEV) d = uconsdev; } #endif diff --git a/usr/src/uts/common/fs/proc/prsubr.c b/usr/src/uts/common/fs/proc/prsubr.c index e716d3b0e3..7b7eaec97d 100644 --- a/usr/src/uts/common/fs/proc/prsubr.c +++ b/usr/src/uts/common/fs/proc/prsubr.c @@ -20,7 +20,7 @@ */ /* - * Copyright 2007 Sun Microsystems, Inc. All rights reserved. + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -1000,7 +1000,7 @@ prgetlwpstatus32(kthread_t *t, lwpstatus32_t *sp, zone_t *zp) sp->pr_oldcontext = (caddr32_t)lwp->lwp_oldcontext; sp->pr_ustack = (caddr32_t)lwp->lwp_ustack; (void) strncpy(sp->pr_clname, sclass[t->t_cid].cl_name, - sizeof (sp->pr_clname) - 1); + sizeof (sp->pr_clname) - 1); if (flags & PR_STOPPED) hrt2ts32(t->t_stoptime, &sp->pr_tstamp); usr = ms->ms_acct[LMS_USER]; @@ -1033,7 +1033,7 @@ prgetlwpstatus32(kthread_t *t, lwpstatus32_t *sp, zone_t *zp) int i; sp->pr_syscall = get_syscall32_args(lwp, - (int *)sp->pr_sysarg, &i); + (int *)sp->pr_sysarg, &i); sp->pr_nsysarg = (ushort_t)i; } if ((flags & PR_STOPPED) || t == curthread) @@ -1063,7 +1063,8 @@ prgetlwpstatus32(kthread_t *t, lwpstatus32_t *sp, zone_t *zp) i++, auxp++) { if (auxp->a_type == AT_SUN_EXECNAME) { sp->pr_sysarg[0] = - (caddr32_t)(uintptr_t)auxp->a_un.a_ptr; + (caddr32_t) + (uintptr_t)auxp->a_un.a_ptr; break; } } @@ -1227,7 +1228,7 @@ prgetlwpstatus(kthread_t *t, lwpstatus_t *sp, zone_t *zp) sp->pr_oldcontext = (uintptr_t)lwp->lwp_oldcontext; sp->pr_ustack = lwp->lwp_ustack; (void) strncpy(sp->pr_clname, sclass[t->t_cid].cl_name, - sizeof (sp->pr_clname) - 1); + sizeof (sp->pr_clname) - 1); if (flags & PR_STOPPED) hrt2ts(t->t_stoptime, &sp->pr_tstamp); usr = ms->ms_acct[LMS_USER]; @@ -1260,7 +1261,7 @@ prgetlwpstatus(kthread_t *t, lwpstatus_t *sp, zone_t *zp) int i; sp->pr_syscall = get_syscall_args(lwp, - (long *)sp->pr_sysarg, &i); + (long *)sp->pr_sysarg, &i); sp->pr_nsysarg = (ushort_t)i; } if ((flags & PR_STOPPED) || t == curthread) @@ -1287,7 +1288,7 @@ prgetlwpstatus(kthread_t *t, lwpstatus_t *sp, zone_t *zp) i++, auxp++) { if (auxp->a_type == AT_SUN_EXECNAME) { sp->pr_sysarg[0] = - (uintptr_t)auxp->a_un.a_ptr; + (uintptr_t)auxp->a_un.a_ptr; break; } } @@ -1686,7 +1687,7 @@ prgetmap(proc_t *p, int reserved, list_t *iolhead) (void) strcpy(mp->pr_mapname, "a.out"); else pr_object_name(mp->pr_mapname, - vp, &vattr); + vp, &vattr); } /* @@ -1798,7 +1799,7 @@ prgetmap32(proc_t *p, int reserved, list_t *iolhead) (void) strcpy(mp->pr_mapname, "a.out"); else pr_object_name(mp->pr_mapname, - vp, &vattr); + vp, &vattr); } /* @@ -2001,7 +2002,7 @@ again: (void) strcpy(pmp->pr_mapname, "a.out"); else pr_object_name(pmp->pr_mapname, - vp, &vattr); + vp, &vattr); } /* @@ -2148,7 +2149,7 @@ again: (void) strcpy(pmp->pr_mapname, "a.out"); else pr_object_name(pmp->pr_mapname, - vp, &vattr); + vp, &vattr); } /* @@ -2290,9 +2291,10 @@ prgetpsinfo(proc_t *p, psinfo_t *psp) /* * If the controlling terminal is the real * or workstation console device, map to what the - * user thinks is the console device. + * user thinks is the console device. Handle case when + * rwsconsdev or rconsdev is set to NODEV for Starfire. */ - if (d == rwsconsdev || d == rconsdev) + if ((d == rwsconsdev || d == rconsdev) && d != NODEV) d = uconsdev; psp->pr_ttydev = (d == NODEV) ? PRNODEV : d; psp->pr_start = up->u_start; @@ -2420,9 +2422,10 @@ prgetpsinfo32(proc_t *p, psinfo32_t *psp) /* * If the controlling terminal is the real * or workstation console device, map to what the - * user thinks is the console device. + * user thinks is the console device. Handle case when + * rwsconsdev or rconsdev is set to NODEV for Starfire. */ - if (d == rwsconsdev || d == rconsdev) + if ((d == rwsconsdev || d == rconsdev) && d != NODEV) d = uconsdev; (void) cmpldev(&psp->pr_ttydev, d); TIMESPEC_TO_TIMESPEC32(&psp->pr_start, &up->u_start); @@ -2459,9 +2462,9 @@ prgetpsinfo32(proc_t *p, psinfo32_t *psp) mutex_exit(&p->p_lock); AS_LOCK_ENTER(as, &as->a_lock, RW_READER); psp->pr_size = (size32_t) - (btopr(rm_assize(as)) * (PAGESIZE / 1024)); + (btopr(rm_assize(as)) * (PAGESIZE / 1024)); psp->pr_rssize = (size32_t) - (rm_asrss(as) * (PAGESIZE / 1024)); + (rm_asrss(as) * (PAGESIZE / 1024)); psp->pr_pctmem = rm_pctmemory(as); AS_LOCK_EXIT(as, &as->a_lock); mutex_enter(&p->p_lock); @@ -2538,7 +2541,7 @@ prgetlwpsinfo(kthread_t *t, lwpsinfo_t *psp) psp->pr_cpu = 99; (void) strncpy(psp->pr_clname, sclass[t->t_cid].cl_name, - sizeof (psp->pr_clname) - 1); + sizeof (psp->pr_clname) - 1); bzero(psp->pr_name, sizeof (psp->pr_name)); /* XXX ??? */ psp->pr_onpro = t->t_cpu->cpu_id; psp->pr_bindpro = t->t_bind_cpu; @@ -2608,7 +2611,7 @@ prgetlwpsinfo32(kthread_t *t, lwpsinfo32_t *psp) psp->pr_cpu = 99; (void) strncpy(psp->pr_clname, sclass[t->t_cid].cl_name, - sizeof (psp->pr_clname) - 1); + sizeof (psp->pr_clname) - 1); bzero(psp->pr_name, sizeof (psp->pr_name)); /* XXX ??? */ psp->pr_onpro = t->t_cpu->cpu_id; psp->pr_bindpro = t->t_bind_cpu; @@ -3712,7 +3715,7 @@ pr_getsegsize(struct seg *seg, int reserved) */ if (seg->s_ops == &segdev_ops && ((SEGOP_GETTYPE(seg, seg->s_base) & - (MAP_SHARED | MAP_PRIVATE)) == 0)) + (MAP_SHARED | MAP_PRIVATE)) == 0)) return (0); /* @@ -3982,7 +3985,7 @@ prgetxmap(proc_t *p, list_t *iolhead) SEGOP_GETVP(seg, saddr, &vp) == 0 && vp != NULL && vp->v_type == VREG && VOP_GETATTR(vp, &vattr, 0, CRED(), - NULL) == 0) { + NULL) == 0) { mp->pr_dev = vattr.va_fsid; mp->pr_ino = vattr.va_nodeid; if (vp == p->p_exec) @@ -4166,7 +4169,7 @@ prgetxmap32(proc_t *p, list_t *iolhead) SEGOP_GETVP(seg, saddr, &vp) == 0 && vp != NULL && vp->v_type == VREG && VOP_GETATTR(vp, &vattr, 0, CRED(), - NULL) == 0) { + NULL) == 0) { (void) cmpldev(&mp->pr_dev, vattr.va_fsid); mp->pr_ino = vattr.va_nodeid; |