Paolo Bonzini <pbonz...@redhat.com> writes: > This introduces load-acquire and store-release operations in QEMU. > For now, just use them as an implementation detail of atomic_mb_read > and atomic_mb_set. > > Since docs/atomics.txt documents that atomic_mb_read only synchronizes > with an atomic_mb_set of the same variable, we can use the new implementation > everywhere instead of seq-cst loads and stores. > > Signed-off-by: Paolo Bonzini <pbonz...@redhat.com> > --- <snip>
> +/* This is more efficient than a store plus a fence. */ > +#if defined(__i386__) || defined(__x86_64__) || defined(__s390x__) > +#define atomic_mb_set(ptr, i) ((void)atomic_xchg(ptr, i)) > +#endif Is this working around a compiler issue? Shouldn't it already be using the best instructions for the constraint? > + > +#ifndef atomic_mb_read > +#define atomic_mb_read(ptr) \ > + atomic_load_acquire(ptr) > +#endif > + > +#ifndef atomic_mb_set > +#define atomic_mb_set(ptr, i) do { \ > + atomic_store_release(ptr, i); \ > + smp_mb(); \ > +} while(0) > +#endif > + > #endif /* QEMU_ATOMIC_H */ -- Alex Bennée