Date: Fri, 29 Oct 1999 20:12:18 +0100 From: Aernoudt Bottemanne <bottemanne@capitolonline.nl> To: Andrew Gallatin <gallatin@cs.duke.edu> Cc: "freebsd-alpha@freebsd.org" <freebsd-alpha@freebsd.org> Subject: Re: ip forwarding broken on alpha Message-ID: <3819F192.CEFEB1BA@capitolonline.nl> References: <14359.43410.495963.975277@grasshopper.cs.duke.edu> <14360.62787.116526.830259@grasshopper.cs.duke.edu>
index | next in thread | previous in thread | raw e-mail
Hi Andrew,
About the osf libraries: I downloaded your patch file, but it does not: make
depend, make, make install. It says: don't know how to make depend/install.
After downloading, I unpacked/archived it. It made the /Alpha/osf1 directory in
sys/modules.
What do I do wrong ? I would love to use netscape again....
Cheers,
Aernoudt
Andrew Gallatin wrote:
> Andrew Gallatin writes:
> >
> > I have an older AlphaStation 600 5/266 running -current (cvsupped
> > last week) which is setup as a router between 2 100mb networks. When
> > the machine is pushed fairly hard (like running a netperf -tUDP_STREAM
> > -- -m 100 across the router, eg about 10-20k 100byte packets/sec ) the
> > alpha falls over almost instantly. I have not enabled any NAT or
> > firewall functionality, just ip forwarding.
>
> <...>
>
> >
> > This might be a red herring, but I've found that if I run the entire
> > ip_input path under splnet() (added splnet() around the call to
> > ip_input() in ipintr().), things get a hell of a lot more stable.
> > Rather than crashing in a few seconds, it sometimes takes minutes.
> > And rather than an illegal access, I tend to run out of kernel stack
> > space ( either a panic("possible stack overflow\n"); in
> > alpha/alpha/interrupt.c, or I end up in the SRM console after calling
> > halt from a PC which isn't in the kernel, which smells like an overrun
> > stack to me). I'm not sure if this is related, or if it is a separate
> > problem entirely.
>
> That was it.
>
> The problem is that the interrupt handler returns through
> exception_return, like the trap handler does. Exception_return checks
> to see if the last ipl the system was at was 0. If it was, it
> eventually lowers the ipl to zero and checks for a pending ast. This
> was the problem. If you're getting interrupts quickly enough, there's
> large window when you're still running on the interrupt stack where
> you're sitting at ipl0 and you can get another interrupt & build onto
> that stack. If you're getting 40,000 interrupts per second
> (forwarding 20,000 packets/sec), this can build up & rapidly run you
> out of stack space.
>
> I've found the system can forward 70,000 packets per second & remain
> perfectly stable with the appended patch. I'm not terribly good at
> assembler, so rather than try to be tricky & check to see if the
> current ipl is >= 4 (handling a device interrupt), I simply copied
> exception_return & skipped the ipl lowering & the check for an ast
> since I don't think you're ever going to need to check for an ast
> after an interrupt.
>
> I have NFC why mclfree was getting trashed, but it must have been
> caused by running out of stack space as the appended patch seems to
> take care of everything.
>
> Doug -- should I commit this as-is, or do you want to take a more
> refined approach?
>
> Drew
> ------------------------------------------------------------------------------
> Andrew Gallatin, Sr Systems Programmer http://www.cs.duke.edu/~gallatin
> Duke University Email: gallatin@cs.duke.edu
> Department of Computer Science Phone: (919) 660-6590
>
> Index: exception.s
> ===================================================================
> RCS file: /home/ncvs/src/sys/alpha/alpha/exception.s,v
> retrieving revision 1.3
> diff -u -r1.3 exception.s
> --- exception.s 1999/08/28 00:38:26 1.3
> +++ exception.s 1999/10/28 19:17:26
> @@ -76,7 +76,7 @@
> /* a0, a1, & a2 already set up */
> mov sp, a3 ; .loc 1 __LINE__
> CALL(interrupt)
> - jmp zero, exception_return
> + jmp zero, interrupt_return
> END(XentInt)
>
> /**************************************************************************/
> Index: swtch.s
> ===================================================================
> RCS file: /home/ncvs/src/sys/alpha/alpha/swtch.s,v
> retrieving revision 1.11
> diff -u -r1.11 swtch.s
> --- swtch.s 1999/08/28 00:38:32 1.11
> +++ swtch.s 1999/10/28 20:08:24
> @@ -308,6 +308,61 @@
> .set at
> END(exception_return)
>
> +
> +
> +LEAF(interrupt_return, 1) /* XXX should be NESTED */
> + br pv, Lintr_er1
> +Lintr_er1: LDGP(pv)
> +
> + ldq s1, (FRAME_PS * 8)(sp) /* get the saved PS */
> + and s1, ALPHA_PSL_IPL_MASK, t0 /* look at the saved IPL */
> + bne t0, Lintr_restoreregs /* != 0: can't do AST or SIR */
> +
> + /* see if we can do an SIR */
> + ldl t1, ipending /* SIR pending? */
> + beq t1, Lintr_chkast /* no, try an AST*/
> +
> + /* We've got a SIR. */
> + CALL(do_sir) /* do the SIR; lowers IPL */
> +
> +Lintr_chkast:
> +
> + and s1, ALPHA_PSL_USERMODE, t0 /* are we returning to user? */
> + beq t0, Lintr_restoreregs /* no: just return */
> +
> +Lintr_setfpenable:
> + /* enable FPU based on whether the current proc is fpcurproc */
> + ldq t0, curproc
> + ldq t1, fpcurproc
> + cmpeq t0, t1, t0
> + mov zero, a0
> + cmovne t0, 1, a0
> + call_pal PAL_OSF1_wrfen
> +
> +Lintr_restoreregs:
> + /* set the hae register if this process has specified a value */
> + ldq t0, curproc
> + beq t0, Lintr_nohae
> + ldq t1, P_MD_FLAGS(t0)
> + and t1, MDP_HAEUSED
> + beq t1, Lintr_nohae
> + ldq a0, P_MD_HAE(t0)
> + ldq pv, chipset + CHIPSET_WRITE_HAE
> + CALL((pv))
> +Lintr_nohae:
> +
> + /* restore the registers, and return */
> + bsr ra, exception_restore_regs /* jmp/CALL trashes pv/t12 */
> + ldq ra,(FRAME_RA*8)(sp)
> + .set noat
> + ldq at_reg,(FRAME_AT*8)(sp)
> +
> + lda sp,(FRAME_SW_SIZE*8)(sp)
> + call_pal PAL_OSF1_rti
> + .set at
> + END(interrupt_return)
> +
> +
> LEAF(exception_save_regs, 0)
> stq v0,(FRAME_V0*8)(sp)
> stq a3,(FRAME_A3*8)(sp)
>
> To Unsubscribe: send mail to majordomo@FreeBSD.org
> with "unsubscribe freebsd-alpha" in the body of the message
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?3819F192.CEFEB1BA>
