diff options
author | stefan <stefan@FreeBSD.org> | 2009-01-09 01:06:27 +0800 |
---|---|---|
committer | stefan <stefan@FreeBSD.org> | 2009-01-09 01:06:27 +0800 |
commit | 2aee7e5ccf5d917f0dfa42e2550e05586212bd5f (patch) | |
tree | 77a719539d452750ef43050c09bb38cfdce92af1 /sysutils/xosview | |
parent | e793e1f16b0cca9ee4f00e458548b442081da3cc (diff) | |
download | freebsd-ports-gnome-2aee7e5ccf5d917f0dfa42e2550e05586212bd5f.tar.gz freebsd-ports-gnome-2aee7e5ccf5d917f0dfa42e2550e05586212bd5f.tar.zst freebsd-ports-gnome-2aee7e5ccf5d917f0dfa42e2550e05586212bd5f.zip |
Fix CPU-meter for FreeBSD versions >= 7.0.
PR: 129655
Submitted by: Udo Schweigert <udo.schweigert@siemens.com>
Approved by: maintainer timeout (3 weeks)
Diffstat (limited to 'sysutils/xosview')
-rw-r--r-- | sysutils/xosview/Makefile | 2 | ||||
-rw-r--r-- | sysutils/xosview/files/patch-kernel.cc | 107 |
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]; } |