Module Name: src Committed By: njoly Date: Sat Nov 3 23:22:23 UTC 2012
Modified Files: src/sys/compat/common: kern_time_50.c src/sys/compat/netbsd32: netbsd32_compat_50.c netbsd32_wait.c src/sys/compat/osf1: osf1_resource.c src/sys/kern: kern_resource.c src/sys/sys: resourcevar.h Log Message: Move rusage computation to a new getrusage1() function. Adjust all compat/emulations to make use of it. To generate a diff of this commit: cvs rdiff -u -r1.23 -r1.24 src/sys/compat/common/kern_time_50.c cvs rdiff -u -r1.21 -r1.22 src/sys/compat/netbsd32/netbsd32_compat_50.c \ src/sys/compat/netbsd32/netbsd32_wait.c cvs rdiff -u -r1.14 -r1.15 src/sys/compat/osf1/osf1_resource.c cvs rdiff -u -r1.169 -r1.170 src/sys/kern/kern_resource.c cvs rdiff -u -r1.53 -r1.54 src/sys/sys/resourcevar.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/compat/common/kern_time_50.c diff -u src/sys/compat/common/kern_time_50.c:1.23 src/sys/compat/common/kern_time_50.c:1.24 --- src/sys/compat/common/kern_time_50.c:1.23 Tue Oct 2 01:44:27 2012 +++ src/sys/compat/common/kern_time_50.c Sat Nov 3 23:22:21 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_time_50.c,v 1.23 2012/10/02 01:44:27 christos Exp $ */ +/* $NetBSD: kern_time_50.c,v 1.24 2012/11/03 23:22:21 njoly Exp $ */ /*- * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. @@ -29,7 +29,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_time_50.c,v 1.23 2012/10/02 01:44:27 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_time_50.c,v 1.24 2012/11/03 23:22:21 njoly Exp $"); #ifdef _KERNEL_OPT #include "opt_aio.h" @@ -509,27 +509,15 @@ compat_50_sys_getrusage(struct lwp *l, syscallarg(int) who; syscallarg(struct rusage50 *) rusage; } */ + int error; struct rusage ru; struct rusage50 ru50; struct proc *p = l->l_proc; - switch (SCARG(uap, who)) { - case RUSAGE_SELF: - mutex_enter(p->p_lock); - memcpy(&ru, &p->p_stats->p_ru, sizeof(ru)); - calcru(p, &ru.ru_utime, &ru.ru_stime, NULL, NULL); - mutex_exit(p->p_lock); - break; - - case RUSAGE_CHILDREN: - mutex_enter(p->p_lock); - memcpy(&ru, &p->p_stats->p_cru, sizeof(ru)); - mutex_exit(p->p_lock); - break; + error = getrusage1(p, SCARG(uap, who), &ru); + if (error != 0) + return error; - default: - return EINVAL; - } rusage_to_rusage50(&ru, &ru50); return copyout(&ru50, SCARG(uap, rusage), sizeof(ru50)); } Index: src/sys/compat/netbsd32/netbsd32_compat_50.c diff -u src/sys/compat/netbsd32/netbsd32_compat_50.c:1.21 src/sys/compat/netbsd32/netbsd32_compat_50.c:1.22 --- src/sys/compat/netbsd32/netbsd32_compat_50.c:1.21 Tue Oct 2 01:44:28 2012 +++ src/sys/compat/netbsd32/netbsd32_compat_50.c Sat Nov 3 23:22:22 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: netbsd32_compat_50.c,v 1.21 2012/10/02 01:44:28 christos Exp $ */ +/* $NetBSD: netbsd32_compat_50.c,v 1.22 2012/11/03 23:22:22 njoly Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -36,7 +36,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_50.c,v 1.21 2012/10/02 01:44:28 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_50.c,v 1.22 2012/11/03 23:22:22 njoly Exp $"); #if defined(_KERNEL_OPT) #include "opt_sysv.h" @@ -840,28 +840,17 @@ compat_50_netbsd32_getrusage(struct lwp syscallarg(int) who; syscallarg(netbsd32_rusage50p_t) rusage; } */ + int error; struct proc *p = l->l_proc; - struct rusage *rup; - struct netbsd32_rusage50 ru; - - switch (SCARG(uap, who)) { - - case RUSAGE_SELF: - rup = &p->p_stats->p_ru; - mutex_enter(p->p_lock); - calcru(p, &rup->ru_utime, &rup->ru_stime, NULL, NULL); - mutex_exit(p->p_lock); - break; + struct rusage ru; + struct netbsd32_rusage50 ru32; - case RUSAGE_CHILDREN: - rup = &p->p_stats->p_cru; - break; + error = getrusage1(p, SCARG(uap, who), &ru); + if (error != 0) + return error; - default: - return (EINVAL); - } - netbsd32_from_rusage50(rup, &ru); - return copyout(&ru, SCARG_P32(uap, rusage), sizeof(ru)); + netbsd32_from_rusage50(&ru, &ru32); + return copyout(&ru32, SCARG_P32(uap, rusage), sizeof(ru32)); } int Index: src/sys/compat/netbsd32/netbsd32_wait.c diff -u src/sys/compat/netbsd32/netbsd32_wait.c:1.21 src/sys/compat/netbsd32/netbsd32_wait.c:1.22 --- src/sys/compat/netbsd32/netbsd32_wait.c:1.21 Wed Nov 4 21:23:03 2009 +++ src/sys/compat/netbsd32/netbsd32_wait.c Sat Nov 3 23:22:22 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: netbsd32_wait.c,v 1.21 2009/11/04 21:23:03 rmind Exp $ */ +/* $NetBSD: netbsd32_wait.c,v 1.22 2012/11/03 23:22:22 njoly Exp $ */ /* * Copyright (c) 1998, 2001 Matthew R. Green @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: netbsd32_wait.c,v 1.21 2009/11/04 21:23:03 rmind Exp $"); +__KERNEL_RCSID(0, "$NetBSD: netbsd32_wait.c,v 1.22 2012/11/03 23:22:22 njoly Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -86,26 +86,15 @@ netbsd32___getrusage50(struct lwp *l, syscallarg(int) who; syscallarg(netbsd32_rusagep_t) rusage; } */ + int error; struct proc *p = l->l_proc; - struct rusage *rup; - struct netbsd32_rusage ru; - - switch (SCARG(uap, who)) { + struct rusage ru; + struct netbsd32_rusage ru32; - case RUSAGE_SELF: - rup = &p->p_stats->p_ru; - mutex_enter(p->p_lock); - calcru(p, &rup->ru_utime, &rup->ru_stime, NULL, NULL); - mutex_exit(p->p_lock); - break; - - case RUSAGE_CHILDREN: - rup = &p->p_stats->p_cru; - break; + error = getrusage1(p, SCARG(uap, who), &ru); + if (error != 0) + return error; - default: - return (EINVAL); - } - netbsd32_from_rusage(rup, &ru); - return copyout(&ru, SCARG_P32(uap, rusage), sizeof(ru)); + netbsd32_from_rusage(&ru, &ru32); + return copyout(&ru32, SCARG_P32(uap, rusage), sizeof(ru32)); } Index: src/sys/compat/osf1/osf1_resource.c diff -u src/sys/compat/osf1/osf1_resource.c:1.14 src/sys/compat/osf1/osf1_resource.c:1.15 --- src/sys/compat/osf1/osf1_resource.c:1.14 Sun Mar 29 01:02:50 2009 +++ src/sys/compat/osf1/osf1_resource.c Sat Nov 3 23:22:22 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: osf1_resource.c,v 1.14 2009/03/29 01:02:50 mrg Exp $ */ +/* $NetBSD: osf1_resource.c,v 1.15 2012/11/03 23:22:22 njoly Exp $ */ /* * Copyright (c) 1999 Christopher G. Demetriou. All rights reserved. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: osf1_resource.c,v 1.14 2009/03/29 01:02:50 mrg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: osf1_resource.c,v 1.15 2012/11/03 23:22:22 njoly Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -88,6 +88,7 @@ osf1_sys_getrlimit(struct lwp *l, const int osf1_sys_getrusage(struct lwp *l, const struct osf1_sys_getrusage_args *uap, register_t *retval) { + int error, who; struct osf1_rusage osf1_rusage; struct rusage ru; struct proc *p = l->l_proc; @@ -95,22 +96,22 @@ osf1_sys_getrusage(struct lwp *l, const switch (SCARG(uap, who)) { case OSF1_RUSAGE_SELF: - mutex_enter(p->p_lock); - ru = p->p_stats->p_ru; - calcru(p, &ru.ru_utime, &ru.ru_stime, NULL, NULL); - rulwps(p, &ru); - mutex_exit(p->p_lock); + who = RUSAGE_SELF; break; case OSF1_RUSAGE_CHILDREN: - ru = p->p_stats->p_cru; + who = RUSAGE_CHILDREN; break; case OSF1_RUSAGE_THREAD: /* XXX not supported */ default: - return (EINVAL); + return EINVAL; } + error = getrusage1(p, who, &ru); + if (error != 0) + return error; + osf1_cvt_rusage_from_native(&ru, &osf1_rusage); return copyout(&osf1_rusage, SCARG(uap, rusage), sizeof osf1_rusage); Index: src/sys/kern/kern_resource.c diff -u src/sys/kern/kern_resource.c:1.169 src/sys/kern/kern_resource.c:1.170 --- src/sys/kern/kern_resource.c:1.169 Sat Jun 9 02:31:15 2012 +++ src/sys/kern/kern_resource.c Sat Nov 3 23:22:22 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_resource.c,v 1.169 2012/06/09 02:31:15 christos Exp $ */ +/* $NetBSD: kern_resource.c,v 1.170 2012/11/03 23:22:22 njoly Exp $ */ /*- * Copyright (c) 1982, 1986, 1991, 1993 @@ -37,7 +37,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_resource.c,v 1.169 2012/06/09 02:31:15 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_resource.c,v 1.170 2012/11/03 23:22:22 njoly Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -558,29 +558,38 @@ sys___getrusage50(struct lwp *l, const s syscallarg(int) who; syscallarg(struct rusage *) rusage; } */ + int error; struct rusage ru; struct proc *p = l->l_proc; - switch (SCARG(uap, who)) { + error = getrusage1(p, SCARG(uap, who), &ru); + if (error != 0) + return error; + + return copyout(&ru, SCARG(uap, rusage), sizeof(ru)); +} + +int +getrusage1(struct proc *p, int who, struct rusage *ru) { + + switch (who) { case RUSAGE_SELF: mutex_enter(p->p_lock); - memcpy(&ru, &p->p_stats->p_ru, sizeof(ru)); - calcru(p, &ru.ru_utime, &ru.ru_stime, NULL, NULL); - rulwps(p, &ru); + memcpy(ru, &p->p_stats->p_ru, sizeof(*ru)); + calcru(p, &ru->ru_utime, &ru->ru_stime, NULL, NULL); + rulwps(p, ru); mutex_exit(p->p_lock); break; - case RUSAGE_CHILDREN: mutex_enter(p->p_lock); - memcpy(&ru, &p->p_stats->p_cru, sizeof(ru)); + memcpy(ru, &p->p_stats->p_cru, sizeof(*ru)); mutex_exit(p->p_lock); break; - default: return EINVAL; } - return copyout(&ru, SCARG(uap, rusage), sizeof(ru)); + return 0; } void Index: src/sys/sys/resourcevar.h diff -u src/sys/sys/resourcevar.h:1.53 src/sys/sys/resourcevar.h:1.54 --- src/sys/sys/resourcevar.h:1.53 Fri Jun 3 17:58:18 2011 +++ src/sys/sys/resourcevar.h Sat Nov 3 23:22:22 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: resourcevar.h,v 1.53 2011/06/03 17:58:18 rmind Exp $ */ +/* $NetBSD: resourcevar.h,v 1.54 2012/11/03 23:22:22 njoly Exp $ */ /* * Copyright (c) 1991, 1993 @@ -120,6 +120,8 @@ void pstatsfree(struct pstats *); extern rlim_t maxdmap; extern rlim_t maxsmap; +int getrusage1(struct proc *, int, struct rusage *); + #endif #endif /* !_SYS_RESOURCEVAR_H_ */