提交 a4a0e4b2 编写于 作者: P Paolo Bonzini

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: NPaolo Bonzini <pbonzini@redhat.com>
上级 15487aa1
...@@ -340,17 +340,27 @@ and memory barriers, and the equivalents in QEMU: ...@@ -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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册