diff options
author | 2005-06-08 22:33:27 +0000 | |
---|---|---|
committer | 2005-06-08 22:33:27 +0000 | |
commit | 7ab11c1e567ded15abe49980e7a4b4a7b0342ae9 (patch) | |
tree | 8f9f91fd82d7341bdc1d8d17fa90e1b48f2d7aa5 | |
parent | Fix rearranging of parameters for quad types. (diff) | |
download | wireguard-openbsd-7ab11c1e567ded15abe49980e7a4b4a7b0342ae9.tar.xz wireguard-openbsd-7ab11c1e567ded15abe49980e7a4b4a7b0342ae9.zip |
Add KERN_CPTIME2 on systems where __HAVE_CPUINFO is defined, exposes
spc_cp_time member of struct schedstate_percpu (per-cpu stats).
From art@ during the hackathon.
-rw-r--r-- | sys/kern/kern_sysctl.c | 36 | ||||
-rw-r--r-- | sys/sys/sysctl.h | 5 |
2 files changed, 38 insertions, 3 deletions
diff --git a/sys/kern/kern_sysctl.c b/sys/kern/kern_sysctl.c index f8219b49762..ac0e8d7dad5 100644 --- a/sys/kern/kern_sysctl.c +++ b/sys/kern/kern_sysctl.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kern_sysctl.c,v 1.126 2005/06/04 05:10:40 tedu Exp $ */ +/* $OpenBSD: kern_sysctl.c,v 1.127 2005/06/08 22:33:27 millert Exp $ */ /* $NetBSD: kern_sysctl.c,v 1.17 1996/05/20 17:49:05 mrg Exp $ */ /*- @@ -101,6 +101,7 @@ int sysctl_proc_args(int *, u_int, void *, size_t *, struct proc *); int sysctl_intrcnt(int *, u_int, void *, size_t *); int sysctl_sensors(int *, u_int, void *, size_t *, void *, size_t); int sysctl_emul(int *, u_int, void *, size_t *, void *, size_t); +int sysctl_cptime2(int *, u_int, void *, size_t *, void *, size_t); int (*cpu_cpuspeed)(int *); int (*cpu_setperf)(int); @@ -288,6 +289,7 @@ kern_sysctl(name, namelen, oldp, oldlenp, newp, newlen, p) #ifdef __HAVE_TIMECOUNTER case KERN_TIMECOUNTER: #endif + case KERN_CPTIME2: break; default: return (ENOTDIR); /* overloaded */ @@ -550,6 +552,11 @@ kern_sysctl(name, namelen, oldp, oldlenp, newp, newlen, p) #endif case KERN_MAXLOCKSPERUID: return (sysctl_int(oldp, oldlenp, newp, newlen, &maxlocksperuid)); +#ifdef __HAVE_CPUINFO + case KERN_CPTIME2: + return (sysctl_cptime2(name + 1, namelen -1, oldp, oldlenp, + newp, newlen)); +#endif default: return (EOPNOTSUPP); } @@ -1870,3 +1877,30 @@ sysctl_emul(int *name, u_int namelen, void *oldp, size_t *oldlenp, } #endif /* SMALL_KERNEL */ + +#ifdef __HAVE_CPUINFO +int +sysctl_cptime2(int *name, u_int namelen, void *oldp, size_t *oldlenp, + void *newp, size_t newlen) +{ + CPU_INFO_ITERATOR cii; + struct cpu_info *ci; + int i; + + if (namelen != 1) + return (ENOTDIR); + + i = name[0]; + + for (CPU_INFO_FOREACH(cii, ci)) { + if (i-- == 0) + break; + } + if (i > 0) + return (ENOENT); + + return (sysctl_rdstruct(oldp, oldlenp, newp, + &ci->ci_schedstate.spc_cp_time, + sizeof(ci->ci_schedstate.spc_cp_time))); +} +#endif diff --git a/sys/sys/sysctl.h b/sys/sys/sysctl.h index eded7e9a0d4..f6c8b5b7362 100644 --- a/sys/sys/sysctl.h +++ b/sys/sys/sysctl.h @@ -1,4 +1,4 @@ -/* $OpenBSD: sysctl.h,v 1.82 2005/03/10 17:26:10 tedu Exp $ */ +/* $OpenBSD: sysctl.h,v 1.83 2005/06/08 22:33:27 millert Exp $ */ /* $NetBSD: sysctl.h,v 1.16 1996/04/09 20:55:36 cgd Exp $ */ /* @@ -183,7 +183,8 @@ struct ctlname { #define KERN_EVCOUNT 68 /* node: event counters */ #define KERN_TIMECOUNTER 69 /* node: timecounter */ #define KERN_MAXLOCKSPERUID 70 /* int: locks per uid */ -#define KERN_MAXID 71 /* number of valid kern ids */ +#define KERN_CPTIME2 71 /* array: cp_time2 */ +#define KERN_MAXID 72 /* number of valid kern ids */ #define CTL_KERN_NAMES { \ { 0, 0 }, \ |