ab363a2a5d
(source comment is misleading in this case)
81 lines
1.8 KiB
Text
81 lines
1.8 KiB
Text
$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 <glibtop_suid.h>
|
|
|
|
+#ifdef __NetBSD__
|
|
+#include <sys/sched.h>
|
|
+#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);
|