summaryrefslogtreecommitdiff
path: root/sysutils/libgtop/patches/patch-ae
blob: 70f950f368dd082f412a47a3b45a2958888d58c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
$NetBSD: patch-ae,v 1.3 2004/04/02 12:13:57 jmmv 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);