Port-mips archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: atomic_ops(3) and sync



On Wed Jun 16 2010 at 12:30:18 +0200, Manuel Bouyer wrote:
> On Wed, Jun 16, 2010 at 12:21:23PM +0200, Manuel Bouyer wrote:
> > > This behaviour is documented in atomic_ops(3) (your email does not
> > > provide clear indication as to if you read that part of the manpage,
> > > so I'll just quote it here):
> > > 
> > >     Atomic operations are strongly ordered with respect to each other.
> > >     The global visibility of other loads and stores before and after an
> > >     atomic operation is undefined.  Applications that require synchro-
> > >     nization of loads and stores with respect to an atomic operation must
> > >     use memory barriers.  See membar_ops(3).
> > > 
> > > So if you want to impose ordering on other accesses with respect to the
> > > atomic op you need to manually add membars.  Atomic itself does not,
> > > and should not, guarantee it.
> > 
> > OK, thanks. I didn't spot this from the man page. I'm still in
> > a x86-centric world I guess ...

Speaking of that, there's a per-arch cpp macro __HAVE_ATOMIC_AS_MEMBAR,
which I've interpreted to mean "atomic operations provide full membar"
(but haven't found any documentation to confirm it).

> But it seems there's a problem with our membar_ops too:
> (gdb) disas membar_enter
> Dump of assembler code for function membar_sync:
> 0xffffffffc02b1b70 <membar_sync+0>:     jr      ra
> 0xffffffffc02b1b74 <membar_sync+4>:     nop
> 0xffffffffc02b1b78 <membar_sync+8>:     sync
> 0xffffffffc02b1b7c <membar_sync+12>:    nop
> 
> the assembler inserted a nop in the delay slot; I guess membar_ops.S
> needs ".set noreorder" at the top.

So membar comes out as nop?  Heh, that's a very high performance membar ;)


Home | Main Index | Thread Index | Old Index