On Wed, Apr 25, 2012 at 04:38:50PM +1000, David Gibson wrote:
> On Tue, Apr 24, 2012 at 03:46:25PM +0200, Paolo Bonzini wrote:
> > Il 23/04/2012 15:19, Michael S. Tsirkin ha scritto:
> [snip]
> > >  #elif defined(_ARCH_PPC)
> > >  
> > >  /*
> > > - * We use an eieio() for a wmb() on powerpc.  This assumes we don't
> > > + * We use an eieio() for wmb() and mb() on powerpc.  This assumes we 
> > > don't
> > >   * need to order cacheable and non-cacheable stores with respect to
> > >   * each other
> > >   */
> > >  #define smp_wmb()   asm volatile("eieio" ::: "memory")
> > > +#define smp_mb()   asm volatile("eieio" ::: "memory")
> > 
> > smp_mb() is hwsync under PPC, but I would just trust GCC.
> 
> I assume you mean 'lwsync', no such thing as 'hwsync', afaik.  And I
> assume you're talking about the kernel here.
> 
> So, the situation in qemu is different from in the kernel, because as
> far as I know there's no case in qemu where we need to synchronize
> cacheable stores with non-cacheable (I/O) stores.  eieio won't do
> that, but it will order cacheable stores w.r.t. other cacheable
> stores.  I think __sync_synchronize() will be a 'sync', the most
> heavyweight memory barrier on ppc.

kernel actually seems to make smp_wmb() an eieio as well.
that does not order reads so smp_rmb() is an lwsync if
supported and sync if not.

> -- 
> David Gibson                  | I'll have my music baroque, and my code
> david AT gibson.dropbear.id.au        | minimalist, thank you.  NOT _the_ 
> _other_
>                               | _way_ _around_!
> http://www.ozlabs.org/~dgibson

Reply via email to