+
+dointr(nintv)
+{
+ int nintr, inttotal;
+ long *intrcnt;
+ char *intrname, *malloc();
+
+ nintr = (nl[X_EINTRCNT].n_value - nl[X_INTRCNT].n_value) / sizeof(long);
+ intrcnt = (long *) malloc(nl[X_EINTRCNT].n_value -
+ nl[X_INTRCNT].n_value);
+ intrname = malloc(nl[X_EINTRNAMES].n_value - nl[X_INTRNAMES].n_value);
+ if (intrcnt == NULL || intrname == NULL) {
+ fprintf(stderr, "vmstat: out of memory\n");
+ exit(9);
+ }
+ lseek(mf, (long)nl[X_INTRCNT].n_value, L_SET);
+ read(mf, intrcnt, nintr * sizeof (long));
+ lseek(mf, (long)nl[X_INTRNAMES].n_value, L_SET);
+ read(mf, intrname, nl[X_EINTRNAMES].n_value - nl[X_INTRNAMES].n_value);
+ printf("interrupt total rate\n");
+ inttotal = 0;
+ while (nintr--) {
+ if (*intrcnt)
+ printf("%-12s %8ld %8ld\n", intrname,
+ *intrcnt, *intrcnt / nintv);
+ intrname += strlen(intrname) + 1;
+ inttotal += *intrcnt++;
+ }
+ printf("Total %8ld %8ld\n", inttotal, inttotal / nintv);
+}
+
+#define steal(where, var) \
+ lseek(mf, where, L_SET); read(mf, &var, sizeof var);
+/*
+ * Read the drive names out of kmem.
+ */
+#ifdef vax
+#include <vaxuba/ubavar.h>
+#include <vaxmba/mbavar.h>
+
+read_names()
+{
+ struct mba_device mdev;
+ register struct mba_device *mp;
+ struct mba_driver mdrv;
+ short two_char;
+ char *cp = (char *) &two_char;
+ struct uba_device udev, *up;
+ struct uba_driver udrv;
+
+ mp = (struct mba_device *) nl[X_MBDINIT].n_value;
+ up = (struct uba_device *) nl[X_UBDINIT].n_value;
+ if (up == 0) {
+ fprintf(stderr, "vmstat: Disk init info not in namelist\n");
+ exit(1);
+ }
+ if (mp) for (;;) {
+ steal(mp++, mdev);
+ if (mdev.mi_driver == 0)
+ break;
+ if (mdev.mi_dk < 0 || mdev.mi_alive == 0)
+ continue;
+ steal(mdev.mi_driver, mdrv);
+ steal(mdrv.md_dname, two_char);
+ sprintf(dr_name[mdev.mi_dk], "%c%c%d",
+ cp[0], cp[1], mdev.mi_unit);
+ }
+ for (;;) {
+ steal(up++, udev);
+ if (udev.ui_driver == 0)
+ break;
+ if (udev.ui_dk < 0 || udev.ui_alive == 0)
+ continue;
+ steal(udev.ui_driver, udrv);
+ steal(udrv.ud_dname, two_char);
+ sprintf(dr_name[udev.ui_dk], "%c%c%d",
+ cp[0], cp[1], udev.ui_unit);
+ }
+}
+#endif
+
+#ifdef tahoe
+#include <tahoevba/vbavar.h>
+
+/*
+ * Read the drive names out of kmem.
+ */
+read_names()
+{
+ struct vba_device udev, *up;
+ struct vba_driver udrv;
+ short two_char;
+ char *cp = (char *)&two_char;
+
+ up = (struct vba_device *) nl[X_VBDINIT].n_value;
+ if (up == 0) {
+ fprintf(stderr, "vmstat: Disk init info not in namelist\n");
+ exit(1);
+ }
+ for (;;) {
+ steal(up++, udev);
+ if (udev.ui_driver == 0)
+ break;
+ if (udev.ui_dk < 0 || udev.ui_alive == 0)
+ continue;
+ steal(udev.ui_driver, udrv);
+ steal(udrv.ud_dname, two_char);
+ sprintf(dr_name[udev.ui_dk], "%c%c%d",
+ cp[0], cp[1], udev.ui_unit);
+ }
+}
+#endif