From 75a741484e10d98658968b80328d1e003e191599 Mon Sep 17 00:00:00 2001 From: Jasper Lievisse Adriaanse Date: Fri, 27 Apr 2012 17:32:46 +0200 Subject: [PATCH] Fix CPU usage on OpenBSD. Currently only takes the first cpu into account, but works fine otherwise. --- src/print_cpu_usage.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/print_cpu_usage.c b/src/print_cpu_usage.c index 7fdd11c..7113eae 100644 --- a/src/print_cpu_usage.c +++ b/src/print_cpu_usage.c @@ -6,7 +6,8 @@ #include #include -#ifdef __FreeBSD__ +#if defined(__FreeBSD__) || defined(__OpenBSD__) +#include #include #include #include @@ -42,12 +43,26 @@ void print_cpu_usage(yajl_gen json_gen, char *buffer, const char *format) { diff_usage = (1000 * (diff_total - diff_idle)/diff_total + 5)/10; prev_total = curr_total; prev_idle = curr_idle; -#elif defined(__FreeBSD__) +#elif defined(__FreeBSD__) || defined(__OpenBSD__) + +#if defined(__FreeBSD__) size_t size; long cp_time[CPUSTATES]; size = sizeof cp_time; if (sysctlbyname("kern.cp_time", &cp_time, &size, NULL, 0) < 0) goto error; +#else + /* This information is taken from the boot cpu, any other cpus are currently ignored. */ + long cp_time[CPUSTATES]; + int mib[2]; + size_t size = sizeof(cp_time); + + mib[0] = CTL_KERN; + mib[1] = KERN_CPTIME; + + if (sysctl(mib, 2, cp_time, &size, NULL, 0)) + goto error; +#endif curr_user = cp_time[CP_USER]; curr_nice = cp_time[CP_NICE]; -- 2.39.2