Date: Mon, 10 Jul 2000 19:40:17 +0200 From: Stefan Esser <se@freebsd.org> To: Stephen McKay <mckay@thehub.com.au> Cc: Alan Edmonds <aedmonds@digitalconvergence.com>, Bill Paul <wpaul@freebsd.org>, Chris Wasser <cwasser@v-wave.com>, freebsd-stable@freebsd.org, Stefan Esser <se@freebsd.org> Subject: Re: Strangeness with 4.0-S Message-ID: <20000710194017.A33002@StefanEsser.FreeBSD.org> In-Reply-To: <200007091052.UAA09724@dungeon.home>; from mckay@thehub.com.au on Sun, Jul 09, 2000 at 08:52:16PM %2B1000 References: <200007030749.RAA13446@dungeon.home> <20000704140131.A1734@StefanEsser.FreeBSD.org> <200007041411.AAA18590@dungeon.home> <20000708221341.B2104@StefanEsser.FreeBSD.org> <200007091052.UAA09724@dungeon.home>
next in thread | previous in thread | raw e-mail | index | archive | help
On 2000-07-09 20:52 +1000, Stephen McKay <mckay@thehub.com.au> wrote: > On Saturday, 8th July 2000, Stefan Esser wrote: > > >Oh, there are renegotiations after each overrun ??? > >They should not be required at all. The Ethernet chip probably supports > >writing a new prefetch limit into the register while fully active ... > >I have looked at a number of Ethernet controller data sheets. There never > >was a warning that the chip must be quiescent when the "early send" limit > >is modified. > > The code at the point that an underrun is detected is: > > printf("dc%d: TX underrun -- ", sc->dc_unit); > if (DC_IS_DAVICOM(sc) || DC_IS_INTEL(sc)) > dc_init(sc); > > After that, it sets the new threshold, or store and forward mode. That > conditional (which resets the DE-500 style cards I own), looks deliberate > since it is so specific. Either that, or Bill was being conservative. > When I get a chance, I will experiment with removing it. Well, the DE Driver (DEC 21x4x) has (relevant lines marked ***): if (csr & TULIP_STS_ABNRMLINTR) { u_int32_t tmp = csr & sc->tulip_intrmask & ~(TULIP_STS_NORMALINTR|TULIP_STS_ABNRMLINTR); *** if (csr & TULIP_STS_TXUNDERFLOW) { *** if ((sc->tulip_cmdmode & TULIP_CMD_THRESHOLDCTL) != TULIP_CMD_THRSHLD160) { *** sc->tulip_cmdmode += TULIP_CMD_THRSHLD96; *** sc->tulip_flags |= TULIP_NEWTXTHRESH; } else if (sc->tulip_features & TULIP_HAVE_STOREFWD) { sc->tulip_cmdmode |= TULIP_CMD_STOREFWD; sc->tulip_flags |= TULIP_NEWTXTHRESH; } } if (sc->tulip_flags & TULIP_NOMESSAGES) { sc->tulip_statusbits |= tmp; } else { tulip_print_abnormal_interrupt(sc, tmp); sc->tulip_flags |= TULIP_NOMESSAGES; } *** TULIP_CSR_WRITE(sc, csr_command, sc->tulip_cmdmode); and later: if (sc->tulip_flags & TULIP_NEEDRESET) { tulip_reset(sc); tulip_init(sc); } But since TULIP_NEEDRESET has not been set in tulip_cmdmode, no chip reset is performed. I did not know, that the DC driver is different, but the specific test on Davicom and Intel chips seems to indicate, that Bill Paul knows what he is doing ... ;-) I agree, that for chips that need to be completely re-initialized, the default might be store-and-forward ... > >Well, I'd rather have the driver changed to not require a re-negotiation > >of the transmission parameters. > > I haven't read the data sheet yet (downloading now). Then we should know > what limitations we have to live with. There are so many DEC 21x4x clones, all slightly different, and it seems that at least a few need the chip reset. > It hides the problem very well for me. I really can't see the tiniest > of performance loss with store and forward. Maybe it's something that > only shows up on benchmarks. Guess it will show up if you measure latencies (or your application is doing lots of RPCs). But as soon as there is a cheap 100baseT switch in the path to the destination, there will be store-and-forward at work ;-) Regards, STefan To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-stable" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20000710194017.A33002>