> On Thu, 2008-08-21 at 23:37 +1000, Nick Piggin wrote:
> > On Thursday 21 August 2008 22:26,
jmerkey@wolfmountaingroup.com wrote:
> >
> > > I used the smp_wmb() functions. I noted a couple of things. a) some of
> > > these macros just emit __asm__ __volatile__ into the code so why not just
> > > say "volatile" to begin with
> >
> > It is not the same as volatile type. What it does is tell the compiler
> > to clobber all registers or temporaries. This something pretty well
> > defined and hard to get wrong compared to volatile type.
>
> Right, asm volatile () means that the asm may not be discarted. Very
> different from the volatile type qualifier.
>
> > > b) smp_wmb() in some cases worked and in
> > > other cases jut optimized away the global reference.
> >
> > Linux barriers aren't going to force a load to be emitted, if it can be
> > optimized away. If it optimized away a store, then I'd like to see a
> > test case.
>
> Not sure - I think all barrier clobber the full register and memory set.
> So if you access a variable after a barrier it will have to issue a
> load.