$NetBSD: patch-ae,v 1.7 2000/06/30 03:13:37 wiz Exp $ --- sysdeps/freebsd/cpu.c.orig Sun Feb 13 16:47:58 2000 +++ sysdeps/freebsd/cpu.c Thu Jun 29 00:01:11 2000 @@ -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,16 +46,21 @@ #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; @@ -58,6 +68,7 @@ /* Set this only if kvm_nlist () succeeded. */ server->sysdeps.cpu = _glibtop_sysdeps_cpu; +#endif } /* Provides information about cpu usage. */ @@ -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);