mirror of
https://git.freebsd.org/ports.git
synced 2025-07-17 17:29:23 -04:00
Fix CPU-meter for FreeBSD versions >= 7.0.
PR: 129655 Submitted by: Udo Schweigert <udo.schweigert@siemens.com> Approved by: maintainer timeout (3 weeks)
This commit is contained in:
parent
60f18a21ee
commit
e54643a6b0
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=225492
2 changed files with 91 additions and 18 deletions
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
PORTNAME= xosview
|
PORTNAME= xosview
|
||||||
PORTVERSION= 1.8.3
|
PORTVERSION= 1.8.3
|
||||||
PORTREVISION= 2
|
PORTREVISION= 3
|
||||||
CATEGORIES= sysutils
|
CATEGORIES= sysutils
|
||||||
MASTER_SITES= SF
|
MASTER_SITES= SF
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
--- bsd/kernel.cc.orig Tue Oct 14 09:53:17 2003
|
--- bsd/kernel.cc.orig 2006-02-18 08:36:06.000000000 +0100
|
||||||
+++ bsd/kernel.cc Fri Jan 27 16:02:27 2006
|
+++ bsd/kernel.cc 2008-12-15 15:46:05.000000000 +0100
|
||||||
@@ -54,6 +54,7 @@
|
@@ -54,6 +54,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -8,7 +8,27 @@
|
||||||
#include <devstat.h>
|
#include <devstat.h>
|
||||||
#include <stdlib.h> /* For malloc(). */
|
#include <stdlib.h> /* For malloc(). */
|
||||||
void DevStat_Init();
|
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" },
|
{ "_bufspace" },
|
||||||
#define BUFSPACE_SYM_INDEX 3
|
#define BUFSPACE_SYM_INDEX 3
|
||||||
|
@ -41,7 +61,7 @@
|
||||||
|
|
||||||
#endif /*HAVE_DEVSTAT */
|
#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))) {
|
while (nlp && nlp->n_name && strncmp(nlp->n_name, DUMMY_SYM, strlen(DUMMY_SYM))) {
|
||||||
if ((nlp->n_type == 0) || (nlp->n_value == 0))
|
if ((nlp->n_type == 0) || (nlp->n_value == 0))
|
||||||
/*errx (-1, "kvm_nlist() lookup failed for symbol '%s'.", nlp->n_name);*/
|
/*errx (-1, "kvm_nlist() lookup failed for symbol '%s'.", nlp->n_name);*/
|
||||||
|
@ -54,7 +74,45 @@
|
||||||
nlp++;
|
nlp++;
|
||||||
}
|
}
|
||||||
#ifdef HAVE_DEVSTAT
|
#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
|
* Make sure that the userland devstat version matches the kernel
|
||||||
* devstat version.
|
* devstat version.
|
||||||
*/
|
*/
|
||||||
|
@ -76,7 +134,7 @@
|
||||||
nodisk++;
|
nodisk++;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -618,7 +641,11 @@
|
@@ -618,7 +660,11 @@
|
||||||
* changed here, since it almost certainly has. We only look for
|
* changed here, since it almost certainly has. We only look for
|
||||||
* errors.
|
* errors.
|
||||||
*/
|
*/
|
||||||
|
@ -88,7 +146,7 @@
|
||||||
nodisk++;
|
nodisk++;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -630,7 +657,11 @@
|
@@ -630,7 +676,11 @@
|
||||||
|
|
||||||
/* only interested in disks */
|
/* only interested in disks */
|
||||||
matches = NULL;
|
matches = NULL;
|
||||||
|
@ -100,7 +158,7 @@
|
||||||
nodisk++;
|
nodisk++;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -645,7 +676,11 @@
|
@@ -645,13 +695,18 @@
|
||||||
* device list has changed, so we don't look for return values of 0
|
* 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.
|
* or 1. If we get back -1, though, there is an error.
|
||||||
*/
|
*/
|
||||||
|
@ -112,7 +170,14 @@
|
||||||
&num_selections, &select_generation,
|
&num_selections, &select_generation,
|
||||||
generation, cur.dinfo->devices, num_devices,
|
generation, cur.dinfo->devices, num_devices,
|
||||||
matches, num_matches,
|
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
|
* the selection process again, in case a device that we
|
||||||
* were previously displaying has gone away.
|
* were previously displaying has gone away.
|
||||||
*/
|
*/
|
||||||
|
@ -124,7 +189,7 @@
|
||||||
case -1:
|
case -1:
|
||||||
return (0);
|
return (0);
|
||||||
case 1: {
|
case 1: {
|
||||||
@@ -680,7 +719,11 @@
|
@@ -680,7 +739,11 @@
|
||||||
|
|
||||||
num_devices = cur.dinfo->numdevs;
|
num_devices = cur.dinfo->numdevs;
|
||||||
generation = cur.dinfo->generation;
|
generation = cur.dinfo->generation;
|
||||||
|
@ -136,7 +201,7 @@
|
||||||
&num_selections, &select_generation,
|
&num_selections, &select_generation,
|
||||||
generation, cur.dinfo->devices,
|
generation, cur.dinfo->devices,
|
||||||
num_devices, matches, num_matches,
|
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
|
* Calculate elapsed time up front, since it's the same for all
|
||||||
* devices.
|
* devices.
|
||||||
*/
|
*/
|
||||||
|
@ -159,7 +224,7 @@
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -725,7 +776,11 @@
|
@@ -725,12 +796,15 @@
|
||||||
|
|
||||||
di = dev_select[dn].position;
|
di = dev_select[dn].position;
|
||||||
|
|
||||||
|
@ -169,9 +234,17 @@
|
||||||
if (compute_stats(&cur.dinfo->devices[di],
|
if (compute_stats(&cur.dinfo->devices[di],
|
||||||
+#endif
|
+#endif
|
||||||
&last.dinfo->devices[di], busy_seconds,
|
&last.dinfo->devices[di], busy_seconds,
|
||||||
&total_bytes, &total_transfers,
|
- &total_bytes, &total_transfers,
|
||||||
NULL, NULL,
|
- NULL, NULL,
|
||||||
@@ -740,7 +795,11 @@
|
- 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;
|
last.dinfo = cur.dinfo;
|
||||||
cur.dinfo = tmp_dinfo;
|
cur.dinfo = tmp_dinfo;
|
||||||
|
|
||||||
|
@ -183,7 +256,7 @@
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
/* no disks found ? */
|
/* no disks found ? */
|
||||||
@@ -912,25 +971,26 @@
|
@@ -912,25 +990,26 @@
|
||||||
OpenKDIfNeeded();
|
OpenKDIfNeeded();
|
||||||
nintr = (nlst[EINTRCNT_SYM_INDEX].n_value -
|
nintr = (nlst[EINTRCNT_SYM_INDEX].n_value -
|
||||||
nlst[INTRCNT_SYM_INDEX].n_value) / sizeof(int);
|
nlst[INTRCNT_SYM_INDEX].n_value) / sizeof(int);
|
||||||
|
@ -217,7 +290,7 @@
|
||||||
/* FreeBSD has an array of interrupt counts, indexed by device number.
|
/* FreeBSD has an array of interrupt counts, indexed by device number.
|
||||||
These are also indirected by IRQ num with intr_countp: */
|
These are also indirected by IRQ num with intr_countp: */
|
||||||
safe_kvm_read (nlst[INTRCOUNTP_SYM_INDEX].n_value,
|
safe_kvm_read (nlst[INTRCOUNTP_SYM_INDEX].n_value,
|
||||||
@@ -944,6 +1004,46 @@
|
@@ -944,6 +1023,46 @@
|
||||||
sizeof(unsigned long);
|
sizeof(unsigned long);
|
||||||
intrCount[i] = kvm_intrcnt[idx];
|
intrCount[i] = kvm_intrcnt[idx];
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue