Date: Fri, 27 Nov 1998 09:36:11 -0800 (PST) From: dima@best.net (Dima Ruban) To: simokawa@sat.t.u-tokyo.ac.jp (Hidetoshi Shimokawa) Cc: freebsd-alpha@FreeBSD.ORG Subject: Re: vmstat -i Message-ID: <199811271736.JAA00541@burka.rdy.com> In-Reply-To: <19981127204517A.simokawa@sat.t.u-tokyo.ac.jp> from Hidetoshi Shimokawa at "Nov 27, 1998 8:45:17 pm"
index | next in thread | previous in thread | raw e-mail
Well, the actuall question is - do we want to adopt netbsd's method
of tracking interrupts (bogus) or we want to come up with something
decent on our own.
Hidetoshi Shimokawa writes:
> 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
>
-- dima
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?199811271736.JAA00541>
