Date: Mon, 17 Jul 2000 23:53:36 -0700 From: David Greenman <dg@root.com> To: Andrew Gallatin <gallatin@cs.duke.edu> Cc: Bernd Walter <ticso@cicely8.cicely.de>, mjacob@feral.com, Mike Smith <msmith@FreeBSD.ORG>, freebsd-alpha@FreeBSD.ORG Subject: Re: fxp0 hangs on a PC164 using STABLE Message-ID: <200007180653.XAA27563@implode.root.com> In-Reply-To: Your message of "Mon, 17 Jul 2000 22:37:19 EDT." <14707.48450.371071.494543@grasshopper.cs.duke.edu>
next in thread | previous in thread | raw e-mail | index | archive | help
>The problem is that the status & command field share a 32-bit word. >The programming API of the eepro apparently requires that you update >the status field of a transmit slot that you've given to the card. >Since alphas can only operate on 32-bit chunks of memory, both the >status & command fields are loaded into memory & operated on in >registers when the following line of C is executed: > > /* > * Advance the end of list forward. > */ > sc->cbl_last->cb_command &= ~FXP_CB_COMMAND_S; > >The race is caused by the card DMA'ing up the status at just the wrong >time -- after it has been loaded into a register & before it has been >written back. The old value of the status is written back, clobbering >the status the card just DMA'ed up. The fact that the card has sent >this frame is missed & the transmit engine appears to hang. I wonder - does the Alpha CPU have support for locked read-modify-write type operations? I'm thinking that perhaps that might be a better way to fix the problem. -DG David Greenman Co-founder, The FreeBSD Project - http://www.freebsd.org Manufacturer of high-performance Internet servers - http://www.terasolutions.com Pave the road of life with opportunities. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-alpha" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200007180653.XAA27563>