eieio in atomics

David Engebretsen engebret at vnet.ibm.com
Wed May 8 23:51:16 EST 2002

Anton Blanchard wrote:
> Hi Dave,
> > I see that you added an eieio in atomic operations in the 2.5 tree.
> > Can you shed some light on what was discovered here?  I thought these
> > were not required to imply a memory barrier.  Was an actual problem
> > hit and do we need a fix put into the 2.4 code base?
> I started looking through the memory barriers in the kernel and
> was worried about places where atomics were used as reference counts:
>         foo->value = 1;
>         if (!atomic_dec_and_test(&foo->refcnt))
>                 kfree(foo);
> If we do this on two cpus, we need to make sure the first instruction
> does not end up moving down past the atomic operation. The window
> would be small, the isync at the end of the atomic would prevent
> it from moving any further down, so the window would be the few
> instructions between the successful store conditional and the isync.
> Having said that I havent convinced myself 100% that the race is real.

The window you are worried about is this, if I follow your thinking:

-------		------
Store A
Store B
Free A
		Alloc A
		Store A <-- this gets stomped by prior Store A

For this case, the isync does not provide any value (now I am wondering why we
have it at all in these atomic functions ...).  It does not cause the Store A to
be visible, only that the store instruction has executed to completion.  An
isync in a spinlock acquisition is only an import barrier (loads following the
lock do not execute until the lock is taken).  Spinlocks rely on the spin-unlock
code to do a lwsync or eieio in order to provide correctness in the context of

Having said all this, for _this_ case, there I do not think there is an actual
problem as the kfree path does a lwsync as there is a spinlock taken & released
in free_block on that path.

Now there are probabily cases where there is actually an exposure.  I had hoped
Rusty's statement was sufficient that this is not the case, but perhaps we need
to look more carefully.  Trick will be to find them.  It would be in a place
where the atomics are used as a spinlock to gate access to a data structure.

Do you have some other concrete examples in had we can look at more closely?


** Sent via the linuxppc64-dev mail list. See http://lists.linuxppc.org/

More information about the Linuxppc64-dev mailing list