docs/atomics: update comparison with Linux

Over time, some differences between QEMU and Linux atomics are getting
smoothed.  In particular, Linux grew atomic_fetch_or (and in general
the differences regarding RMW operations were not described accurately)
and smp_load_acquire/smp_store_release.  Also, set_mb was renamed to
smp_store_mb().  Include these changes in the documentation.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Paolo Bonzini 2016-05-25 14:23:27 +02:00
parent 15487aa132
commit a4a0e4b258
1 changed files with 15 additions and 5 deletions

View File

@ -340,17 +340,27 @@ and memory barriers, and the equivalents in QEMU:
properly aligned. properly aligned.
No barriers are implied by atomic_read/set in either Linux or QEMU. No barriers are implied by atomic_read/set in either Linux or QEMU.
- most atomic read-modify-write operations in Linux return void; - atomic read-modify-write operations in Linux are of three kinds:
in QEMU, all of them return the old value of the variable.
atomic_OP returns void
atomic_OP_return returns new value of the variable
atomic_fetch_OP returns the old value of the variable
atomic_cmpxchg returns the old value of the variable
In QEMU, the second kind does not exist. Currently Linux has
atomic_fetch_or only. QEMU provides and, or, inc, dec, add, sub.
- different atomic read-modify-write operations in Linux imply - different atomic read-modify-write operations in Linux imply
a different set of memory barriers; in QEMU, all of them enforce a different set of memory barriers; in QEMU, all of them enforce
sequential consistency, which means they imply full memory barriers sequential consistency, which means they imply full memory barriers
before and after the operation. before and after the operation.
- Linux does not have an equivalent of atomic_mb_read() and - Linux does not have an equivalent of atomic_mb_set(). In particular,
atomic_mb_set(). In particular, note that set_mb() is a little note that smp_store_mb() is a little weaker than atomic_mb_set().
weaker than atomic_mb_set(). atomic_mb_read() compiles to the same instructions as Linux's
smp_load_acquire(), but this should be treated as an implementation
detail. If required, QEMU might later add atomic_load_acquire() and
atomic_store_release() macros.
SOURCES SOURCES