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_ */

Reply via email to