Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 20 Apr 2010 19:48:43 +0530
From:      "C. Jayachandran" <c.jayachandran@gmail.com>
To:        Rui Paulo <rpaulo@freebsd.org>
Cc:        freebsd-mips@freebsd.org
Subject:   Re: [PATCH] Account RMI XLR interrupts
Message-ID:  <g2u98a59be81004200718md331d3b1g5bff1c764b58fc73@mail.gmail.com>
In-Reply-To: <BAAA25BC-6094-4B5B-9C83-A330933EBA51@freebsd.org>
References:  <BAAA25BC-6094-4B5B-9C83-A330933EBA51@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Apr 20, 2010 at 5:06 PM, Rui Paulo <rpaulo@freebsd.org> wrote:
> Hi,
> The following patch accounts interrupts on the XLR and makes vmstat -i an=
d systat work display useful data. I think the commented out atomic inc can=
 go away, but I'm not sure.
>
> Here's an example:
>
> $ vmstat -i
> interrupt =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0total =A0 =
=A0 =A0 rate
> int16: =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 56118 =A0 =
=A0 =A0 =A0984
> int17: =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 214 =
=A0 =A0 =A0 =A0 =A03
> Total =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A056332 =
=A0 =A0 =A0 =A0988
>
> int16 is the timer and int17 is the network interface (rge1).

Are you sure that the mips_intr_events array has the size to hold all
the XLR interrupts?  The XLR has a slightly different scheme (with
COP0 EIRR EIMR registers) and can have upto 64 interrupts.

A mechanism to unify the interrupt, and handling the XLR PIC may be a good =
idea.

The network packets come on MSGRING interrupt - only link status etc
will come on the GMAC interrupt.

JC.


> Index: intr_machdep.c
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> --- intr_machdep.c =A0 =A0 =A0(revision 206791)
> +++ intr_machdep.c =A0 =A0 =A0(working copy)
> @@ -157,28 +157,17 @@
> =A0 =A0 =A0 =A0for (i =3D sizeof(eirr) * 8 - 1; i >=3D 0; i--) {
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if ((eirr & (1ULL << i)) =3D=3D 0)
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0continue;
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0ie =3D mips_intr_events[i];
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0/* atomic_add_long(mih->cntp, 1); */
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 /* Don't account special IRQs */
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 switch (i) {
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 case IRQ_IPI:
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 case IRQ_MSGRING:
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 break;
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 default:
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 mips_intrcnt_inc(mips_intr_=
counters[i]);
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 }
>
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0write_c0_eirr64(1ULL << i);
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0pic_ack(i, 0);
>
> Regards,
> --
> Rui Paulo



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?g2u98a59be81004200718md331d3b1g5bff1c764b58fc73>