Skip site navigation (1)Skip section navigation (2)
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>