$NetBSD: patch-ac,v 1.8 2006/09/19 22:25:48 joerg Exp $ --- src/stats-bsd.c.orig 2001-06-16 19:12:53.000000000 +0000 +++ src/stats-bsd.c @@ -10,6 +10,7 @@ #include "stats.h" /* System includes */ +#include #include #include #include @@ -17,10 +18,16 @@ #include #include #include -#include +#if defined(__DragonFly__) +#include +#else #include +#endif #include #include +#if defined(__NetBSD__) && __NetBSD_Version__ >= 104000000 +#include +#endif /** * @desc Get statistics @@ -75,6 +82,35 @@ void getstats(unsigned long *puptime, do } if(cfg_sendidle) { +#if defined(__DragonFly__) + static int first_time = 1; + static struct kinfo_cputime scp; + struct kinfo_cputime cp; + + if (first_time) { + first_time = 0; + if (kinfo_get_sched_cputime(&scp)) + warn("kinfo_get_sched_cputime"); + else + sleep(1); /* to avoid the initial 0 idle value */ + } + if (kinfo_get_sched_cputime(&cp)) + warn("kinfo_get_sched_cputime"); + else { + double time = 0.0; + time += cp.cp_user - scp.cp_user; + time += cp.cp_nice - scp.cp_nice; + time += cp.cp_sys - scp.cp_sys; + time += cp.cp_intr - scp.cp_intr; + time += cp.cp_idle - scp.cp_idle; + + if (time == 0.0) + time = 1.0; + + *pidle = (cp.cp_idle - scp.cp_idle) * 100.0 / time; + scp = cp; + } +#else static kvm_t *kp; static int initialized = 0; static struct nlist namelist [] = { @@ -131,5 +167,6 @@ void getstats(unsigned long *puptime, do } else { cfg_sendidle = 0; } +#endif } }