Subject: Re: CVS commit: src/sys/dev/ic
To: Izumi Tsutsui <tsutsui@ceres.dti.ne.jp>
From: Pavel Cahyna <pavel@NetBSD.org>
List: source-changes
Date: 12/09/2007 00:01:25
On Sun, Dec 09, 2007 at 06:47:16AM +0900, Izumi Tsutsui wrote:
> dyoung@pobox.com wrote:
> 
> > > > use a nop with I bit set at the end of the tx chain.  This avoids a race
> > > > between status update and clearing the suspend bit on machines which can't
> > > > write data smaller than 32bits at a time.
> > > This should fix PR port-alpha/30560.
> > 
> > It looks to me like this problem can be solved more simply by
> > reading/writing the cb_status and cb_command fields simultaneously as
> > one 32-bit word.
> 
> The problem is that fxp(4) driver has to update cb_command
> bits during the cb_status possibly being updated by fxp chip.
> They are both 16 bits and in the same 32 bit word,
> so 16bit atomic op is required to solve it but it
> isn't available on all alpha (it's the BWX extention
> though all PCI generation alphas might have it,

They don't, see e.g. AXPpci33 (NoName). But you can use load linked/store
conditional instructions to get atomic 16-bit writes. But there would have
to be a MI API for that, possibly unimplementable on some machines other than
alpha.

Pavel