freebsd-ports/sysutils/xosview/files/patch-kernel.cc
Sergey A. Osokin 1dba9f3c91 Fix build on -CURRENT.
Also:
- replace <xxx> with <xxx.h> due to Standard C++.
- In my observation, when include "devstats.h",
- In 4.x or earlier version, we use checkversion(), getnumdevs() ...
  But In 5.x, it should be repalce with devstat_checkversion(kvm_t *),
  devstat_getnumdevs(kvm_t *) respectively.
  In summary, function in 4.x's devstats.h can add prefix word "devstat

Submitted by:		Cheng-Lung Sung <clsung@dragon2.net>
Maintainership to:	submitter
PR:			58596
2003-10-28 14:53:44 +00:00

205 lines
5.6 KiB
C++

--- bsd/kernel.cc.orig Tue Oct 9 10:40:51 2001
+++ bsd/kernel.cc Mon Oct 27 20:03:03 2003
@@ -46,6 +46,7 @@
#endif
#ifdef HAVE_DEVSTAT
+#include <sys/dkstat.h>
#include <devstat.h>
#include <stdlib.h> /* For malloc(). */
void DevStat_Init();
@@ -297,7 +298,12 @@
while (nlp && nlp->n_name) {
if ((nlp->n_type == 0) || (nlp->n_value == 0))
/*errx (-1, "kvm_nlist() lookup failed for symbol '%s'.", nlp->n_name);*/
+#if defined(XOSVIEW_FREEBSD) && defined(__alpha__)
+ /* XXX: this should be properly fixed. */
+ ;
+#else
warnx ("kvm_nlist() lookup failed for symbol '%s'.", nlp->n_name);
+#endif
nlp++;
}
#ifdef HAVE_DEVSTAT
@@ -493,7 +499,7 @@
//
void
-BSDGetSwapCtlInfo(int *totalp, int *freep) {
+BSDGetSwapCtlInfo(int64_t *totalp, int64_t *freep) {
int totalinuse, totalsize;
int rnswap, nswap = swapctl(SWAP_NSWAP, 0, 0);
struct swapent *swapiter;
@@ -557,13 +563,21 @@
* Make sure that the userland devstat version matches the kernel
* devstat version.
*/
+#if __FreeBSD_version >= 500000
+ if (devstat_checkversion(kd) < 0) {
+#else
if (checkversion() < 0) {
+#endif
nodisk++;
return;
}
/* find out how many devices we have */
+#if __FreeBSD_version >= 500000
+ if ((num_devices = devstat_getnumdevs(kd)) < 0) {
+#else
if ((num_devices = getnumdevs()) < 0) {
+#endif
nodisk++;
return;
}
@@ -578,7 +592,11 @@
* changed here, since it almost certainly has. We only look for
* errors.
*/
+#if __FreeBSD_version >= 500000
+ if (devstat_getdevs(kd,&cur) == -1) {
+#else
if (getdevs(&cur) == -1) {
+#endif
nodisk++;
return;
}
@@ -590,7 +608,11 @@
/* only interested in disks */
matches = NULL;
+#if __FreeBSD_version >= 500000
+ if (devstat_buildmatch("da", &matches, &num_matches) != 0) {
+#else
if (buildmatch("da", &matches, &num_matches) != 0) {
+#endif
nodisk++;
return;
}
@@ -605,7 +627,11 @@
* 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.
*/
+#if __FreeBSD_version >= 500000
+ if (devstat_selectdevs(&dev_select, &num_selected,
+#else
if (selectdevs(&dev_select, &num_selected,
+#endif
&num_selections, &select_generation,
generation, cur.dinfo->devices, num_devices,
matches, num_matches,
@@ -632,7 +658,11 @@
* the selection process again, in case a device that we
* were previously displaying has gone away.
*/
+#if __FreeBSD_version >= 500000
+ switch (devstat_getdevs(kd,&cur)) {
+#else
switch (getdevs(&cur)) {
+#endif
case -1:
return (0);
case 1: {
@@ -640,7 +670,11 @@
num_devices = cur.dinfo->numdevs;
generation = cur.dinfo->generation;
+#if __FreeBSD_version >= 500000
+ retval = devstat_selectdevs(&dev_select, &num_selected,
+#else
retval = selectdevs(&dev_select, &num_selected,
+#endif
&num_selections, &select_generation,
generation, cur.dinfo->devices,
num_devices, matches, num_matches,
@@ -664,14 +698,22 @@
* Calculate elapsed time up front, since it's the same for all
* devices.
*/
+#if __FreeBSD_version >= 500000
+ busy_seconds = cur.snap_time - last.snap_time;
+#else
busy_seconds = compute_etime(cur.busy_time, last.busy_time);
+#endif
/* this is the first time thru so just copy cur to last */
if (last.dinfo->numdevs == 0) {
tmp_dinfo = last.dinfo;
last.dinfo = cur.dinfo;
cur.dinfo = tmp_dinfo;
+#if __FreeBSD_version >= 500000
+ last.snap_time = cur.snap_time;
+#else
last.busy_time = cur.busy_time;
+#endif
return (0);
}
@@ -685,7 +727,11 @@
di = dev_select[dn].position;
+#if __FreeBSD_version >= 500000
+ if (devstat_compute_statistics(&cur.dinfo->devices[di],
+#else
if (compute_stats(&cur.dinfo->devices[di],
+#endif
&last.dinfo->devices[di], busy_seconds,
&total_bytes, &total_transfers,
NULL, NULL,
@@ -700,7 +746,11 @@
last.dinfo = cur.dinfo;
cur.dinfo = tmp_dinfo;
+#if __FreeBSD_version >= 500000
+ last.snap_time = cur.snap_time;
+#else
last.busy_time = cur.busy_time;
+#endif
} else {
/* no disks found ? */
@@ -828,25 +878,25 @@
OpenKDIfNeeded();
nintr = (nlst[EINTRCNT_SYM_INDEX].n_value -
nlst[INTRCNT_SYM_INDEX].n_value) / sizeof(int);
-#ifdef XOSVIEW_FREEBSD
- /* I'm not sure exactly how FreeBSD does things, but just do
+#if defined(i386)
+# if defined(XOSVIEW_FREEBSD)
+ /* I'm not sure exactly how FreeBSD/i386 does things, but just do
* 16 for now. bgrayson */
return 16;
-#else
-# if defined(i386)
+# else
/* On the 386 platform, we count stray interrupts between
* intrct and eintrcnt, also, but we don't want to show these. */
return nintr/2;
-# else
- return nintr;
# endif
+#else
+ return nintr;
#endif
}
#endif /* XOSVIEW_OPENBSD */
void
BSDGetIntrStats (unsigned long intrCount[NUM_INTR]) {
-#ifdef XOSVIEW_FREEBSD
+#if defined(XOSVIEW_FREEBSD) && defined(__i386__)
/* 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,
@@ -875,8 +925,8 @@
intrCount[i] = kvm_intrptrs[i];
#endif /* _BSDI_VERSION */
-#else /* XOSVIEW_FREEBSD */
- // NetBSD/OpenBSD version, based on vmstat.c. Note that the pc532
+#else /* XOSVIEW_FREEBSD & i386 */
+ // NetBSD/OpenBSD & FreeBSD/Alpha version, based on vmstat.c. Note that the pc532
// platform does support intrcnt and eintrcnt, but vmstat uses
// the more advanced event counters to provide software
// counts. We'll just use the intrcnt array here. If anyone