Move rusage computation to a new getrusage1() function. Adjust all
compat/emulations to make use of it.
This commit is contained in:
parent
ff84366ca6
commit
1ebbf7b605
|
@ -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;
|
||||
error = getrusage1(p, SCARG(uap, who), &ru);
|
||||
if (error != 0)
|
||||
return error;
|
||||
|
||||
case RUSAGE_CHILDREN:
|
||||
mutex_enter(p->p_lock);
|
||||
memcpy(&ru, &p->p_stats->p_cru, sizeof(ru));
|
||||
mutex_exit(p->p_lock);
|
||||
break;
|
||||
|
||||
default:
|
||||
return EINVAL;
|
||||
}
|
||||
rusage_to_rusage50(&ru, &ru50);
|
||||
return copyout(&ru50, SCARG(uap, rusage), sizeof(ru50));
|
||||
}
|
||||
|
|
|
@ -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 *l, const struct compat_50_netbsd32_getr
|
|||
syscallarg(int) who;
|
||||
syscallarg(netbsd32_rusage50p_t) rusage;
|
||||
} */
|
||||
int error;
|
||||
struct proc *p = l->l_proc;
|
||||
struct rusage *rup;
|
||||
struct netbsd32_rusage50 ru;
|
||||
struct rusage ru;
|
||||
struct netbsd32_rusage50 ru32;
|
||||
|
||||
switch (SCARG(uap, who)) {
|
||||
error = getrusage1(p, SCARG(uap, who), &ru);
|
||||
if (error != 0)
|
||||
return error;
|
||||
|
||||
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;
|
||||
|
||||
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
|
||||
|
|
|
@ -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;
|
||||
struct rusage ru;
|
||||
struct netbsd32_rusage ru32;
|
||||
|
||||
switch (SCARG(uap, who)) {
|
||||
error = getrusage1(p, SCARG(uap, who), &ru);
|
||||
if (error != 0)
|
||||
return error;
|
||||
|
||||
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;
|
||||
|
||||
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));
|
||||
}
|
||||
|
|
|
@ -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 struct osf1_sys_getrlimit_args *uap, reg
|
|||
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 struct osf1_sys_getrusage_args *uap, reg
|
|||
|
||||
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);
|
||||
|
|
|
@ -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 struct sys___getrusage50_args *uap,
|
|||
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
|
||||
|
|
|
@ -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_ */
|
||||
|
|
Loading…
Reference in New Issue