=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/vmstat/vmstat.c,v retrieving revision 1.92 retrieving revision 1.93 diff -c -r1.92 -r1.93 *** src/usr.bin/vmstat/vmstat.c 2004/11/09 23:20:18 1.92 --- src/usr.bin/vmstat/vmstat.c 2004/11/28 14:05:24 1.93 *************** *** 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 $ */ /* * Copyright (c) 1980, 1986, 1991, 1993 --- 1,5 ---- /* $NetBSD: vmstat.c,v 1.29.4.1 1996/06/05 00:21:05 cgd Exp $ */ ! /* $OpenBSD: vmstat.c,v 1.93 2004/11/28 14:05:24 miod Exp $ */ /* * Copyright (c) 1980, 1986, 1991, 1993 *************** *** 40,46 **** #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 $"; #endif #endif /* not lint */ --- 40,46 ---- #if 0 static char sccsid[] = "@(#)vmstat.c 8.1 (Berkeley) 6/6/93"; #else ! static const char rcsid[] = "$OpenBSD: vmstat.c,v 1.93 2004/11/28 14:05:24 miod Exp $"; #endif #endif /* not lint */ *************** *** 94,108 **** { "_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 */ { "" }, }; --- 94,100 ---- { "_pool_head" }, #define X_ALLEVENTS 8 /* no sysctl */ { "_allevents" }, ! #define X_END 9 /* no sysctl */ { "" }, }; *************** *** 707,727 **** (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; --- 699,707 ---- *************** *** 734,739 **** --- 714,724 ---- 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; *************** *** 804,862 **** if (evcnt.ev_count) (void)printf("%-16.16s %20llu %8llu\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); - } - - 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; } --- 789,794 ----