aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sysutils/xosview/Makefile2
-rw-r--r--sysutils/xosview/files/patch-kernel.cc107
2 files changed, 91 insertions, 18 deletions
diff --git a/sysutils/xosview/Makefile b/sysutils/xosview/Makefile
index 019a310abf5a..77f29563702a 100644
--- a/sysutils/xosview/Makefile
+++ b/sysutils/xosview/Makefile
@@ -8,7 +8,7 @@
PORTNAME= xosview
PORTVERSION= 1.8.3
-PORTREVISION= 2
+PORTREVISION= 3
CATEGORIES= sysutils
MASTER_SITES= SF
diff --git a/sysutils/xosview/files/patch-kernel.cc b/sysutils/xosview/files/patch-kernel.cc
index 9a4ac74e9207..2185efa589e4 100644
--- a/sysutils/xosview/files/patch-kernel.cc
+++ b/sysutils/xosview/files/patch-kernel.cc
@@ -1,5 +1,5 @@
---- bsd/kernel.cc.orig Tue Oct 14 09:53:17 2003
-+++ bsd/kernel.cc Fri Jan 27 16:02:27 2006
+--- bsd/kernel.cc.orig 2006-02-18 08:36:06.000000000 +0100
++++ bsd/kernel.cc 2008-12-15 15:46:05.000000000 +0100
@@ -54,6 +54,7 @@
#endif
@@ -8,7 +8,27 @@
#include <devstat.h>
#include <stdlib.h> /* For malloc(). */
void DevStat_Init();
-@@ -211,19 +212,28 @@
+@@ -83,6 +84,10 @@
+ #else
+ #include <sys/dkstat.h>
+ #endif
++#if defined(XOSVIEW_FREEBSD) && (__FreeBSD_version >= 700000)
++#include <sys/resource.h>
++#include <sys/sysctl.h>
++#endif
+
+ #ifdef HAVE_SWAPCTL
+ #include <unistd.h> /* For swapctl proto. */
+@@ -135,7 +140,7 @@
+ // this later on. This keeps the indices within the nlist constant.
+ #define DUMMY_SYM "dummy_sym"
+
+-#if defined(XOSVIEW_BSDI) || (defined(XOSVIEW_NETBSD) && (__NetBSD_Version__ >= 104260000))
++#if defined(XOSVIEW_BSDI) || (defined(XOSVIEW_NETBSD) && (__NetBSD_Version__ >= 104260000)) || (defined(XOSVIEW_FREEBSD) && (__FreeBSD_version >= 700000))
+ // BSDI and __NetBSD_Version__ >= 104260000 reads cp_time through sysctl
+ { DUMMY_SYM },
+ #define DUMMY_0
+@@ -211,19 +216,28 @@
{ "_bufspace" },
#define BUFSPACE_SYM_INDEX 3
@@ -41,7 +61,7 @@
#endif /*HAVE_DEVSTAT */
-@@ -329,7 +339,12 @@
+@@ -329,7 +343,12 @@
while (nlp && nlp->n_name && strncmp(nlp->n_name, DUMMY_SYM, strlen(DUMMY_SYM))) {
if ((nlp->n_type == 0) || (nlp->n_value == 0))
/*errx (-1, "kvm_nlist() lookup failed for symbol '%s'.", nlp->n_name);*/
@@ -54,7 +74,45 @@
nlp++;
}
#ifdef HAVE_DEVSTAT
-@@ -597,13 +612,21 @@
+@@ -402,11 +421,17 @@
+ #if defined(XOSVIEW_NETBSD) && (__NetBSD_Version__ >= 104260000)
+ static int mib[] = { CTL_KERN, KERN_CP_TIME };
+ #endif
++#if defined(XOSVIEW_FREEBSD) && (__FreeBSD_version >= 700000)
++
++ long cpu[CPUSTATES];
++ size_t size = sizeof(cpu);
++
++#endif
+
+ if (!timeArray) errx (-1, "BSDGetCPUTimes(): passed pointer was null!\n");
+ if (CPUSTATES != 5)
+ errx (-1, "Error: xosview for *BSD expects 5 cpu states!\n");
+-#if defined(__NetBSD_Version__) && __NetBSD_Version__ > 104260000 /* > 1.4Z */
++#if (defined(__NetBSD_Version__) && __NetBSD_Version__ > 104260000) /* > 1.4Z */
+ struct schedstate_percpu ssp;
+ size_t size = sizeof(ssp.spc_cp_time);
+ if (sysctl(mib, 2, ssp.spc_cp_time, &size, NULL, 0) < 0) {
+@@ -423,9 +448,18 @@
+ }
+ bcopy (cpu.cp_time,timeArray,sizeof (long) * CPUSTATES);
+ #else
++#if defined(XOSVIEW_FREEBSD) && (__FreeBSD_version >= 700000)
++
++ if (sysctlbyname("kern.cp_time", &cpu, &size, NULL, 0) < 0) {
++ fprintf(stderr, "xosview: sysctl failed: %s\n", strerror(errno));
++ bzero(&cpu, sizeof(cpu));
++ }
++ bcopy (cpu,timeArray,sizeof (long) * CPUSTATES);
++#else
+ safe_kvm_read_symbol (CP_TIME_SYM_INDEX, timeArray, sizeof (long) * CPUSTATES);
+ #endif
+ #endif
++#endif
+ }
+
+
+@@ -597,13 +631,21 @@
* Make sure that the userland devstat version matches the kernel
* devstat version.
*/
@@ -76,7 +134,7 @@
nodisk++;
return;
}
-@@ -618,7 +641,11 @@
+@@ -618,7 +660,11 @@
* changed here, since it almost certainly has. We only look for
* errors.
*/
@@ -88,7 +146,7 @@
nodisk++;
return;
}
-@@ -630,7 +657,11 @@
+@@ -630,7 +676,11 @@
/* only interested in disks */
matches = NULL;
@@ -100,7 +158,7 @@
nodisk++;
return;
}
-@@ -645,7 +676,11 @@
+@@ -645,13 +695,18 @@
* device list has changed, so we don't look for return values of 0
* or 1. If we get back -1, though, there is an error.
*/
@@ -112,7 +170,14 @@
&num_selections, &select_generation,
generation, cur.dinfo->devices, num_devices,
matches, num_matches,
-@@ -672,7 +707,11 @@
+ NULL, 0,
+ select_mode, 10, 0) == -1)
+ nodisk++;
++
+ }
+
+ int
+@@ -672,7 +727,11 @@
* the selection process again, in case a device that we
* were previously displaying has gone away.
*/
@@ -124,7 +189,7 @@
case -1:
return (0);
case 1: {
-@@ -680,7 +719,11 @@
+@@ -680,7 +739,11 @@
num_devices = cur.dinfo->numdevs;
generation = cur.dinfo->generation;
@@ -136,7 +201,7 @@
&num_selections, &select_generation,
generation, cur.dinfo->devices,
num_devices, matches, num_matches,
-@@ -704,14 +747,22 @@
+@@ -704,14 +767,22 @@
* Calculate elapsed time up front, since it's the same for all
* devices.
*/
@@ -159,7 +224,7 @@
return (0);
}
-@@ -725,7 +776,11 @@
+@@ -725,12 +796,15 @@
di = dev_select[dn].position;
@@ -169,9 +234,17 @@
if (compute_stats(&cur.dinfo->devices[di],
+#endif
&last.dinfo->devices[di], busy_seconds,
- &total_bytes, &total_transfers,
- NULL, NULL,
-@@ -740,7 +795,11 @@
+- &total_bytes, &total_transfers,
+- NULL, NULL,
+- NULL, NULL,
+- NULL, NULL)!= 0)
++ DSM_TOTAL_BYTES, &total_bytes,
++ DSM_TOTAL_TRANSFERS, &total_transfers,
++ DSM_NONE)!= 0)
+ break;
+ total_xfers += (int)total_transfers;
+ total_xbytes += (int)total_bytes;
+@@ -740,7 +814,11 @@
last.dinfo = cur.dinfo;
cur.dinfo = tmp_dinfo;
@@ -183,7 +256,7 @@
} else {
/* no disks found ? */
-@@ -912,25 +971,26 @@
+@@ -912,25 +990,26 @@
OpenKDIfNeeded();
nintr = (nlst[EINTRCNT_SYM_INDEX].n_value -
nlst[INTRCNT_SYM_INDEX].n_value) / sizeof(int);
@@ -217,7 +290,7 @@
/* FreeBSD has an array of interrupt counts, indexed by device number.
These are also indirected by IRQ num with intr_countp: */
safe_kvm_read (nlst[INTRCOUNTP_SYM_INDEX].n_value,
-@@ -944,6 +1004,46 @@
+@@ -944,6 +1023,46 @@
sizeof(unsigned long);
intrCount[i] = kvm_intrcnt[idx];
}