If the user passes enough space, output the per cpu states instead of
aggregating them.
This commit is contained in:
parent
72eafe083f
commit
1f6ab188f9
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: kern_sysctl.c,v 1.148 2003/10/02 09:30:16 kleink Exp $ */
|
/* $NetBSD: kern_sysctl.c,v 1.149 2003/10/03 15:33:42 christos Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1982, 1986, 1989, 1993
|
* Copyright (c) 1982, 1986, 1989, 1993
|
||||||
|
@ -39,7 +39,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
__KERNEL_RCSID(0, "$NetBSD: kern_sysctl.c,v 1.148 2003/10/02 09:30:16 kleink Exp $");
|
__KERNEL_RCSID(0, "$NetBSD: kern_sysctl.c,v 1.149 2003/10/03 15:33:42 christos Exp $");
|
||||||
|
|
||||||
#include "opt_ddb.h"
|
#include "opt_ddb.h"
|
||||||
#include "opt_insecure.h"
|
#include "opt_insecure.h"
|
||||||
|
@ -295,19 +295,36 @@ static int
|
||||||
sysctl_docptime(void *oldp, size_t *oldlenp, void *newp)
|
sysctl_docptime(void *oldp, size_t *oldlenp, void *newp)
|
||||||
{
|
{
|
||||||
u_int64_t cp_time[CPUSTATES];
|
u_int64_t cp_time[CPUSTATES];
|
||||||
int i;
|
|
||||||
struct cpu_info *ci;
|
struct cpu_info *ci;
|
||||||
CPU_INFO_ITERATOR cii;
|
CPU_INFO_ITERATOR cii;
|
||||||
|
int ncpus = sysctl_ncpus();
|
||||||
|
|
||||||
for (i = 0; i < CPUSTATES; i++)
|
if (*oldlenp == sizeof(cp_time)) {
|
||||||
cp_time[i] = 0;
|
size_t i;
|
||||||
|
|
||||||
for (CPU_INFO_FOREACH(cii, ci)) {
|
|
||||||
for (i = 0; i < CPUSTATES; i++)
|
for (i = 0; i < CPUSTATES; i++)
|
||||||
cp_time[i] += ci->ci_schedstate.spc_cp_time[i];
|
cp_time[i] = 0;
|
||||||
}
|
|
||||||
return (sysctl_rdstruct(oldp, oldlenp, newp,
|
for (CPU_INFO_FOREACH(cii, ci)) {
|
||||||
cp_time, sizeof(cp_time)));
|
for (i = 0; i < CPUSTATES; i++)
|
||||||
|
cp_time[i] += ci->ci_schedstate.spc_cp_time[i];
|
||||||
|
}
|
||||||
|
return sysctl_rdstruct(oldp, oldlenp, newp,
|
||||||
|
cp_time, sizeof(cp_time));
|
||||||
|
} else if (*oldlenp == sizeof(cp_time) * ncpus) {
|
||||||
|
int error;
|
||||||
|
|
||||||
|
for (CPU_INFO_FOREACH(cii, ci)) {
|
||||||
|
if ((error = sysctl_rdstruct(oldp, oldlenp, newp,
|
||||||
|
ci->ci_schedstate.spc_cp_time,
|
||||||
|
sizeof(ci->ci_schedstate.spc_cp_time))) != 0)
|
||||||
|
return error;
|
||||||
|
oldp = ((char *)oldp) + sizeof(cp_time);
|
||||||
|
}
|
||||||
|
*oldlenp = ncpus * sizeof(cp_time);
|
||||||
|
return 0;
|
||||||
|
} else
|
||||||
|
return EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
|
Loading…
Reference in New Issue