summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormillert <millert@openbsd.org>2005-06-08 22:33:27 +0000
committermillert <millert@openbsd.org>2005-06-08 22:33:27 +0000
commit7ab11c1e567ded15abe49980e7a4b4a7b0342ae9 (patch)
tree8f9f91fd82d7341bdc1d8d17fa90e1b48f2d7aa5
parentFix rearranging of parameters for quad types. (diff)
downloadwireguard-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.c36
-rw-r--r--sys/sys/sysctl.h5
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 }, \