$NetBSD: patch-ae,v 1.8 2001/07/17 11:02:02 wiz Exp $ --- sysdeps/freebsd/cpu.c.orig Sun Feb 13 16:47:58 2000 +++ sysdeps/freebsd/cpu.c @@ -27,11 +27,16 @@ #include +#ifdef __NetBSD__ +#include +#endif + static const unsigned long _glibtop_sysdeps_cpu = (1L << GLIBTOP_CPU_TOTAL) + (1L << GLIBTOP_CPU_USER) + (1L << GLIBTOP_CPU_NICE) + (1L << GLIBTOP_CPU_SYS) + (1L << GLIBTOP_CPU_IDLE) + (1L << GLIBTOP_CPU_FREQUENCY); +#ifndef KERN_CP_TIME /* nlist structure for kernel access */ static struct nlist nlst [] = { #ifdef __bsdi__ @@ -41,21 +46,27 @@ #endif { 0 } }; +#endif /* MIB array for sysctl */ static int mib_length=2; static int mib [] = { CTL_KERN, KERN_CLOCKRATE }; +#ifdef KERN_CP_TIME +static int mib2 [] = { CTL_KERN, KERN_CP_TIME }; +#endif /* Init function. */ void glibtop_init_cpu_p (glibtop *server) { +#ifndef KERN_CP_TIME if (kvm_nlist (server->machine.kd, nlst) < 0) { glibtop_warn_io_r (server, "kvm_nlist (cpu)"); return; } +#endif /* Set this only if kvm_nlist () succeeded. */ server->sysdeps.cpu = _glibtop_sysdeps_cpu; } @@ -65,7 +76,11 @@ void glibtop_get_cpu_p (glibtop *server, glibtop_cpu *buf) { +#ifdef KERN_CP_TIME + u_int64_t cpts [CPUSTATES]; +#else long cpts [CPUSTATES]; +#endif /* sysctl vars*/ struct clockinfo ci; size_t length; @@ -78,11 +93,19 @@ if (server->sysdeps.cpu == 0) return; +#ifdef KERN_CP_TIME + length = sizeof (cpts); + if (sysctl (mib2, mib_length, cpts, &length, NULL, 0)) { + glibtop_warn_io_r (server, "sysctl"); + return; + } +#else if (kvm_read (server->machine.kd, nlst [0].n_value, &cpts, sizeof (cpts)) != sizeof (cpts)) { glibtop_warn_io_r (server, "kvm_read (cp_time)"); return; } +#endif /* Get the clockrate data */ length = sizeof (struct clockinfo);