Date: Fri, 27 Nov 1998 20:45:17 +0900 From: Hidetoshi Shimokawa <simokawa@sat.t.u-tokyo.ac.jp> To: freebsd-alpha@FreeBSD.ORG Subject: vmstat -i Message-ID: <19981127204517A.simokawa@sat.t.u-tokyo.ac.jp>
index | next in thread | raw e-mail
Hi,
Here is a patch to make vmstat -i work correctly.
It needs NetBSD's src/sys/arch/alpha/include/intrcnt.h
in addtion. I don't know whether INTRCNT_EB164_IRQ is
a good choice for cia.
/\ Hidetoshi Shimokawa
\/ simokawa@sat.t.u-tokyo.ac.jp
PGP public key: finger -l simokawa@sat.t.u-tokyo.ac.jp
Index: alpha/interrupt.c
===================================================================
RCS file: /pub/FreeBSD-CVS/src/sys/alpha/alpha/interrupt.c,v
retrieving revision 1.7
diff -c -r1.7 interrupt.c
*** interrupt.c 1998/11/18 23:51:40 1.7
--- interrupt.c 1998/11/25 12:33:18
***************
*** 50,63 ****
#include <machine/bwx.h>
#include <machine/intr.h>
- #if 0
#ifdef EVCNT_COUNTERS
#include <sys/device.h>
struct evcnt clock_intr_evcnt; /* event counter for clock intrs. */
#else
#include <machine/intrcnt.h>
#endif
- #endif
volatile int mc_expected, mc_received;
--- 50,61 ----
***************
*** 84,95 ****
case ALPHA_INTR_CLOCK: /* clock interrupt */
cnt.v_intr++;
- #if 0
#ifdef EVCNT_COUNTERS
clock_intr_evcnt.ev_count++;
#else
intrcnt[INTRCNT_CLOCK]++;
- #endif
#endif
if (platform.clockintr)
(*platform.clockintr)(framep);
--- 82,91 ----
Index: alpha/locore.s
===================================================================
RCS file: /pub/FreeBSD-CVS/src/sys/alpha/alpha/locore.s,v
retrieving revision 1.5
diff -c -r1.5 locore.s
*** locore.s 1998/11/15 00:50:59 1.5
--- locore.s 1998/11/25 14:07:36
***************
*** 56,61 ****
--- 56,66 ----
#include <sys/syscall.h>
#include <assym.s>
+ #ifndef EVCNT_COUNTERS
+ #define _LOCORE
+ #include <machine/intrcnt.h>
+ #endif
+
/*
* PTmap is recursive pagemap at top of virtual address space.
* Within PTmap, the lev1 and lev0 page tables can be found.
***************
*** 296,305 ****
/* XXX: make systat/vmstat happy */
.data
EXPORT(intrnames)
! ASCIZ "foobar"
EXPORT(eintrnames)
.align 3
EXPORT(intrcnt)
! .quad 0
EXPORT(eintrcnt)
.text
--- 301,314 ----
/* XXX: make systat/vmstat happy */
.data
EXPORT(intrnames)
! #ifndef EVCNT_COUNTERS
! INTRNAMES_DEFINITION
! #endif
EXPORT(eintrnames)
.align 3
EXPORT(intrcnt)
! #ifndef EVCNT_COUNTERS
! INTRCNT_DEFINITION
! #endif
EXPORT(eintrcnt)
.text
Index: isa/isa.c
===================================================================
RCS file: /pub/FreeBSD-CVS/src/sys/alpha/isa/isa.c,v
retrieving revision 1.7
diff -c -r1.7 isa.c
*** isa.c 1998/11/18 23:53:11 1.7
--- isa.c 1998/11/27 08:50:04
***************
*** 37,42 ****
--- 37,43 ----
#include <isa/isareg.h>
#include <isa/isavar.h>
#include <machine/intr.h>
+ #include <machine/intrcnt.h>
#include <machine/resource.h>
MALLOC_DEFINE(M_ISADEV, "isadev", "ISA device");
***************
*** 627,632 ****
--- 628,634 ----
struct isa_intr *ii = arg;
int irq = ii->irq;
+ intrcnt[INTRCNT_ISA_IRQ + irq] ++;
ii->intr(ii->arg);
if (ii->irq > 7)
Index: pci/cia.c
===================================================================
RCS file: /pub/FreeBSD-CVS/src/sys/alpha/pci/cia.c,v
retrieving revision 1.11
diff -c -r1.11 cia.c
*** cia.c 1998/11/15 18:25:16 1.11
--- cia.c 1998/11/27 11:22:55
***************
*** 96,101 ****
--- 96,102 ----
#include <sys/kernel.h>
#include <sys/module.h>
#include <sys/bus.h>
+ #include <sys/malloc.h>
#include <sys/rman.h>
#include <alpha/pci/ciareg.h>
***************
*** 104,109 ****
--- 105,111 ----
#include <machine/bwx.h>
#include <machine/swiz.h>
#include <machine/intr.h>
+ #include <machine/intrcnt.h>
#include <machine/cpuconf.h>
#include <machine/rpb.h>
#include <machine/resource.h>
***************
*** 820,841 ****
return 0;
}
static int
cia_setup_intr(device_t dev, device_t child,
struct resource *irq,
driver_intr_t *intr, void *arg, void **cookiep)
{
! struct alpha_intr *i;
int error;
error = rman_activate_resource(irq);
if (error)
return error;
error = alpha_setup_intr(0x900 + (irq->r_start << 4),
! intr, arg, cookiep);
! if (error)
return error;
/* Enable PCI interrupt */
platform.pci_intr_enable(irq->r_start);
--- 822,876 ----
return 0;
}
+ struct pci_intr {
+ #if 0
+ void *ih;
+ #endif
+ driver_intr_t *intr;
+ void *arg;
+ int irq;
+ };
+
+ /*
+ * Wrap PCI interrupt just for counting
+ */
+
+ static void
+ pci_handle_intr(void *arg)
+ {
+ struct pci_intr *pi = arg;
+ int irq = pi->irq;
+
+ intrcnt[INTRCNT_EB164_IRQ + irq] ++;
+ pi->intr(pi->arg);
+ }
+
+
static int
cia_setup_intr(device_t dev, device_t child,
struct resource *irq,
driver_intr_t *intr, void *arg, void **cookiep)
{
! struct pci_intr *pi;
int error;
error = rman_activate_resource(irq);
if (error)
return error;
+ pi = malloc(sizeof(struct pci_intr), M_DEVBUF, M_NOWAIT);
+ if (!pi)
+ return ENOMEM;
+ pi->intr = intr;
+ pi->arg = arg;
+ pi->irq = irq->r_start;
+
error = alpha_setup_intr(0x900 + (irq->r_start << 4),
! pci_handle_intr, pi, cookiep);
! if (error) {
! free(pi, M_DEVBUF);
return error;
+ }
/* Enable PCI interrupt */
platform.pci_intr_enable(irq->r_start);
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-alpha" in the body of the message
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19981127204517A.simokawa>
