4.4BSD snapshot (revision 8.1)
[unix-history] / usr / src / usr.bin / vmstat.sparc / intr.c
CommitLineData
daaae749
CT
1/*
2 * Copyright (c) 1993 The Regents of the University of California.
3 * All rights reserved.
4 *
5 * %sccs.include.redist.c%
6 */
7
8#ifndef lint
9static char sccsid[] = "@(#)intr.c 5.1 (Berkeley) %G%";
10#endif /* not lint */
11
12#include <sys/types.h>
13
14#include <errno.h>
15#include <kvm.h>
16#include <nlist.h>
17#include <stdio.h>
18#include <stdlib.h>
19#include <string.h>
20
21#include "extern.h"
22
23static struct nlist nl[] = {
24 { "_intrcnt" },
25#define X_INTRCNT 0
26 { "_eintrcnt" },
27#define X_EINTRCNT 1
28 { "_intrnames" },
29#define X_INTRNAMES 2
30 { "_eintrnames" },
31#define X_EINTRNAMES 3
32 0
33};
34
35void
36dointr()
37{
38 register long *intrcnt, inttotal, uptime;
39 register int nintr, inamlen;
40 register char *intrname;
41
42 knlist(nl);
43 uptime = getuptime();
44 nintr = nl[X_EINTRCNT].n_value - nl[X_INTRCNT].n_value;
45 inamlen = nl[X_EINTRNAMES].n_value - nl[X_INTRNAMES].n_value;
46 intrcnt = malloc((size_t)nintr);
47 intrname = malloc((size_t)inamlen);
48 if (intrcnt == NULL || intrname == NULL)
49 errexit("malloc: %s\n", strerror(errno));
50 kread(nl[X_INTRCNT].n_value, intrcnt, nintr, "intrcnt");
51 kread(nl[X_INTRNAMES].n_value, intrname, inamlen, "intrnames");
52 (void)printf("interrupt total rate\n");
53 inttotal = 0;
54 nintr /= sizeof(long);
55 while (--nintr >= 0) {
56 if (*intrcnt)
57 (void)printf("%-12s %8ld %8ld\n", intrname,
58 *intrcnt, *intrcnt / uptime);
59 intrname += strlen(intrname) + 1;
60 inttotal += *intrcnt++;
61 }
62 (void)printf("Total %8ld %8ld\n", inttotal, inttotal / uptime);
63}