summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiod Vallat <miod@cvs.openbsd.org>2004-11-28 14:05:25 +0000
committerMiod Vallat <miod@cvs.openbsd.org>2004-11-28 14:05:25 +0000
commitb4083bdd9e35a8a9ff1611292ce4b3e9c2cce55e (patch)
tree4d988c7afa8b50f881638553d84db33011ad94b0
parent58d25f35b9ffc9852ecd68525217d077103eb8e4 (diff)
Stop looking at intrcnt[] for vmstat -i; this means vmstat -i only works
on live kernels now, though. ok deraadt@
-rw-r--r--usr.bin/vmstat/vmstat.c84
1 files changed, 8 insertions, 76 deletions
diff --git a/usr.bin/vmstat/vmstat.c b/usr.bin/vmstat/vmstat.c
index 0cc8e77d9ba..b48f1ecb6bb 100644
--- a/usr.bin/vmstat/vmstat.c
+++ b/usr.bin/vmstat/vmstat.c
@@ -1,5 +1,5 @@
/* $NetBSD: vmstat.c,v 1.29.4.1 1996/06/05 00:21:05 cgd Exp $ */
-/* $OpenBSD: vmstat.c,v 1.92 2004/11/09 23:20:18 pedro Exp $ */
+/* $OpenBSD: vmstat.c,v 1.93 2004/11/28 14:05:24 miod Exp $ */
/*
* Copyright (c) 1980, 1986, 1991, 1993
@@ -40,7 +40,7 @@ static char copyright[] =
#if 0
static char sccsid[] = "@(#)vmstat.c 8.1 (Berkeley) 6/6/93";
#else
-static const char rcsid[] = "$OpenBSD: vmstat.c,v 1.92 2004/11/09 23:20:18 pedro Exp $";
+static const char rcsid[] = "$OpenBSD: vmstat.c,v 1.93 2004/11/28 14:05:24 miod Exp $";
#endif
#endif /* not lint */
@@ -94,15 +94,7 @@ struct nlist namelist[] = {
{ "_pool_head" },
#define X_ALLEVENTS 8 /* no sysctl */
{ "_allevents" },
-#define X_INTRNAMES 9 /* no sysctl */
- { "_intrnames" },
-#define X_EINTRNAMES 10 /* no sysctl */
- { "_eintrnames" },
-#define X_INTRCNT 11 /* no sysctl */
- { "_intrcnt" },
-#define X_EINTRCNT 12 /* no sysctl */
- { "_eintrcnt" },
-#define X_END 13 /* no sysctl */
+#define X_END 9 /* no sysctl */
{ "" },
};
@@ -707,21 +699,9 @@ cpustats(void)
(void)printf("%2.0f", cur.cp_time[CP_IDLE] * pct);
}
-static void dointr_sysctl(void);
-static void dointr_kvm(void);
-
void
dointr(void)
{
- if (nlistf == NULL && memf == NULL)
- dointr_sysctl();
- else
- dointr_kvm();
-}
-
-static void
-dointr_sysctl(void)
-{
struct evcntlist allevents;
struct evcnt evcnt, *evptr;
struct device dev;
@@ -734,6 +714,11 @@ dointr_sysctl(void)
size_t siz;
int i;
+ if (nlistf != NULL || memf != NULL) {
+ errx(1,
+ "interrupt statistics are only available on live kernels");
+ }
+
uptime = getuptime();
mib[0] = CTL_KERN;
@@ -813,59 +798,6 @@ dointr_sysctl(void)
inttotal / uptime);
}
-static void
-dointr_kvm(void)
-{
- long *intrcnt;
- u_int64_t inttotal;
- time_t uptime;
- int nintr, inamlen;
- char *intrname;
- struct evcntlist allevents;
- struct evcnt evcnt, *evptr;
- struct device dev;
-
- uptime = getuptime();
- nintr = namelist[X_EINTRCNT].n_value - namelist[X_INTRCNT].n_value;
- inamlen =
- namelist[X_EINTRNAMES].n_value - namelist[X_INTRNAMES].n_value;
- intrcnt = malloc((size_t)nintr);
- intrname = malloc((size_t)inamlen);
- if (intrcnt == NULL || intrname == NULL)
- err(1, "malloc");
- kread(X_INTRCNT, intrcnt, (size_t)nintr);
- kread(X_INTRNAMES, intrname, (size_t)inamlen);
- (void)printf("%-16s %20s %8s\n", "interrupt", "total", "rate");
- inttotal = 0;
- nintr /= sizeof(long);
- while (--nintr >= 0) {
- if (*intrcnt)
- (void)printf("%-16.16s %20lu %8lu\n", intrname,
- *intrcnt, *intrcnt / uptime);
- intrname += strlen(intrname) + 1;
- inttotal += *intrcnt++;
- }
- kread(X_ALLEVENTS, &allevents, sizeof allevents);
- evptr = allevents.tqh_first;
- while (evptr) {
- if (kvm_read(kd, (long)evptr, (void *)&evcnt,
- sizeof evcnt) != sizeof evcnt)
- errx(1, "event chain trashed: %s", kvm_geterr(kd));
- if (strcmp(evcnt.ev_name, "intr") == 0) {
- if (kvm_read(kd, (long)evcnt.ev_dev, (void *)&dev,
- sizeof dev) != sizeof dev)
- errx(1, "event chain trashed: %s", kvm_geterr(kd));
- if (evcnt.ev_count)
- (void)printf("%-16.16s %20lu %8lu\n", dev.dv_xname,
- evcnt.ev_count, evcnt.ev_count / uptime);
- inttotal += evcnt.ev_count;
- }
- evptr = evcnt.ev_list.tqe_next;
- }
- (void)printf("%-16s %20llu %8llu\n", "Total", inttotal,
- inttotal / uptime);
-}
-
/*
* These names are defined in <sys/malloc.h>.
*/