[sheepdog] [PATCH v3] qemu/atomic.h: rename atomic_ to qatomic_
Paolo Bonzini
pbonzini at redhat.com
Wed Sep 23 14:04:15 CEST 2020
On 23/09/20 12:56, Stefan Hajnoczi wrote:
> clang's C11 atomic_fetch_*() functions only take a C11 atomic type
> pointer argument. QEMU uses direct types (int, etc) and this causes a
> compiler error when a QEMU code calls these functions in a source file
> that also included <stdatomic.h> via a system header file:
>
> $ CC=clang CXX=clang++ ./configure ... && make
> ../util/async.c:79:17: error: address argument to atomic operation must be a pointer to _Atomic type ('unsigned int *' invalid)
>
> Avoid using atomic_*() names in QEMU's atomic.h since that namespace is
> used by <stdatomic.h>. Prefix QEMU's APIs with 'q' so that atomic.h
> and <stdatomic.h> can co-exist. I checked /usr/include on my machine and
> searched GitHub for existing "qatomic_" users but there seem to be none.
>
> This patch was generated using:
>
> $ git grep -h -o '\<atomic\(64\)\?_[a-z0-9_]\+' include/qemu/atomic.h | \
> sort -u >/tmp/changed_identifiers
> $ for identifier in $(</tmp/changed_identifiers); do
> sed -i "s%\<$identifier\>%q$identifier%g" \
> $(git grep -I -l "\<$identifier\>")
> done
>
> I manually fixed line-wrap issues and misaligned rST tables.
>
> Signed-off-by: Stefan Hajnoczi <stefanha at redhat.com>
Acked-by: Paolo Bonzini <pbonzini at redhat.com>
Thank you very much!
Paolo
> ---
> v3:
> * Use qatomic_ instead of atomic_ [Paolo]
> * The diff of my manual fixups is available here:
> https://vmsplice.net/~stefan/atomic-namespace-pre-fixups-v3.diff
> - Dropping #ifndef qatomic_fetch_add in atomic.h
> - atomic_##X(haddr, val) glue macros not caught by grep
> - Keep atomic_add-bench name
> - C preprocessor backslash-newline ('\') column alignment
> - Line wrapping
> v2:
> * The diff of my manual fixups is available here:
> https://vmsplice.net/~stefan/atomic-namespace-pre-fixups.diff
> - Dropping #ifndef qemu_atomic_fetch_add in atomic.h
> - atomic_##X(haddr, val) glue macros not caught by grep
> - Keep atomic_add-bench name
> - C preprocessor backslash-newline ('\') column alignment
> - Line wrapping
> * Use grep -I to avoid accidentally modifying binary files (RISC-V
> OpenSBI ELFs) [Eric Blake]
> * Tweak .gitorder to show atomic.h changes first [Eric Blake]
> * Update grep commands in commit description so reviewers can reproduce
> mechanical changes [Eric Blake]
> ---
> include/qemu/atomic.h | 248 +++++++++---------
> docs/devel/lockcnt.txt | 8 +-
> docs/devel/rcu.txt | 34 +--
> accel/tcg/atomic_template.h | 20 +-
> include/block/aio-wait.h | 4 +-
> include/block/aio.h | 8 +-
> include/exec/cpu_ldst.h | 2 +-
> include/exec/exec-all.h | 6 +-
> include/exec/log.h | 6 +-
> include/exec/memory.h | 2 +-
> include/exec/ram_addr.h | 26 +-
> include/exec/ramlist.h | 2 +-
> include/exec/tb-lookup.h | 4 +-
> include/hw/core/cpu.h | 2 +-
> include/qemu/atomic128.h | 6 +-
> include/qemu/bitops.h | 2 +-
> include/qemu/coroutine.h | 2 +-
> include/qemu/log.h | 6 +-
> include/qemu/queue.h | 7 +-
> include/qemu/rcu.h | 10 +-
> include/qemu/rcu_queue.h | 100 +++----
> include/qemu/seqlock.h | 8 +-
> include/qemu/stats64.h | 28 +-
> include/qemu/thread.h | 24 +-
> .../infiniband/hw/vmw_pvrdma/pvrdma_ring.h | 14 +-
> linux-user/qemu.h | 2 +-
> tcg/i386/tcg-target.h | 2 +-
> tcg/s390/tcg-target.h | 2 +-
> tcg/tci/tcg-target.h | 2 +-
> accel/kvm/kvm-all.c | 12 +-
> accel/tcg/cpu-exec.c | 15 +-
> accel/tcg/cputlb.c | 24 +-
> accel/tcg/tcg-all.c | 2 +-
> accel/tcg/translate-all.c | 55 ++--
> audio/jackaudio.c | 18 +-
> block.c | 4 +-
> block/block-backend.c | 15 +-
> block/io.c | 48 ++--
> block/nfs.c | 2 +-
> block/sheepdog.c | 2 +-
> block/throttle-groups.c | 12 +-
> block/throttle.c | 4 +-
> blockdev.c | 2 +-
> blockjob.c | 2 +-
> contrib/libvhost-user/libvhost-user.c | 2 +-
> cpus-common.c | 26 +-
> dump/dump.c | 8 +-
> exec.c | 49 ++--
> hw/core/cpu.c | 6 +-
> hw/display/qxl.c | 4 +-
> hw/hyperv/hyperv.c | 10 +-
> hw/hyperv/vmbus.c | 2 +-
> hw/i386/xen/xen-hvm.c | 2 +-
> hw/intc/rx_icu.c | 12 +-
> hw/intc/sifive_plic.c | 4 +-
> hw/misc/edu.c | 16 +-
> hw/net/virtio-net.c | 10 +-
> hw/rdma/rdma_backend.c | 18 +-
> hw/rdma/rdma_rm.c | 2 +-
> hw/rdma/vmw/pvrdma_dev_ring.c | 4 +-
> hw/s390x/s390-pci-bus.c | 2 +-
> hw/s390x/virtio-ccw.c | 2 +-
> hw/virtio/vhost.c | 2 +-
> hw/virtio/virtio-mmio.c | 6 +-
> hw/virtio/virtio-pci.c | 6 +-
> hw/virtio/virtio.c | 16 +-
> hw/xtensa/pic_cpu.c | 4 +-
> iothread.c | 6 +-
> linux-user/hppa/cpu_loop.c | 11 +-
> linux-user/signal.c | 8 +-
> migration/colo-failover.c | 4 +-
> migration/migration.c | 8 +-
> migration/multifd.c | 18 +-
> migration/postcopy-ram.c | 34 +--
> migration/rdma.c | 34 +--
> monitor/hmp.c | 6 +-
> monitor/misc.c | 2 +-
> monitor/monitor.c | 6 +-
> qemu-nbd.c | 2 +-
> qga/commands.c | 12 +-
> qom/object.c | 20 +-
> scsi/qemu-pr-helper.c | 4 +-
> softmmu/cpu-throttle.c | 10 +-
> softmmu/cpus.c | 42 +--
> softmmu/memory.c | 6 +-
> softmmu/vl.c | 2 +-
> target/arm/mte_helper.c | 6 +-
> target/hppa/op_helper.c | 2 +-
> target/i386/mem_helper.c | 2 +-
> target/i386/whpx-all.c | 6 +-
> target/riscv/cpu_helper.c | 2 +-
> target/s390x/mem_helper.c | 4 +-
> target/xtensa/exc_helper.c | 4 +-
> target/xtensa/op_helper.c | 2 +-
> tcg/tcg.c | 58 ++--
> tcg/tci.c | 2 +-
> tests/atomic64-bench.c | 14 +-
> tests/atomic_add-bench.c | 14 +-
> tests/iothread.c | 2 +-
> tests/qht-bench.c | 12 +-
> tests/rcutorture.c | 24 +-
> tests/test-aio-multithread.c | 52 ++--
> tests/test-logging.c | 4 +-
> tests/test-rcu-list.c | 38 +--
> tests/test-thread-pool.c | 10 +-
> util/aio-posix.c | 14 +-
> util/aio-wait.c | 2 +-
> util/aio-win32.c | 5 +-
> util/async.c | 28 +-
> util/atomic64.c | 10 +-
> util/bitmap.c | 14 +-
> util/cacheinfo.c | 2 +-
> util/fdmon-epoll.c | 4 +-
> util/fdmon-io_uring.c | 12 +-
> util/lockcnt.c | 52 ++--
> util/log.c | 10 +-
> util/qemu-coroutine-lock.c | 18 +-
> util/qemu-coroutine-sleep.c | 4 +-
> util/qemu-coroutine.c | 6 +-
> util/qemu-sockets.c | 4 +-
> util/qemu-thread-posix.c | 12 +-
> util/qemu-thread-win32.c | 12 +-
> util/qemu-timer.c | 12 +-
> util/qht.c | 57 ++--
> util/qsp.c | 50 ++--
> util/rcu.c | 36 +--
> util/stats64.c | 34 +--
> docs/devel/atomics.rst | 134 +++++-----
> scripts/kernel-doc | 2 +-
> tcg/aarch64/tcg-target.c.inc | 2 +-
> tcg/mips/tcg-target.c.inc | 2 +-
> tcg/ppc/tcg-target.c.inc | 6 +-
> tcg/sparc/tcg-target.c.inc | 5 +-
> 133 files changed, 1041 insertions(+), 1018 deletions(-)
>
> diff --git a/include/qemu/atomic.h b/include/qemu/atomic.h
> index ff72db5115..c1d211a351 100644
> --- a/include/qemu/atomic.h
> +++ b/include/qemu/atomic.h
> @@ -125,49 +125,49 @@
> * no effect on the generated code but not using the atomic primitives
> * will get flagged by sanitizers as a violation.
> */
> -#define atomic_read__nocheck(ptr) \
> +#define qatomic_read__nocheck(ptr) \
> __atomic_load_n(ptr, __ATOMIC_RELAXED)
>
> -#define atomic_read(ptr) \
> - ({ \
> +#define qatomic_read(ptr) \
> + ({ \
> QEMU_BUILD_BUG_ON(sizeof(*ptr) > ATOMIC_REG_SIZE); \
> - atomic_read__nocheck(ptr); \
> + qatomic_read__nocheck(ptr); \
> })
>
> -#define atomic_set__nocheck(ptr, i) \
> +#define qatomic_set__nocheck(ptr, i) \
> __atomic_store_n(ptr, i, __ATOMIC_RELAXED)
>
> -#define atomic_set(ptr, i) do { \
> +#define qatomic_set(ptr, i) do { \
> QEMU_BUILD_BUG_ON(sizeof(*ptr) > ATOMIC_REG_SIZE); \
> - atomic_set__nocheck(ptr, i); \
> + qatomic_set__nocheck(ptr, i); \
> } while(0)
>
> /* See above: most compilers currently treat consume and acquire the
> - * same, but this slows down atomic_rcu_read unnecessarily.
> + * same, but this slows down qatomic_rcu_read unnecessarily.
> */
> #ifdef __SANITIZE_THREAD__
> -#define atomic_rcu_read__nocheck(ptr, valptr) \
> +#define qatomic_rcu_read__nocheck(ptr, valptr) \
> __atomic_load(ptr, valptr, __ATOMIC_CONSUME);
> #else
> -#define atomic_rcu_read__nocheck(ptr, valptr) \
> - __atomic_load(ptr, valptr, __ATOMIC_RELAXED); \
> +#define qatomic_rcu_read__nocheck(ptr, valptr) \
> + __atomic_load(ptr, valptr, __ATOMIC_RELAXED); \
> smp_read_barrier_depends();
> #endif
>
> -#define atomic_rcu_read(ptr) \
> - ({ \
> +#define qatomic_rcu_read(ptr) \
> + ({ \
> QEMU_BUILD_BUG_ON(sizeof(*ptr) > ATOMIC_REG_SIZE); \
> - typeof_strip_qual(*ptr) _val; \
> - atomic_rcu_read__nocheck(ptr, &_val); \
> - _val; \
> + typeof_strip_qual(*ptr) _val; \
> + qatomic_rcu_read__nocheck(ptr, &_val); \
> + _val; \
> })
>
> -#define atomic_rcu_set(ptr, i) do { \
> +#define qatomic_rcu_set(ptr, i) do { \
> QEMU_BUILD_BUG_ON(sizeof(*ptr) > ATOMIC_REG_SIZE); \
> - __atomic_store_n(ptr, i, __ATOMIC_RELEASE); \
> + __atomic_store_n(ptr, i, __ATOMIC_RELEASE); \
> } while(0)
>
> -#define atomic_load_acquire(ptr) \
> +#define qatomic_load_acquire(ptr) \
> ({ \
> QEMU_BUILD_BUG_ON(sizeof(*ptr) > ATOMIC_REG_SIZE); \
> typeof_strip_qual(*ptr) _val; \
> @@ -175,7 +175,7 @@
> _val; \
> })
>
> -#define atomic_store_release(ptr, i) do { \
> +#define qatomic_store_release(ptr, i) do { \
> QEMU_BUILD_BUG_ON(sizeof(*ptr) > ATOMIC_REG_SIZE); \
> __atomic_store_n(ptr, i, __ATOMIC_RELEASE); \
> } while(0)
> @@ -183,56 +183,61 @@
>
> /* All the remaining operations are fully sequentially consistent */
>
> -#define atomic_xchg__nocheck(ptr, i) ({ \
> +#define qatomic_xchg__nocheck(ptr, i) ({ \
> __atomic_exchange_n(ptr, (i), __ATOMIC_SEQ_CST); \
> })
>
> -#define atomic_xchg(ptr, i) ({ \
> +#define qatomic_xchg(ptr, i) ({ \
> QEMU_BUILD_BUG_ON(sizeof(*ptr) > ATOMIC_REG_SIZE); \
> - atomic_xchg__nocheck(ptr, i); \
> + qatomic_xchg__nocheck(ptr, i); \
> })
>
> /* Returns the eventual value, failed or not */
> -#define atomic_cmpxchg__nocheck(ptr, old, new) ({ \
> +#define qatomic_cmpxchg__nocheck(ptr, old, new) ({ \
> typeof_strip_qual(*ptr) _old = (old); \
> (void)__atomic_compare_exchange_n(ptr, &_old, new, false, \
> __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); \
> _old; \
> })
>
> -#define atomic_cmpxchg(ptr, old, new) ({ \
> +#define qatomic_cmpxchg(ptr, old, new) ({ \
> QEMU_BUILD_BUG_ON(sizeof(*ptr) > ATOMIC_REG_SIZE); \
> - atomic_cmpxchg__nocheck(ptr, old, new); \
> + qatomic_cmpxchg__nocheck(ptr, old, new); \
> })
>
> /* Provide shorter names for GCC atomic builtins, return old value */
> -#define atomic_fetch_inc(ptr) __atomic_fetch_add(ptr, 1, __ATOMIC_SEQ_CST)
> -#define atomic_fetch_dec(ptr) __atomic_fetch_sub(ptr, 1, __ATOMIC_SEQ_CST)
> +#define qatomic_fetch_inc(ptr) __atomic_fetch_add(ptr, 1, __ATOMIC_SEQ_CST)
> +#define qatomic_fetch_dec(ptr) __atomic_fetch_sub(ptr, 1, __ATOMIC_SEQ_CST)
>
> -#ifndef atomic_fetch_add
> -#define atomic_fetch_add(ptr, n) __atomic_fetch_add(ptr, n, __ATOMIC_SEQ_CST)
> -#define atomic_fetch_sub(ptr, n) __atomic_fetch_sub(ptr, n, __ATOMIC_SEQ_CST)
> -#define atomic_fetch_and(ptr, n) __atomic_fetch_and(ptr, n, __ATOMIC_SEQ_CST)
> -#define atomic_fetch_or(ptr, n) __atomic_fetch_or(ptr, n, __ATOMIC_SEQ_CST)
> -#define atomic_fetch_xor(ptr, n) __atomic_fetch_xor(ptr, n, __ATOMIC_SEQ_CST)
> -#endif
> +#define qatomic_fetch_add(ptr, n) __atomic_fetch_add(ptr, n, __ATOMIC_SEQ_CST)
> +#define qatomic_fetch_sub(ptr, n) __atomic_fetch_sub(ptr, n, __ATOMIC_SEQ_CST)
> +#define qatomic_fetch_and(ptr, n) __atomic_fetch_and(ptr, n, __ATOMIC_SEQ_CST)
> +#define qatomic_fetch_or(ptr, n) __atomic_fetch_or(ptr, n, __ATOMIC_SEQ_CST)
> +#define qatomic_fetch_xor(ptr, n) __atomic_fetch_xor(ptr, n, __ATOMIC_SEQ_CST)
>
> -#define atomic_inc_fetch(ptr) __atomic_add_fetch(ptr, 1, __ATOMIC_SEQ_CST)
> -#define atomic_dec_fetch(ptr) __atomic_sub_fetch(ptr, 1, __ATOMIC_SEQ_CST)
> -#define atomic_add_fetch(ptr, n) __atomic_add_fetch(ptr, n, __ATOMIC_SEQ_CST)
> -#define atomic_sub_fetch(ptr, n) __atomic_sub_fetch(ptr, n, __ATOMIC_SEQ_CST)
> -#define atomic_and_fetch(ptr, n) __atomic_and_fetch(ptr, n, __ATOMIC_SEQ_CST)
> -#define atomic_or_fetch(ptr, n) __atomic_or_fetch(ptr, n, __ATOMIC_SEQ_CST)
> -#define atomic_xor_fetch(ptr, n) __atomic_xor_fetch(ptr, n, __ATOMIC_SEQ_CST)
> +#define qatomic_inc_fetch(ptr) __atomic_add_fetch(ptr, 1, __ATOMIC_SEQ_CST)
> +#define qatomic_dec_fetch(ptr) __atomic_sub_fetch(ptr, 1, __ATOMIC_SEQ_CST)
> +#define qatomic_add_fetch(ptr, n) __atomic_add_fetch(ptr, n, __ATOMIC_SEQ_CST)
> +#define qatomic_sub_fetch(ptr, n) __atomic_sub_fetch(ptr, n, __ATOMIC_SEQ_CST)
> +#define qatomic_and_fetch(ptr, n) __atomic_and_fetch(ptr, n, __ATOMIC_SEQ_CST)
> +#define qatomic_or_fetch(ptr, n) __atomic_or_fetch(ptr, n, __ATOMIC_SEQ_CST)
> +#define qatomic_xor_fetch(ptr, n) __atomic_xor_fetch(ptr, n, __ATOMIC_SEQ_CST)
>
> /* And even shorter names that return void. */
> -#define atomic_inc(ptr) ((void) __atomic_fetch_add(ptr, 1, __ATOMIC_SEQ_CST))
> -#define atomic_dec(ptr) ((void) __atomic_fetch_sub(ptr, 1, __ATOMIC_SEQ_CST))
> -#define atomic_add(ptr, n) ((void) __atomic_fetch_add(ptr, n, __ATOMIC_SEQ_CST))
> -#define atomic_sub(ptr, n) ((void) __atomic_fetch_sub(ptr, n, __ATOMIC_SEQ_CST))
> -#define atomic_and(ptr, n) ((void) __atomic_fetch_and(ptr, n, __ATOMIC_SEQ_CST))
> -#define atomic_or(ptr, n) ((void) __atomic_fetch_or(ptr, n, __ATOMIC_SEQ_CST))
> -#define atomic_xor(ptr, n) ((void) __atomic_fetch_xor(ptr, n, __ATOMIC_SEQ_CST))
> +#define qatomic_inc(ptr) \
> + ((void) __atomic_fetch_add(ptr, 1, __ATOMIC_SEQ_CST))
> +#define qatomic_dec(ptr) \
> + ((void) __atomic_fetch_sub(ptr, 1, __ATOMIC_SEQ_CST))
> +#define qatomic_add(ptr, n) \
> + ((void) __atomic_fetch_add(ptr, n, __ATOMIC_SEQ_CST))
> +#define qatomic_sub(ptr, n) \
> + ((void) __atomic_fetch_sub(ptr, n, __ATOMIC_SEQ_CST))
> +#define qatomic_and(ptr, n) \
> + ((void) __atomic_fetch_and(ptr, n, __ATOMIC_SEQ_CST))
> +#define qatomic_or(ptr, n) \
> + ((void) __atomic_fetch_or(ptr, n, __ATOMIC_SEQ_CST))
> +#define qatomic_xor(ptr, n) \
> + ((void) __atomic_fetch_xor(ptr, n, __ATOMIC_SEQ_CST))
>
> #else /* __ATOMIC_RELAXED */
>
> @@ -272,7 +277,7 @@
> * but it is a full barrier at the hardware level. Add a compiler barrier
> * to make it a full barrier also at the compiler level.
> */
> -#define atomic_xchg(ptr, i) (barrier(), __sync_lock_test_and_set(ptr, i))
> +#define qatomic_xchg(ptr, i) (barrier(), __sync_lock_test_and_set(ptr, i))
>
> #elif defined(_ARCH_PPC)
>
> @@ -325,14 +330,14 @@
> /* These will only be atomic if the processor does the fetch or store
> * in a single issue memory operation
> */
> -#define atomic_read__nocheck(p) (*(__typeof__(*(p)) volatile*) (p))
> -#define atomic_set__nocheck(p, i) ((*(__typeof__(*(p)) volatile*) (p)) = (i))
> +#define qatomic_read__nocheck(p) (*(__typeof__(*(p)) volatile*) (p))
> +#define qatomic_set__nocheck(p, i) ((*(__typeof__(*(p)) volatile*) (p)) = (i))
>
> -#define atomic_read(ptr) atomic_read__nocheck(ptr)
> -#define atomic_set(ptr, i) atomic_set__nocheck(ptr,i)
> +#define qatomic_read(ptr) qatomic_read__nocheck(ptr)
> +#define qatomic_set(ptr, i) qatomic_set__nocheck(ptr,i)
>
> /**
> - * atomic_rcu_read - reads a RCU-protected pointer to a local variable
> + * qatomic_rcu_read - reads a RCU-protected pointer to a local variable
> * into a RCU read-side critical section. The pointer can later be safely
> * dereferenced within the critical section.
> *
> @@ -342,21 +347,21 @@
> * Inserts memory barriers on architectures that require them (currently only
> * Alpha) and documents which pointers are protected by RCU.
> *
> - * atomic_rcu_read also includes a compiler barrier to ensure that
> + * qatomic_rcu_read also includes a compiler barrier to ensure that
> * value-speculative optimizations (e.g. VSS: Value Speculation
> * Scheduling) does not perform the data read before the pointer read
> * by speculating the value of the pointer.
> *
> - * Should match atomic_rcu_set(), atomic_xchg(), atomic_cmpxchg().
> + * Should match qatomic_rcu_set(), qatomic_xchg(), qatomic_cmpxchg().
> */
> -#define atomic_rcu_read(ptr) ({ \
> - typeof(*ptr) _val = atomic_read(ptr); \
> +#define qatomic_rcu_read(ptr) ({ \
> + typeof(*ptr) _val = qatomic_read(ptr); \
> smp_read_barrier_depends(); \
> _val; \
> })
>
> /**
> - * atomic_rcu_set - assigns (publicizes) a pointer to a new data structure
> + * qatomic_rcu_set - assigns (publicizes) a pointer to a new data structure
> * meant to be read by RCU read-side critical sections.
> *
> * Documents which pointers will be dereferenced by RCU read-side critical
> @@ -364,65 +369,64 @@
> * them. It also makes sure the compiler does not reorder code initializing the
> * data structure before its publication.
> *
> - * Should match atomic_rcu_read().
> + * Should match qatomic_rcu_read().
> */
> -#define atomic_rcu_set(ptr, i) do { \
> +#define qatomic_rcu_set(ptr, i) do { \
> smp_wmb(); \
> - atomic_set(ptr, i); \
> + qatomic_set(ptr, i); \
> } while (0)
>
> -#define atomic_load_acquire(ptr) ({ \
> - typeof(*ptr) _val = atomic_read(ptr); \
> +#define qatomic_load_acquire(ptr) ({ \
> + typeof(*ptr) _val = qatomic_read(ptr); \
> smp_mb_acquire(); \
> _val; \
> })
>
> -#define atomic_store_release(ptr, i) do { \
> +#define qatomic_store_release(ptr, i) do { \
> smp_mb_release(); \
> - atomic_set(ptr, i); \
> + qatomic_set(ptr, i); \
> } while (0)
>
> -#ifndef atomic_xchg
> +#ifndef qatomic_xchg
> #if defined(__clang__)
> -#define atomic_xchg(ptr, i) __sync_swap(ptr, i)
> +#define qatomic_xchg(ptr, i) __sync_swap(ptr, i)
> #else
> /* __sync_lock_test_and_set() is documented to be an acquire barrier only. */
> -#define atomic_xchg(ptr, i) (smp_mb(), __sync_lock_test_and_set(ptr, i))
> +#define qatomic_xchg(ptr, i) (smp_mb(), __sync_lock_test_and_set(ptr, i))
> #endif
> #endif
> -#define atomic_xchg__nocheck atomic_xchg
> +#define qatomic_xchg__nocheck qatomic_xchg
>
> /* Provide shorter names for GCC atomic builtins. */
> -#define atomic_fetch_inc(ptr) __sync_fetch_and_add(ptr, 1)
> -#define atomic_fetch_dec(ptr) __sync_fetch_and_add(ptr, -1)
> +#define qatomic_fetch_inc(ptr) __sync_fetch_and_add(ptr, 1)
> +#define qatomic_fetch_dec(ptr) __sync_fetch_and_add(ptr, -1)
>
> -#ifndef atomic_fetch_add
> -#define atomic_fetch_add(ptr, n) __sync_fetch_and_add(ptr, n)
> -#define atomic_fetch_sub(ptr, n) __sync_fetch_and_sub(ptr, n)
> -#define atomic_fetch_and(ptr, n) __sync_fetch_and_and(ptr, n)
> -#define atomic_fetch_or(ptr, n) __sync_fetch_and_or(ptr, n)
> -#define atomic_fetch_xor(ptr, n) __sync_fetch_and_xor(ptr, n)
> -#endif
> +#define qatomic_fetch_add(ptr, n) __sync_fetch_and_add(ptr, n)
> +#define qatomic_fetch_sub(ptr, n) __sync_fetch_and_sub(ptr, n)
> +#define qatomic_fetch_and(ptr, n) __sync_fetch_and_and(ptr, n)
> +#define qatomic_fetch_or(ptr, n) __sync_fetch_and_or(ptr, n)
> +#define qatomic_fetch_xor(ptr, n) __sync_fetch_and_xor(ptr, n)
>
> -#define atomic_inc_fetch(ptr) __sync_add_and_fetch(ptr, 1)
> -#define atomic_dec_fetch(ptr) __sync_add_and_fetch(ptr, -1)
> -#define atomic_add_fetch(ptr, n) __sync_add_and_fetch(ptr, n)
> -#define atomic_sub_fetch(ptr, n) __sync_sub_and_fetch(ptr, n)
> -#define atomic_and_fetch(ptr, n) __sync_and_and_fetch(ptr, n)
> -#define atomic_or_fetch(ptr, n) __sync_or_and_fetch(ptr, n)
> -#define atomic_xor_fetch(ptr, n) __sync_xor_and_fetch(ptr, n)
> +#define qatomic_inc_fetch(ptr) __sync_add_and_fetch(ptr, 1)
> +#define qatomic_dec_fetch(ptr) __sync_add_and_fetch(ptr, -1)
> +#define qatomic_add_fetch(ptr, n) __sync_add_and_fetch(ptr, n)
> +#define qatomic_sub_fetch(ptr, n) __sync_sub_and_fetch(ptr, n)
> +#define qatomic_and_fetch(ptr, n) __sync_and_and_fetch(ptr, n)
> +#define qatomic_or_fetch(ptr, n) __sync_or_and_fetch(ptr, n)
> +#define qatomic_xor_fetch(ptr, n) __sync_xor_and_fetch(ptr, n)
>
> -#define atomic_cmpxchg(ptr, old, new) __sync_val_compare_and_swap(ptr, old, new)
> -#define atomic_cmpxchg__nocheck(ptr, old, new) atomic_cmpxchg(ptr, old, new)
> +#define qatomic_cmpxchg(ptr, old, new) \
> + __sync_val_compare_and_swap(ptr, old, new)
> +#define qatomic_cmpxchg__nocheck(ptr, old, new) qatomic_cmpxchg(ptr, old, new)
>
> /* And even shorter names that return void. */
> -#define atomic_inc(ptr) ((void) __sync_fetch_and_add(ptr, 1))
> -#define atomic_dec(ptr) ((void) __sync_fetch_and_add(ptr, -1))
> -#define atomic_add(ptr, n) ((void) __sync_fetch_and_add(ptr, n))
> -#define atomic_sub(ptr, n) ((void) __sync_fetch_and_sub(ptr, n))
> -#define atomic_and(ptr, n) ((void) __sync_fetch_and_and(ptr, n))
> -#define atomic_or(ptr, n) ((void) __sync_fetch_and_or(ptr, n))
> -#define atomic_xor(ptr, n) ((void) __sync_fetch_and_xor(ptr, n))
> +#define qatomic_inc(ptr) ((void) __sync_fetch_and_add(ptr, 1))
> +#define qatomic_dec(ptr) ((void) __sync_fetch_and_add(ptr, -1))
> +#define qatomic_add(ptr, n) ((void) __sync_fetch_and_add(ptr, n))
> +#define qatomic_sub(ptr, n) ((void) __sync_fetch_and_sub(ptr, n))
> +#define qatomic_and(ptr, n) ((void) __sync_fetch_and_and(ptr, n))
> +#define qatomic_or(ptr, n) ((void) __sync_fetch_and_or(ptr, n))
> +#define qatomic_xor(ptr, n) ((void) __sync_fetch_and_xor(ptr, n))
>
> #endif /* __ATOMIC_RELAXED */
>
> @@ -436,11 +440,11 @@
> /* This is more efficient than a store plus a fence. */
> #if !defined(__SANITIZE_THREAD__)
> #if defined(__i386__) || defined(__x86_64__) || defined(__s390x__)
> -#define atomic_mb_set(ptr, i) ((void)atomic_xchg(ptr, i))
> +#define qatomic_mb_set(ptr, i) ((void)qatomic_xchg(ptr, i))
> #endif
> #endif
>
> -/* atomic_mb_read/set semantics map Java volatile variables. They are
> +/* qatomic_mb_read/set semantics map Java volatile variables. They are
> * less expensive on some platforms (notably POWER) than fully
> * sequentially consistent operations.
> *
> @@ -448,58 +452,58 @@
> * use. See docs/devel/atomics.txt for more discussion.
> */
>
> -#ifndef atomic_mb_read
> -#define atomic_mb_read(ptr) \
> - atomic_load_acquire(ptr)
> +#ifndef qatomic_mb_read
> +#define qatomic_mb_read(ptr) \
> + qatomic_load_acquire(ptr)
> #endif
>
> -#ifndef atomic_mb_set
> -#define atomic_mb_set(ptr, i) do { \
> - atomic_store_release(ptr, i); \
> +#ifndef qatomic_mb_set
> +#define qatomic_mb_set(ptr, i) do { \
> + qatomic_store_release(ptr, i); \
> smp_mb(); \
> } while(0)
> #endif
>
> -#define atomic_fetch_inc_nonzero(ptr) ({ \
> - typeof_strip_qual(*ptr) _oldn = atomic_read(ptr); \
> - while (_oldn && atomic_cmpxchg(ptr, _oldn, _oldn + 1) != _oldn) { \
> - _oldn = atomic_read(ptr); \
> +#define qatomic_fetch_inc_nonzero(ptr) ({ \
> + typeof_strip_qual(*ptr) _oldn = qatomic_read(ptr); \
> + while (_oldn && qatomic_cmpxchg(ptr, _oldn, _oldn + 1) != _oldn) { \
> + _oldn = qatomic_read(ptr); \
> } \
> _oldn; \
> })
>
> /* Abstractions to access atomically (i.e. "once") i64/u64 variables */
> #ifdef CONFIG_ATOMIC64
> -static inline int64_t atomic_read_i64(const int64_t *ptr)
> +static inline int64_t qatomic_read_i64(const int64_t *ptr)
> {
> /* use __nocheck because sizeof(void *) might be < sizeof(u64) */
> - return atomic_read__nocheck(ptr);
> + return qatomic_read__nocheck(ptr);
> }
>
> -static inline uint64_t atomic_read_u64(const uint64_t *ptr)
> +static inline uint64_t qatomic_read_u64(const uint64_t *ptr)
> {
> - return atomic_read__nocheck(ptr);
> + return qatomic_read__nocheck(ptr);
> }
>
> -static inline void atomic_set_i64(int64_t *ptr, int64_t val)
> +static inline void qatomic_set_i64(int64_t *ptr, int64_t val)
> {
> - atomic_set__nocheck(ptr, val);
> + qatomic_set__nocheck(ptr, val);
> }
>
> -static inline void atomic_set_u64(uint64_t *ptr, uint64_t val)
> +static inline void qatomic_set_u64(uint64_t *ptr, uint64_t val)
> {
> - atomic_set__nocheck(ptr, val);
> + qatomic_set__nocheck(ptr, val);
> }
>
> -static inline void atomic64_init(void)
> +static inline void qatomic64_init(void)
> {
> }
> #else /* !CONFIG_ATOMIC64 */
> -int64_t atomic_read_i64(const int64_t *ptr);
> -uint64_t atomic_read_u64(const uint64_t *ptr);
> -void atomic_set_i64(int64_t *ptr, int64_t val);
> -void atomic_set_u64(uint64_t *ptr, uint64_t val);
> -void atomic64_init(void);
> +int64_t qatomic_read_i64(const int64_t *ptr);
> +uint64_t qatomic_read_u64(const uint64_t *ptr);
> +void qatomic_set_i64(int64_t *ptr, int64_t val);
> +void qatomic_set_u64(uint64_t *ptr, uint64_t val);
> +void qatomic64_init(void);
> #endif /* !CONFIG_ATOMIC64 */
>
> #endif /* QEMU_ATOMIC_H */
> diff --git a/docs/devel/lockcnt.txt b/docs/devel/lockcnt.txt
> index 7c099bc6c8..2d85462fe3 100644
> --- a/docs/devel/lockcnt.txt
> +++ b/docs/devel/lockcnt.txt
> @@ -95,7 +95,7 @@ not just frees, though there could be cases where this is not necessary.
>
> Reads, instead, can be done without taking the mutex, as long as the
> readers and writers use the same macros that are used for RCU, for
> -example atomic_rcu_read, atomic_rcu_set, QLIST_FOREACH_RCU, etc. This is
> +example qatomic_rcu_read, qatomic_rcu_set, QLIST_FOREACH_RCU, etc. This is
> because the reads are done outside a lock and a set or QLIST_INSERT_HEAD
> can happen concurrently with the read. The RCU API ensures that the
> processor and the compiler see all required memory barriers.
> @@ -189,7 +189,7 @@ qemu_lockcnt_lock and qemu_lockcnt_unlock:
> if (!xyz) {
> new_xyz = g_new(XYZ, 1);
> ...
> - atomic_rcu_set(&xyz, new_xyz);
> + qatomic_rcu_set(&xyz, new_xyz);
> }
> qemu_lockcnt_unlock(&xyz_lockcnt);
>
> @@ -198,7 +198,7 @@ qemu_lockcnt_dec:
>
> qemu_lockcnt_inc(&xyz_lockcnt);
> if (xyz) {
> - XYZ *p = atomic_rcu_read(&xyz);
> + XYZ *p = qatomic_rcu_read(&xyz);
> ...
> /* Accesses can now be done through "p". */
> }
> @@ -222,7 +222,7 @@ the decrement, the locking and the check on count as follows:
>
> qemu_lockcnt_inc(&xyz_lockcnt);
> if (xyz) {
> - XYZ *p = atomic_rcu_read(&xyz);
> + XYZ *p = qatomic_rcu_read(&xyz);
> ...
> /* Accesses can now be done through "p". */
> }
> diff --git a/docs/devel/rcu.txt b/docs/devel/rcu.txt
> index 0ce15ba198..cdf002edd8 100644
> --- a/docs/devel/rcu.txt
> +++ b/docs/devel/rcu.txt
> @@ -130,13 +130,13 @@ The core RCU API is small:
>
> g_free_rcu(&foo, rcu);
>
> - typeof(*p) atomic_rcu_read(p);
> + typeof(*p) qatomic_rcu_read(p);
>
> - atomic_rcu_read() is similar to atomic_load_acquire(), but it makes
> + qatomic_rcu_read() is similar to qatomic_load_acquire(), but it makes
> some assumptions on the code that calls it. This allows a more
> optimized implementation.
>
> - atomic_rcu_read assumes that whenever a single RCU critical
> + qatomic_rcu_read assumes that whenever a single RCU critical
> section reads multiple shared data, these reads are either
> data-dependent or need no ordering. This is almost always the
> case when using RCU, because read-side critical sections typically
> @@ -144,7 +144,7 @@ The core RCU API is small:
> every update) until reaching a data structure of interest,
> and then read from there.
>
> - RCU read-side critical sections must use atomic_rcu_read() to
> + RCU read-side critical sections must use qatomic_rcu_read() to
> read data, unless concurrent writes are prevented by another
> synchronization mechanism.
>
> @@ -152,18 +152,18 @@ The core RCU API is small:
> data structure in a single direction, opposite to the direction
> in which the updater initializes it.
>
> - void atomic_rcu_set(p, typeof(*p) v);
> + void qatomic_rcu_set(p, typeof(*p) v);
>
> - atomic_rcu_set() is similar to atomic_store_release(), though it also
> + qatomic_rcu_set() is similar to qatomic_store_release(), though it also
> makes assumptions on the code that calls it in order to allow a more
> optimized implementation.
>
> - In particular, atomic_rcu_set() suffices for synchronization
> + In particular, qatomic_rcu_set() suffices for synchronization
> with readers, if the updater never mutates a field within a
> data item that is already accessible to readers. This is the
> case when initializing a new copy of the RCU-protected data
> structure; just ensure that initialization of *p is carried out
> - before atomic_rcu_set() makes the data item visible to readers.
> + before qatomic_rcu_set() makes the data item visible to readers.
> If this rule is observed, writes will happen in the opposite
> order as reads in the RCU read-side critical sections (or if
> there is just one update), and there will be no need for other
> @@ -212,7 +212,7 @@ DIFFERENCES WITH LINUX
> programming; not allowing this would prevent upgrading an RCU read-side
> critical section to become an updater.
>
> -- atomic_rcu_read and atomic_rcu_set replace rcu_dereference and
> +- qatomic_rcu_read and qatomic_rcu_set replace rcu_dereference and
> rcu_assign_pointer. They take a _pointer_ to the variable being accessed.
>
> - call_rcu is a macro that has an extra argument (the name of the first
> @@ -257,7 +257,7 @@ may be used as a restricted reference-counting mechanism. For example,
> consider the following code fragment:
>
> rcu_read_lock();
> - p = atomic_rcu_read(&foo);
> + p = qatomic_rcu_read(&foo);
> /* do something with p. */
> rcu_read_unlock();
>
> @@ -268,7 +268,7 @@ The write side looks simply like this (with appropriate locking):
>
> qemu_mutex_lock(&foo_mutex);
> old = foo;
> - atomic_rcu_set(&foo, new);
> + qatomic_rcu_set(&foo, new);
> qemu_mutex_unlock(&foo_mutex);
> synchronize_rcu();
> free(old);
> @@ -277,7 +277,7 @@ If the processing cannot be done purely within the critical section, it
> is possible to combine this idiom with a "real" reference count:
>
> rcu_read_lock();
> - p = atomic_rcu_read(&foo);
> + p = qatomic_rcu_read(&foo);
> foo_ref(p);
> rcu_read_unlock();
> /* do something with p. */
> @@ -287,7 +287,7 @@ The write side can be like this:
>
> qemu_mutex_lock(&foo_mutex);
> old = foo;
> - atomic_rcu_set(&foo, new);
> + qatomic_rcu_set(&foo, new);
> qemu_mutex_unlock(&foo_mutex);
> synchronize_rcu();
> foo_unref(old);
> @@ -296,7 +296,7 @@ or with call_rcu:
>
> qemu_mutex_lock(&foo_mutex);
> old = foo;
> - atomic_rcu_set(&foo, new);
> + qatomic_rcu_set(&foo, new);
> qemu_mutex_unlock(&foo_mutex);
> call_rcu(foo_unref, old, rcu);
>
> @@ -307,7 +307,7 @@ last reference may be dropped on the read side. Hence you can
> use call_rcu() instead:
>
> foo_unref(struct foo *p) {
> - if (atomic_fetch_dec(&p->refcount) == 1) {
> + if (qatomic_fetch_dec(&p->refcount) == 1) {
> call_rcu(foo_destroy, p, rcu);
> }
> }
> @@ -375,7 +375,7 @@ Instead, we store the size of the array with the array itself:
>
> read side:
> rcu_read_lock();
> - struct arr *array = atomic_rcu_read(&global_array);
> + struct arr *array = qatomic_rcu_read(&global_array);
> x = i < array->size ? array->data[i] : -1;
> rcu_read_unlock();
> return x;
> @@ -392,7 +392,7 @@ Instead, we store the size of the array with the array itself:
>
> /* Removal phase. */
> old_array = global_array;
> - atomic_rcu_set(&new_array->data, new_array);
> + qatomic_rcu_set(&new_array->data, new_array);
> synchronize_rcu();
>
> /* Reclamation phase. */
> diff --git a/accel/tcg/atomic_template.h b/accel/tcg/atomic_template.h
> index 26969487d6..0ff7f913e1 100644
> --- a/accel/tcg/atomic_template.h
> +++ b/accel/tcg/atomic_template.h
> @@ -83,7 +83,7 @@ ABI_TYPE ATOMIC_NAME(cmpxchg)(CPUArchState *env, target_ulong addr,
> #if DATA_SIZE == 16
> ret = atomic16_cmpxchg(haddr, cmpv, newv);
> #else
> - ret = atomic_cmpxchg__nocheck(haddr, cmpv, newv);
> + ret = qatomic_cmpxchg__nocheck(haddr, cmpv, newv);
> #endif
> ATOMIC_MMU_CLEANUP;
> atomic_trace_rmw_post(env, addr, info);
> @@ -131,7 +131,7 @@ ABI_TYPE ATOMIC_NAME(xchg)(CPUArchState *env, target_ulong addr,
> ATOMIC_MMU_IDX);
>
> atomic_trace_rmw_pre(env, addr, info);
> - ret = atomic_xchg__nocheck(haddr, val);
> + ret = qatomic_xchg__nocheck(haddr, val);
> ATOMIC_MMU_CLEANUP;
> atomic_trace_rmw_post(env, addr, info);
> return ret;
> @@ -147,7 +147,7 @@ ABI_TYPE ATOMIC_NAME(X)(CPUArchState *env, target_ulong addr, \
> uint16_t info = trace_mem_build_info(SHIFT, false, 0, false, \
> ATOMIC_MMU_IDX); \
> atomic_trace_rmw_pre(env, addr, info); \
> - ret = atomic_##X(haddr, val); \
> + ret = qatomic_##X(haddr, val); \
> ATOMIC_MMU_CLEANUP; \
> atomic_trace_rmw_post(env, addr, info); \
> return ret; \
> @@ -182,10 +182,10 @@ ABI_TYPE ATOMIC_NAME(X)(CPUArchState *env, target_ulong addr, \
> ATOMIC_MMU_IDX); \
> atomic_trace_rmw_pre(env, addr, info); \
> smp_mb(); \
> - cmp = atomic_read__nocheck(haddr); \
> + cmp = qatomic_read__nocheck(haddr); \
> do { \
> old = cmp; new = FN(old, val); \
> - cmp = atomic_cmpxchg__nocheck(haddr, old, new); \
> + cmp = qatomic_cmpxchg__nocheck(haddr, old, new); \
> } while (cmp != old); \
> ATOMIC_MMU_CLEANUP; \
> atomic_trace_rmw_post(env, addr, info); \
> @@ -230,7 +230,7 @@ ABI_TYPE ATOMIC_NAME(cmpxchg)(CPUArchState *env, target_ulong addr,
> #if DATA_SIZE == 16
> ret = atomic16_cmpxchg(haddr, BSWAP(cmpv), BSWAP(newv));
> #else
> - ret = atomic_cmpxchg__nocheck(haddr, BSWAP(cmpv), BSWAP(newv));
> + ret = qatomic_cmpxchg__nocheck(haddr, BSWAP(cmpv), BSWAP(newv));
> #endif
> ATOMIC_MMU_CLEANUP;
> atomic_trace_rmw_post(env, addr, info);
> @@ -280,7 +280,7 @@ ABI_TYPE ATOMIC_NAME(xchg)(CPUArchState *env, target_ulong addr,
> ATOMIC_MMU_IDX);
>
> atomic_trace_rmw_pre(env, addr, info);
> - ret = atomic_xchg__nocheck(haddr, BSWAP(val));
> + ret = qatomic_xchg__nocheck(haddr, BSWAP(val));
> ATOMIC_MMU_CLEANUP;
> atomic_trace_rmw_post(env, addr, info);
> return BSWAP(ret);
> @@ -296,7 +296,7 @@ ABI_TYPE ATOMIC_NAME(X)(CPUArchState *env, target_ulong addr, \
> uint16_t info = trace_mem_build_info(SHIFT, false, MO_BSWAP, \
> false, ATOMIC_MMU_IDX); \
> atomic_trace_rmw_pre(env, addr, info); \
> - ret = atomic_##X(haddr, BSWAP(val)); \
> + ret = qatomic_##X(haddr, BSWAP(val)); \
> ATOMIC_MMU_CLEANUP; \
> atomic_trace_rmw_post(env, addr, info); \
> return BSWAP(ret); \
> @@ -329,10 +329,10 @@ ABI_TYPE ATOMIC_NAME(X)(CPUArchState *env, target_ulong addr, \
> false, ATOMIC_MMU_IDX); \
> atomic_trace_rmw_pre(env, addr, info); \
> smp_mb(); \
> - ldn = atomic_read__nocheck(haddr); \
> + ldn = qatomic_read__nocheck(haddr); \
> do { \
> ldo = ldn; old = BSWAP(ldo); new = FN(old, val); \
> - ldn = atomic_cmpxchg__nocheck(haddr, ldo, BSWAP(new)); \
> + ldn = qatomic_cmpxchg__nocheck(haddr, ldo, BSWAP(new)); \
> } while (ldo != ldn); \
> ATOMIC_MMU_CLEANUP; \
> atomic_trace_rmw_post(env, addr, info); \
> diff --git a/include/block/aio-wait.h b/include/block/aio-wait.h
> index 716d2639df..b39eefb38d 100644
> --- a/include/block/aio-wait.h
> +++ b/include/block/aio-wait.h
> @@ -80,7 +80,7 @@ extern AioWait global_aio_wait;
> AioWait *wait_ = &global_aio_wait; \
> AioContext *ctx_ = (ctx); \
> /* Increment wait_->num_waiters before evaluating cond. */ \
> - atomic_inc(&wait_->num_waiters); \
> + qatomic_inc(&wait_->num_waiters); \
> if (ctx_ && in_aio_context_home_thread(ctx_)) { \
> while ((cond)) { \
> aio_poll(ctx_, true); \
> @@ -100,7 +100,7 @@ extern AioWait global_aio_wait;
> waited_ = true; \
> } \
> } \
> - atomic_dec(&wait_->num_waiters); \
> + qatomic_dec(&wait_->num_waiters); \
> waited_; })
>
> /**
> diff --git a/include/block/aio.h b/include/block/aio.h
> index b2f703fa3f..ec8c5af642 100644
> --- a/include/block/aio.h
> +++ b/include/block/aio.h
> @@ -595,7 +595,7 @@ int64_t aio_compute_timeout(AioContext *ctx);
> */
> static inline void aio_disable_external(AioContext *ctx)
> {
> - atomic_inc(&ctx->external_disable_cnt);
> + qatomic_inc(&ctx->external_disable_cnt);
> }
>
> /**
> @@ -608,7 +608,7 @@ static inline void aio_enable_external(AioContext *ctx)
> {
> int old;
>
> - old = atomic_fetch_dec(&ctx->external_disable_cnt);
> + old = qatomic_fetch_dec(&ctx->external_disable_cnt);
> assert(old > 0);
> if (old == 1) {
> /* Kick event loop so it re-arms file descriptors */
> @@ -624,7 +624,7 @@ static inline void aio_enable_external(AioContext *ctx)
> */
> static inline bool aio_external_disabled(AioContext *ctx)
> {
> - return atomic_read(&ctx->external_disable_cnt);
> + return qatomic_read(&ctx->external_disable_cnt);
> }
>
> /**
> @@ -637,7 +637,7 @@ static inline bool aio_external_disabled(AioContext *ctx)
> */
> static inline bool aio_node_check(AioContext *ctx, bool is_external)
> {
> - return !is_external || !atomic_read(&ctx->external_disable_cnt);
> + return !is_external || !qatomic_read(&ctx->external_disable_cnt);
> }
>
> /**
> diff --git a/include/exec/cpu_ldst.h b/include/exec/cpu_ldst.h
> index c14a48f65e..30605edab9 100644
> --- a/include/exec/cpu_ldst.h
> +++ b/include/exec/cpu_ldst.h
> @@ -299,7 +299,7 @@ static inline target_ulong tlb_addr_write(const CPUTLBEntry *entry)
> #if TCG_OVERSIZED_GUEST
> return entry->addr_write;
> #else
> - return atomic_read(&entry->addr_write);
> + return qatomic_read(&entry->addr_write);
> #endif
> }
>
> diff --git a/include/exec/exec-all.h b/include/exec/exec-all.h
> index 3cf88272df..1fe28d574f 100644
> --- a/include/exec/exec-all.h
> +++ b/include/exec/exec-all.h
> @@ -89,7 +89,7 @@ void QEMU_NORETURN cpu_loop_exit_atomic(CPUState *cpu, uintptr_t pc);
> */
> static inline bool cpu_loop_exit_requested(CPUState *cpu)
> {
> - return (int32_t)atomic_read(&cpu_neg(cpu)->icount_decr.u32) < 0;
> + return (int32_t)qatomic_read(&cpu_neg(cpu)->icount_decr.u32) < 0;
> }
>
> #if !defined(CONFIG_USER_ONLY)
> @@ -487,10 +487,10 @@ struct TranslationBlock {
>
> extern bool parallel_cpus;
>
> -/* Hide the atomic_read to make code a little easier on the eyes */
> +/* Hide the qatomic_read to make code a little easier on the eyes */
> static inline uint32_t tb_cflags(const TranslationBlock *tb)
> {
> - return atomic_read(&tb->cflags);
> + return qatomic_read(&tb->cflags);
> }
>
> /* current cflags for hashing/comparison */
> diff --git a/include/exec/log.h b/include/exec/log.h
> index 3ed797c1c8..86871f403a 100644
> --- a/include/exec/log.h
> +++ b/include/exec/log.h
> @@ -19,7 +19,7 @@ static inline void log_cpu_state(CPUState *cpu, int flags)
>
> if (qemu_log_enabled()) {
> rcu_read_lock();
> - logfile = atomic_rcu_read(&qemu_logfile);
> + logfile = qatomic_rcu_read(&qemu_logfile);
> if (logfile) {
> cpu_dump_state(cpu, logfile->fd, flags);
> }
> @@ -49,7 +49,7 @@ static inline void log_target_disas(CPUState *cpu, target_ulong start,
> {
> QemuLogFile *logfile;
> rcu_read_lock();
> - logfile = atomic_rcu_read(&qemu_logfile);
> + logfile = qatomic_rcu_read(&qemu_logfile);
> if (logfile) {
> target_disas(logfile->fd, cpu, start, len);
> }
> @@ -60,7 +60,7 @@ static inline void log_disas(void *code, unsigned long size, const char *note)
> {
> QemuLogFile *logfile;
> rcu_read_lock();
> - logfile = atomic_rcu_read(&qemu_logfile);
> + logfile = qatomic_rcu_read(&qemu_logfile);
> if (logfile) {
> disas(logfile->fd, code, size, note);
> }
> diff --git a/include/exec/memory.h b/include/exec/memory.h
> index f1bb2a7df5..06b85e3a73 100644
> --- a/include/exec/memory.h
> +++ b/include/exec/memory.h
> @@ -685,7 +685,7 @@ struct FlatView {
>
> static inline FlatView *address_space_to_flatview(AddressSpace *as)
> {
> - return atomic_rcu_read(&as->current_map);
> + return qatomic_rcu_read(&as->current_map);
> }
>
>
> diff --git a/include/exec/ram_addr.h b/include/exec/ram_addr.h
> index 3ef729a23c..c6d2ef1d07 100644
> --- a/include/exec/ram_addr.h
> +++ b/include/exec/ram_addr.h
> @@ -164,7 +164,7 @@ static inline bool cpu_physical_memory_get_dirty(ram_addr_t start,
> page = start >> TARGET_PAGE_BITS;
>
> WITH_RCU_READ_LOCK_GUARD() {
> - blocks = atomic_rcu_read(&ram_list.dirty_memory[client]);
> + blocks = qatomic_rcu_read(&ram_list.dirty_memory[client]);
>
> idx = page / DIRTY_MEMORY_BLOCK_SIZE;
> offset = page % DIRTY_MEMORY_BLOCK_SIZE;
> @@ -205,7 +205,7 @@ static inline bool cpu_physical_memory_all_dirty(ram_addr_t start,
>
> RCU_READ_LOCK_GUARD();
>
> - blocks = atomic_rcu_read(&ram_list.dirty_memory[client]);
> + blocks = qatomic_rcu_read(&ram_list.dirty_memory[client]);
>
> idx = page / DIRTY_MEMORY_BLOCK_SIZE;
> offset = page % DIRTY_MEMORY_BLOCK_SIZE;
> @@ -278,7 +278,7 @@ static inline void cpu_physical_memory_set_dirty_flag(ram_addr_t addr,
>
> RCU_READ_LOCK_GUARD();
>
> - blocks = atomic_rcu_read(&ram_list.dirty_memory[client]);
> + blocks = qatomic_rcu_read(&ram_list.dirty_memory[client]);
>
> set_bit_atomic(offset, blocks->blocks[idx]);
> }
> @@ -301,7 +301,7 @@ static inline void cpu_physical_memory_set_dirty_range(ram_addr_t start,
>
> WITH_RCU_READ_LOCK_GUARD() {
> for (i = 0; i < DIRTY_MEMORY_NUM; i++) {
> - blocks[i] = atomic_rcu_read(&ram_list.dirty_memory[i]);
> + blocks[i] = qatomic_rcu_read(&ram_list.dirty_memory[i]);
> }
>
> idx = page / DIRTY_MEMORY_BLOCK_SIZE;
> @@ -361,23 +361,25 @@ static inline void cpu_physical_memory_set_dirty_lebitmap(unsigned long *bitmap,
>
> WITH_RCU_READ_LOCK_GUARD() {
> for (i = 0; i < DIRTY_MEMORY_NUM; i++) {
> - blocks[i] = atomic_rcu_read(&ram_list.dirty_memory[i])->blocks;
> + blocks[i] =
> + qatomic_rcu_read(&ram_list.dirty_memory[i])->blocks;
> }
>
> for (k = 0; k < nr; k++) {
> if (bitmap[k]) {
> unsigned long temp = leul_to_cpu(bitmap[k]);
>
> - atomic_or(&blocks[DIRTY_MEMORY_VGA][idx][offset], temp);
> + qatomic_or(&blocks[DIRTY_MEMORY_VGA][idx][offset], temp);
>
> if (global_dirty_log) {
> - atomic_or(&blocks[DIRTY_MEMORY_MIGRATION][idx][offset],
> - temp);
> + qatomic_or(
> + &blocks[DIRTY_MEMORY_MIGRATION][idx][offset],
> + temp);
> }
>
> if (tcg_enabled()) {
> - atomic_or(&blocks[DIRTY_MEMORY_CODE][idx][offset],
> - temp);
> + qatomic_or(&blocks[DIRTY_MEMORY_CODE][idx][offset],
> + temp);
> }
> }
>
> @@ -461,12 +463,12 @@ uint64_t cpu_physical_memory_sync_dirty_bitmap(RAMBlock *rb,
> DIRTY_MEMORY_BLOCK_SIZE);
> unsigned long page = BIT_WORD(start >> TARGET_PAGE_BITS);
>
> - src = atomic_rcu_read(
> + src = qatomic_rcu_read(
> &ram_list.dirty_memory[DIRTY_MEMORY_MIGRATION])->blocks;
>
> for (k = page; k < page + nr; k++) {
> if (src[idx][offset]) {
> - unsigned long bits = atomic_xchg(&src[idx][offset], 0);
> + unsigned long bits = qatomic_xchg(&src[idx][offset], 0);
> unsigned long new_dirty;
> new_dirty = ~dest[k];
> dest[k] |= bits;
> diff --git a/include/exec/ramlist.h b/include/exec/ramlist.h
> index bc4faa1b00..26704aa3b0 100644
> --- a/include/exec/ramlist.h
> +++ b/include/exec/ramlist.h
> @@ -19,7 +19,7 @@ typedef struct RAMBlockNotifier RAMBlockNotifier;
> * rcu_read_lock();
> *
> * DirtyMemoryBlocks *blocks =
> - * atomic_rcu_read(&ram_list.dirty_memory[DIRTY_MEMORY_MIGRATION]);
> + * qatomic_rcu_read(&ram_list.dirty_memory[DIRTY_MEMORY_MIGRATION]);
> *
> * ram_addr_t idx = (addr >> TARGET_PAGE_BITS) / DIRTY_MEMORY_BLOCK_SIZE;
> * unsigned long *block = blocks.blocks[idx];
> diff --git a/include/exec/tb-lookup.h b/include/exec/tb-lookup.h
> index 26921b6daf..9cf475bb03 100644
> --- a/include/exec/tb-lookup.h
> +++ b/include/exec/tb-lookup.h
> @@ -27,7 +27,7 @@ tb_lookup__cpu_state(CPUState *cpu, target_ulong *pc, target_ulong *cs_base,
>
> cpu_get_tb_cpu_state(env, pc, cs_base, flags);
> hash = tb_jmp_cache_hash_func(*pc);
> - tb = atomic_rcu_read(&cpu->tb_jmp_cache[hash]);
> + tb = qatomic_rcu_read(&cpu->tb_jmp_cache[hash]);
>
> cf_mask &= ~CF_CLUSTER_MASK;
> cf_mask |= cpu->cluster_index << CF_CLUSTER_SHIFT;
> @@ -44,7 +44,7 @@ tb_lookup__cpu_state(CPUState *cpu, target_ulong *pc, target_ulong *cs_base,
> if (tb == NULL) {
> return NULL;
> }
> - atomic_set(&cpu->tb_jmp_cache[hash], tb);
> + qatomic_set(&cpu->tb_jmp_cache[hash], tb);
> return tb;
> }
>
> diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h
> index 99dc33ffeb..6c34798c8b 100644
> --- a/include/hw/core/cpu.h
> +++ b/include/hw/core/cpu.h
> @@ -482,7 +482,7 @@ static inline void cpu_tb_jmp_cache_clear(CPUState *cpu)
> unsigned int i;
>
> for (i = 0; i < TB_JMP_CACHE_SIZE; i++) {
> - atomic_set(&cpu->tb_jmp_cache[i], NULL);
> + qatomic_set(&cpu->tb_jmp_cache[i], NULL);
> }
> }
>
> diff --git a/include/qemu/atomic128.h b/include/qemu/atomic128.h
> index 6b34484e15..ad2bcf45b4 100644
> --- a/include/qemu/atomic128.h
> +++ b/include/qemu/atomic128.h
> @@ -44,7 +44,7 @@
> #if defined(CONFIG_ATOMIC128)
> static inline Int128 atomic16_cmpxchg(Int128 *ptr, Int128 cmp, Int128 new)
> {
> - return atomic_cmpxchg__nocheck(ptr, cmp, new);
> + return qatomic_cmpxchg__nocheck(ptr, cmp, new);
> }
> # define HAVE_CMPXCHG128 1
> #elif defined(CONFIG_CMPXCHG128)
> @@ -89,12 +89,12 @@ Int128 QEMU_ERROR("unsupported atomic")
> #if defined(CONFIG_ATOMIC128)
> static inline Int128 atomic16_read(Int128 *ptr)
> {
> - return atomic_read__nocheck(ptr);
> + return qatomic_read__nocheck(ptr);
> }
>
> static inline void atomic16_set(Int128 *ptr, Int128 val)
> {
> - atomic_set__nocheck(ptr, val);
> + qatomic_set__nocheck(ptr, val);
> }
>
> # define HAVE_ATOMIC128 1
> diff --git a/include/qemu/bitops.h b/include/qemu/bitops.h
> index f55ce8b320..3acbf3384c 100644
> --- a/include/qemu/bitops.h
> +++ b/include/qemu/bitops.h
> @@ -51,7 +51,7 @@ static inline void set_bit_atomic(long nr, unsigned long *addr)
> unsigned long mask = BIT_MASK(nr);
> unsigned long *p = addr + BIT_WORD(nr);
>
> - atomic_or(p, mask);
> + qatomic_or(p, mask);
> }
>
> /**
> diff --git a/include/qemu/coroutine.h b/include/qemu/coroutine.h
> index dfd261c5b1..84eab6e3bf 100644
> --- a/include/qemu/coroutine.h
> +++ b/include/qemu/coroutine.h
> @@ -179,7 +179,7 @@ static inline coroutine_fn void qemu_co_mutex_assert_locked(CoMutex *mutex)
> * because the condition will be false no matter whether we read NULL or
> * the pointer for any other coroutine.
> */
> - assert(atomic_read(&mutex->locked) &&
> + assert(qatomic_read(&mutex->locked) &&
> mutex->holder == qemu_coroutine_self());
> }
>
> diff --git a/include/qemu/log.h b/include/qemu/log.h
> index f4724f7330..9b80660207 100644
> --- a/include/qemu/log.h
> +++ b/include/qemu/log.h
> @@ -36,7 +36,7 @@ static inline bool qemu_log_separate(void)
> bool res = false;
>
> rcu_read_lock();
> - logfile = atomic_rcu_read(&qemu_logfile);
> + logfile = qatomic_rcu_read(&qemu_logfile);
> if (logfile && logfile->fd != stderr) {
> res = true;
> }
> @@ -75,7 +75,7 @@ static inline FILE *qemu_log_lock(void)
> {
> QemuLogFile *logfile;
> rcu_read_lock();
> - logfile = atomic_rcu_read(&qemu_logfile);
> + logfile = qatomic_rcu_read(&qemu_logfile);
> if (logfile) {
> qemu_flockfile(logfile->fd);
> return logfile->fd;
> @@ -102,7 +102,7 @@ qemu_log_vprintf(const char *fmt, va_list va)
> QemuLogFile *logfile;
>
> rcu_read_lock();
> - logfile = atomic_rcu_read(&qemu_logfile);
> + logfile = qatomic_rcu_read(&qemu_logfile);
> if (logfile) {
> vfprintf(logfile->fd, fmt, va);
> }
> diff --git a/include/qemu/queue.h b/include/qemu/queue.h
> index 456a5b01ee..e029e7bf66 100644
> --- a/include/qemu/queue.h
> +++ b/include/qemu/queue.h
> @@ -218,12 +218,12 @@ struct { \
> typeof(elm) save_sle_next; \
> do { \
> save_sle_next = (elm)->field.sle_next = (head)->slh_first; \
> - } while (atomic_cmpxchg(&(head)->slh_first, save_sle_next, (elm)) != \
> + } while (qatomic_cmpxchg(&(head)->slh_first, save_sle_next, (elm)) !=\
> save_sle_next); \
> } while (/*CONSTCOND*/0)
>
> #define QSLIST_MOVE_ATOMIC(dest, src) do { \
> - (dest)->slh_first = atomic_xchg(&(src)->slh_first, NULL); \
> + (dest)->slh_first = qatomic_xchg(&(src)->slh_first, NULL); \
> } while (/*CONSTCOND*/0)
>
> #define QSLIST_REMOVE_HEAD(head, field) do { \
> @@ -376,7 +376,8 @@ struct { \
> /*
> * Simple queue access methods.
> */
> -#define QSIMPLEQ_EMPTY_ATOMIC(head) (atomic_read(&((head)->sqh_first)) == NULL)
> +#define QSIMPLEQ_EMPTY_ATOMIC(head) \
> + (qatomic_read(&((head)->sqh_first)) == NULL)
> #define QSIMPLEQ_EMPTY(head) ((head)->sqh_first == NULL)
> #define QSIMPLEQ_FIRST(head) ((head)->sqh_first)
> #define QSIMPLEQ_NEXT(elm, field) ((elm)->field.sqe_next)
> diff --git a/include/qemu/rcu.h b/include/qemu/rcu.h
> index 0e375ebe13..515d327cf1 100644
> --- a/include/qemu/rcu.h
> +++ b/include/qemu/rcu.h
> @@ -79,8 +79,8 @@ static inline void rcu_read_lock(void)
> return;
> }
>
> - ctr = atomic_read(&rcu_gp_ctr);
> - atomic_set(&p_rcu_reader->ctr, ctr);
> + ctr = qatomic_read(&rcu_gp_ctr);
> + qatomic_set(&p_rcu_reader->ctr, ctr);
>
> /* Write p_rcu_reader->ctr before reading RCU-protected pointers. */
> smp_mb_placeholder();
> @@ -100,12 +100,12 @@ static inline void rcu_read_unlock(void)
> * smp_mb_placeholder(), this ensures writes to p_rcu_reader->ctr
> * are sequentially consistent.
> */
> - atomic_store_release(&p_rcu_reader->ctr, 0);
> + qatomic_store_release(&p_rcu_reader->ctr, 0);
>
> /* Write p_rcu_reader->ctr before reading p_rcu_reader->waiting. */
> smp_mb_placeholder();
> - if (unlikely(atomic_read(&p_rcu_reader->waiting))) {
> - atomic_set(&p_rcu_reader->waiting, false);
> + if (unlikely(qatomic_read(&p_rcu_reader->waiting))) {
> + qatomic_set(&p_rcu_reader->waiting, false);
> qemu_event_set(&rcu_gp_event);
> }
> }
> diff --git a/include/qemu/rcu_queue.h b/include/qemu/rcu_queue.h
> index 558961cc27..0e53ddd530 100644
> --- a/include/qemu/rcu_queue.h
> +++ b/include/qemu/rcu_queue.h
> @@ -36,9 +36,9 @@ extern "C" {
> /*
> * List access methods.
> */
> -#define QLIST_EMPTY_RCU(head) (atomic_read(&(head)->lh_first) == NULL)
> -#define QLIST_FIRST_RCU(head) (atomic_rcu_read(&(head)->lh_first))
> -#define QLIST_NEXT_RCU(elm, field) (atomic_rcu_read(&(elm)->field.le_next))
> +#define QLIST_EMPTY_RCU(head) (qatomic_read(&(head)->lh_first) == NULL)
> +#define QLIST_FIRST_RCU(head) (qatomic_rcu_read(&(head)->lh_first))
> +#define QLIST_NEXT_RCU(elm, field) (qatomic_rcu_read(&(elm)->field.le_next))
>
> /*
> * List functions.
> @@ -46,7 +46,7 @@ extern "C" {
>
>
> /*
> - * The difference between atomic_read/set and atomic_rcu_read/set
> + * The difference between qatomic_read/set and qatomic_rcu_read/set
> * is in the including of a read/write memory barrier to the volatile
> * access. atomic_rcu_* macros include the memory barrier, the
> * plain atomic macros do not. Therefore, it should be correct to
> @@ -66,7 +66,7 @@ extern "C" {
> #define QLIST_INSERT_AFTER_RCU(listelm, elm, field) do { \
> (elm)->field.le_next = (listelm)->field.le_next; \
> (elm)->field.le_prev = &(listelm)->field.le_next; \
> - atomic_rcu_set(&(listelm)->field.le_next, (elm)); \
> + qatomic_rcu_set(&(listelm)->field.le_next, (elm)); \
> if ((elm)->field.le_next != NULL) { \
> (elm)->field.le_next->field.le_prev = \
> &(elm)->field.le_next; \
> @@ -82,7 +82,7 @@ extern "C" {
> #define QLIST_INSERT_BEFORE_RCU(listelm, elm, field) do { \
> (elm)->field.le_prev = (listelm)->field.le_prev; \
> (elm)->field.le_next = (listelm); \
> - atomic_rcu_set((listelm)->field.le_prev, (elm)); \
> + qatomic_rcu_set((listelm)->field.le_prev, (elm)); \
> (listelm)->field.le_prev = &(elm)->field.le_next; \
> } while (/*CONSTCOND*/0)
>
> @@ -95,7 +95,7 @@ extern "C" {
> #define QLIST_INSERT_HEAD_RCU(head, elm, field) do { \
> (elm)->field.le_prev = &(head)->lh_first; \
> (elm)->field.le_next = (head)->lh_first; \
> - atomic_rcu_set((&(head)->lh_first), (elm)); \
> + qatomic_rcu_set((&(head)->lh_first), (elm)); \
> if ((elm)->field.le_next != NULL) { \
> (elm)->field.le_next->field.le_prev = \
> &(elm)->field.le_next; \
> @@ -112,20 +112,20 @@ extern "C" {
> (elm)->field.le_next->field.le_prev = \
> (elm)->field.le_prev; \
> } \
> - atomic_set((elm)->field.le_prev, (elm)->field.le_next); \
> + qatomic_set((elm)->field.le_prev, (elm)->field.le_next); \
> } while (/*CONSTCOND*/0)
>
> /* List traversal must occur within an RCU critical section. */
> #define QLIST_FOREACH_RCU(var, head, field) \
> - for ((var) = atomic_rcu_read(&(head)->lh_first); \
> + for ((var) = qatomic_rcu_read(&(head)->lh_first); \
> (var); \
> - (var) = atomic_rcu_read(&(var)->field.le_next))
> + (var) = qatomic_rcu_read(&(var)->field.le_next))
>
> /* List traversal must occur within an RCU critical section. */
> #define QLIST_FOREACH_SAFE_RCU(var, head, field, next_var) \
> - for ((var) = (atomic_rcu_read(&(head)->lh_first)); \
> + for ((var) = (qatomic_rcu_read(&(head)->lh_first)); \
> (var) && \
> - ((next_var) = atomic_rcu_read(&(var)->field.le_next), 1); \
> + ((next_var) = qatomic_rcu_read(&(var)->field.le_next), 1); \
> (var) = (next_var))
>
> /*
> @@ -133,9 +133,10 @@ extern "C" {
> */
>
> /* Simple queue access methods */
> -#define QSIMPLEQ_EMPTY_RCU(head) (atomic_read(&(head)->sqh_first) == NULL)
> -#define QSIMPLEQ_FIRST_RCU(head) atomic_rcu_read(&(head)->sqh_first)
> -#define QSIMPLEQ_NEXT_RCU(elm, field) atomic_rcu_read(&(elm)->field.sqe_next)
> +#define QSIMPLEQ_EMPTY_RCU(head) \
> + (qatomic_read(&(head)->sqh_first) == NULL)
> +#define QSIMPLEQ_FIRST_RCU(head) qatomic_rcu_read(&(head)->sqh_first)
> +#define QSIMPLEQ_NEXT_RCU(elm, field) qatomic_rcu_read(&(elm)->field.sqe_next)
>
> /* Simple queue functions */
> #define QSIMPLEQ_INSERT_HEAD_RCU(head, elm, field) do { \
> @@ -143,12 +144,12 @@ extern "C" {
> if ((elm)->field.sqe_next == NULL) { \
> (head)->sqh_last = &(elm)->field.sqe_next; \
> } \
> - atomic_rcu_set(&(head)->sqh_first, (elm)); \
> + qatomic_rcu_set(&(head)->sqh_first, (elm)); \
> } while (/*CONSTCOND*/0)
>
> #define QSIMPLEQ_INSERT_TAIL_RCU(head, elm, field) do { \
> (elm)->field.sqe_next = NULL; \
> - atomic_rcu_set((head)->sqh_last, (elm)); \
> + qatomic_rcu_set((head)->sqh_last, (elm)); \
> (head)->sqh_last = &(elm)->field.sqe_next; \
> } while (/*CONSTCOND*/0)
>
> @@ -157,11 +158,11 @@ extern "C" {
> if ((elm)->field.sqe_next == NULL) { \
> (head)->sqh_last = &(elm)->field.sqe_next; \
> } \
> - atomic_rcu_set(&(listelm)->field.sqe_next, (elm)); \
> + qatomic_rcu_set(&(listelm)->field.sqe_next, (elm)); \
> } while (/*CONSTCOND*/0)
>
> #define QSIMPLEQ_REMOVE_HEAD_RCU(head, field) do { \
> - atomic_set(&(head)->sqh_first, (head)->sqh_first->field.sqe_next); \
> + qatomic_set(&(head)->sqh_first, (head)->sqh_first->field.sqe_next);\
> if ((head)->sqh_first == NULL) { \
> (head)->sqh_last = &(head)->sqh_first; \
> } \
> @@ -175,7 +176,7 @@ extern "C" {
> while (curr->field.sqe_next != (elm)) { \
> curr = curr->field.sqe_next; \
> } \
> - atomic_set(&curr->field.sqe_next, \
> + qatomic_set(&curr->field.sqe_next, \
> curr->field.sqe_next->field.sqe_next); \
> if (curr->field.sqe_next == NULL) { \
> (head)->sqh_last = &(curr)->field.sqe_next; \
> @@ -184,13 +185,13 @@ extern "C" {
> } while (/*CONSTCOND*/0)
>
> #define QSIMPLEQ_FOREACH_RCU(var, head, field) \
> - for ((var) = atomic_rcu_read(&(head)->sqh_first); \
> + for ((var) = qatomic_rcu_read(&(head)->sqh_first); \
> (var); \
> - (var) = atomic_rcu_read(&(var)->field.sqe_next))
> + (var) = qatomic_rcu_read(&(var)->field.sqe_next))
>
> #define QSIMPLEQ_FOREACH_SAFE_RCU(var, head, field, next) \
> - for ((var) = atomic_rcu_read(&(head)->sqh_first); \
> - (var) && ((next) = atomic_rcu_read(&(var)->field.sqe_next), 1); \
> + for ((var) = qatomic_rcu_read(&(head)->sqh_first); \
> + (var) && ((next) = qatomic_rcu_read(&(var)->field.sqe_next), 1);\
> (var) = (next))
>
> /*
> @@ -198,9 +199,9 @@ extern "C" {
> */
>
> /* Tail queue access methods */
> -#define QTAILQ_EMPTY_RCU(head) (atomic_read(&(head)->tqh_first) == NULL)
> -#define QTAILQ_FIRST_RCU(head) atomic_rcu_read(&(head)->tqh_first)
> -#define QTAILQ_NEXT_RCU(elm, field) atomic_rcu_read(&(elm)->field.tqe_next)
> +#define QTAILQ_EMPTY_RCU(head) (qatomic_read(&(head)->tqh_first) == NULL)
> +#define QTAILQ_FIRST_RCU(head) qatomic_rcu_read(&(head)->tqh_first)
> +#define QTAILQ_NEXT_RCU(elm, field) qatomic_rcu_read(&(elm)->field.tqe_next)
>
> /* Tail queue functions */
> #define QTAILQ_INSERT_HEAD_RCU(head, elm, field) do { \
> @@ -211,14 +212,14 @@ extern "C" {
> } else { \
> (head)->tqh_circ.tql_prev = &(elm)->field.tqe_circ; \
> } \
> - atomic_rcu_set(&(head)->tqh_first, (elm)); \
> + qatomic_rcu_set(&(head)->tqh_first, (elm)); \
> (elm)->field.tqe_circ.tql_prev = &(head)->tqh_circ; \
> } while (/*CONSTCOND*/0)
>
> #define QTAILQ_INSERT_TAIL_RCU(head, elm, field) do { \
> (elm)->field.tqe_next = NULL; \
> (elm)->field.tqe_circ.tql_prev = (head)->tqh_circ.tql_prev; \
> - atomic_rcu_set(&(head)->tqh_circ.tql_prev->tql_next, (elm)); \
> + qatomic_rcu_set(&(head)->tqh_circ.tql_prev->tql_next, (elm)); \
> (head)->tqh_circ.tql_prev = &(elm)->field.tqe_circ; \
> } while (/*CONSTCOND*/0)
>
> @@ -230,14 +231,14 @@ extern "C" {
> } else { \
> (head)->tqh_circ.tql_prev = &(elm)->field.tqe_circ; \
> } \
> - atomic_rcu_set(&(listelm)->field.tqe_next, (elm)); \
> + qatomic_rcu_set(&(listelm)->field.tqe_next, (elm)); \
> (elm)->field.tqe_circ.tql_prev = &(listelm)->field.tqe_circ; \
> } while (/*CONSTCOND*/0)
>
> #define QTAILQ_INSERT_BEFORE_RCU(listelm, elm, field) do { \
> (elm)->field.tqe_circ.tql_prev = (listelm)->field.tqe_circ.tql_prev; \
> (elm)->field.tqe_next = (listelm); \
> - atomic_rcu_set(&(listelm)->field.tqe_circ.tql_prev->tql_next, (elm)); \
> + qatomic_rcu_set(&(listelm)->field.tqe_circ.tql_prev->tql_next, (elm));\
> (listelm)->field.tqe_circ.tql_prev = &(elm)->field.tqe_circ; \
> } while (/*CONSTCOND*/0)
>
> @@ -248,18 +249,19 @@ extern "C" {
> } else { \
> (head)->tqh_circ.tql_prev = (elm)->field.tqe_circ.tql_prev; \
> } \
> - atomic_set(&(elm)->field.tqe_circ.tql_prev->tql_next, (elm)->field.tqe_next); \
> + qatomic_set(&(elm)->field.tqe_circ.tql_prev->tql_next, \
> + (elm)->field.tqe_next); \
> (elm)->field.tqe_circ.tql_prev = NULL; \
> } while (/*CONSTCOND*/0)
>
> #define QTAILQ_FOREACH_RCU(var, head, field) \
> - for ((var) = atomic_rcu_read(&(head)->tqh_first); \
> + for ((var) = qatomic_rcu_read(&(head)->tqh_first); \
> (var); \
> - (var) = atomic_rcu_read(&(var)->field.tqe_next))
> + (var) = qatomic_rcu_read(&(var)->field.tqe_next))
>
> #define QTAILQ_FOREACH_SAFE_RCU(var, head, field, next) \
> - for ((var) = atomic_rcu_read(&(head)->tqh_first); \
> - (var) && ((next) = atomic_rcu_read(&(var)->field.tqe_next), 1); \
> + for ((var) = qatomic_rcu_read(&(head)->tqh_first); \
> + (var) && ((next) = qatomic_rcu_read(&(var)->field.tqe_next), 1);\
> (var) = (next))
>
> /*
> @@ -267,23 +269,23 @@ extern "C" {
> */
>
> /* Singly-linked list access methods */
> -#define QSLIST_EMPTY_RCU(head) (atomic_read(&(head)->slh_first) == NULL)
> -#define QSLIST_FIRST_RCU(head) atomic_rcu_read(&(head)->slh_first)
> -#define QSLIST_NEXT_RCU(elm, field) atomic_rcu_read(&(elm)->field.sle_next)
> +#define QSLIST_EMPTY_RCU(head) (qatomic_read(&(head)->slh_first) == NULL)
> +#define QSLIST_FIRST_RCU(head) qatomic_rcu_read(&(head)->slh_first)
> +#define QSLIST_NEXT_RCU(elm, field) qatomic_rcu_read(&(elm)->field.sle_next)
>
> /* Singly-linked list functions */
> #define QSLIST_INSERT_HEAD_RCU(head, elm, field) do { \
> (elm)->field.sle_next = (head)->slh_first; \
> - atomic_rcu_set(&(head)->slh_first, (elm)); \
> + qatomic_rcu_set(&(head)->slh_first, (elm)); \
> } while (/*CONSTCOND*/0)
>
> #define QSLIST_INSERT_AFTER_RCU(head, listelm, elm, field) do { \
> (elm)->field.sle_next = (listelm)->field.sle_next; \
> - atomic_rcu_set(&(listelm)->field.sle_next, (elm)); \
> + qatomic_rcu_set(&(listelm)->field.sle_next, (elm)); \
> } while (/*CONSTCOND*/0)
>
> #define QSLIST_REMOVE_HEAD_RCU(head, field) do { \
> - atomic_set(&(head)->slh_first, (head)->slh_first->field.sle_next); \
> + qatomic_set(&(head)->slh_first, (head)->slh_first->field.sle_next);\
> } while (/*CONSTCOND*/0)
>
> #define QSLIST_REMOVE_RCU(head, elm, type, field) do { \
> @@ -294,19 +296,19 @@ extern "C" {
> while (curr->field.sle_next != (elm)) { \
> curr = curr->field.sle_next; \
> } \
> - atomic_set(&curr->field.sle_next, \
> + qatomic_set(&curr->field.sle_next, \
> curr->field.sle_next->field.sle_next); \
> } \
> } while (/*CONSTCOND*/0)
>
> #define QSLIST_FOREACH_RCU(var, head, field) \
> - for ((var) = atomic_rcu_read(&(head)->slh_first); \
> - (var); \
> - (var) = atomic_rcu_read(&(var)->field.sle_next))
> + for ((var) = qatomic_rcu_read(&(head)->slh_first); \
> + (var); \
> + (var) = qatomic_rcu_read(&(var)->field.sle_next))
>
> -#define QSLIST_FOREACH_SAFE_RCU(var, head, field, next) \
> - for ((var) = atomic_rcu_read(&(head)->slh_first); \
> - (var) && ((next) = atomic_rcu_read(&(var)->field.sle_next), 1); \
> +#define QSLIST_FOREACH_SAFE_RCU(var, head, field, next) \
> + for ((var) = qatomic_rcu_read(&(head)->slh_first); \
> + (var) && ((next) = qatomic_rcu_read(&(var)->field.sle_next), 1); \
> (var) = (next))
>
> #ifdef __cplusplus
> diff --git a/include/qemu/seqlock.h b/include/qemu/seqlock.h
> index 8b6b4ee4bb..ecb7d2c864 100644
> --- a/include/qemu/seqlock.h
> +++ b/include/qemu/seqlock.h
> @@ -32,7 +32,7 @@ static inline void seqlock_init(QemuSeqLock *sl)
> /* Lock out other writers and update the count. */
> static inline void seqlock_write_begin(QemuSeqLock *sl)
> {
> - atomic_set(&sl->sequence, sl->sequence + 1);
> + qatomic_set(&sl->sequence, sl->sequence + 1);
>
> /* Write sequence before updating other fields. */
> smp_wmb();
> @@ -43,7 +43,7 @@ static inline void seqlock_write_end(QemuSeqLock *sl)
> /* Write other fields before finalizing sequence. */
> smp_wmb();
>
> - atomic_set(&sl->sequence, sl->sequence + 1);
> + qatomic_set(&sl->sequence, sl->sequence + 1);
> }
>
> /* Lock out other writers and update the count. */
> @@ -68,7 +68,7 @@ static inline void seqlock_write_unlock_impl(QemuSeqLock *sl, QemuLockable *lock
> static inline unsigned seqlock_read_begin(const QemuSeqLock *sl)
> {
> /* Always fail if a write is in progress. */
> - unsigned ret = atomic_read(&sl->sequence);
> + unsigned ret = qatomic_read(&sl->sequence);
>
> /* Read sequence before reading other fields. */
> smp_rmb();
> @@ -79,7 +79,7 @@ static inline int seqlock_read_retry(const QemuSeqLock *sl, unsigned start)
> {
> /* Read other fields before reading final sequence. */
> smp_rmb();
> - return unlikely(atomic_read(&sl->sequence) != start);
> + return unlikely(qatomic_read(&sl->sequence) != start);
> }
>
> #endif
> diff --git a/include/qemu/stats64.h b/include/qemu/stats64.h
> index 19a5ac4c56..fdd3d1b8f9 100644
> --- a/include/qemu/stats64.h
> +++ b/include/qemu/stats64.h
> @@ -37,27 +37,27 @@ static inline void stat64_init(Stat64 *s, uint64_t value)
>
> static inline uint64_t stat64_get(const Stat64 *s)
> {
> - return atomic_read__nocheck(&s->value);
> + return qatomic_read__nocheck(&s->value);
> }
>
> static inline void stat64_add(Stat64 *s, uint64_t value)
> {
> - atomic_add(&s->value, value);
> + qatomic_add(&s->value, value);
> }
>
> static inline void stat64_min(Stat64 *s, uint64_t value)
> {
> - uint64_t orig = atomic_read__nocheck(&s->value);
> + uint64_t orig = qatomic_read__nocheck(&s->value);
> while (orig > value) {
> - orig = atomic_cmpxchg__nocheck(&s->value, orig, value);
> + orig = qatomic_cmpxchg__nocheck(&s->value, orig, value);
> }
> }
>
> static inline void stat64_max(Stat64 *s, uint64_t value)
> {
> - uint64_t orig = atomic_read__nocheck(&s->value);
> + uint64_t orig = qatomic_read__nocheck(&s->value);
> while (orig < value) {
> - orig = atomic_cmpxchg__nocheck(&s->value, orig, value);
> + orig = qatomic_cmpxchg__nocheck(&s->value, orig, value);
> }
> }
> #else
> @@ -79,7 +79,7 @@ static inline void stat64_add(Stat64 *s, uint64_t value)
> low = (uint32_t) value;
> if (!low) {
> if (high) {
> - atomic_add(&s->high, high);
> + qatomic_add(&s->high, high);
> }
> return;
> }
> @@ -101,7 +101,7 @@ static inline void stat64_add(Stat64 *s, uint64_t value)
> * the high 32 bits, so it can race just fine with stat64_add32_carry
> * and even stat64_get!
> */
> - old = atomic_cmpxchg(&s->low, orig, result);
> + old = qatomic_cmpxchg(&s->low, orig, result);
> if (orig == old) {
> return;
> }
> @@ -116,7 +116,7 @@ static inline void stat64_min(Stat64 *s, uint64_t value)
> high = value >> 32;
> low = (uint32_t) value;
> do {
> - orig_high = atomic_read(&s->high);
> + orig_high = qatomic_read(&s->high);
> if (orig_high < high) {
> return;
> }
> @@ -128,7 +128,7 @@ static inline void stat64_min(Stat64 *s, uint64_t value)
> * the write barrier in stat64_min_slow.
> */
> smp_rmb();
> - orig_low = atomic_read(&s->low);
> + orig_low = qatomic_read(&s->low);
> if (orig_low <= low) {
> return;
> }
> @@ -138,7 +138,7 @@ static inline void stat64_min(Stat64 *s, uint64_t value)
> * we may miss being lucky.
> */
> smp_rmb();
> - orig_high = atomic_read(&s->high);
> + orig_high = qatomic_read(&s->high);
> if (orig_high < high) {
> return;
> }
> @@ -156,7 +156,7 @@ static inline void stat64_max(Stat64 *s, uint64_t value)
> high = value >> 32;
> low = (uint32_t) value;
> do {
> - orig_high = atomic_read(&s->high);
> + orig_high = qatomic_read(&s->high);
> if (orig_high > high) {
> return;
> }
> @@ -168,7 +168,7 @@ static inline void stat64_max(Stat64 *s, uint64_t value)
> * the write barrier in stat64_max_slow.
> */
> smp_rmb();
> - orig_low = atomic_read(&s->low);
> + orig_low = qatomic_read(&s->low);
> if (orig_low >= low) {
> return;
> }
> @@ -178,7 +178,7 @@ static inline void stat64_max(Stat64 *s, uint64_t value)
> * we may miss being lucky.
> */
> smp_rmb();
> - orig_high = atomic_read(&s->high);
> + orig_high = qatomic_read(&s->high);
> if (orig_high > high) {
> return;
> }
> diff --git a/include/qemu/thread.h b/include/qemu/thread.h
> index 4baf4d1715..5435763184 100644
> --- a/include/qemu/thread.h
> +++ b/include/qemu/thread.h
> @@ -70,33 +70,33 @@ extern QemuCondTimedWaitFunc qemu_cond_timedwait_func;
> qemu_cond_timedwait_impl(c, m, ms, __FILE__, __LINE__)
> #else
> #define qemu_mutex_lock(m) ({ \
> - QemuMutexLockFunc _f = atomic_read(&qemu_mutex_lock_func); \
> + QemuMutexLockFunc _f = qatomic_read(&qemu_mutex_lock_func); \
> _f(m, __FILE__, __LINE__); \
> })
>
> -#define qemu_mutex_trylock(m) ({ \
> - QemuMutexTrylockFunc _f = atomic_read(&qemu_mutex_trylock_func); \
> - _f(m, __FILE__, __LINE__); \
> +#define qemu_mutex_trylock(m) ({ \
> + QemuMutexTrylockFunc _f = qatomic_read(&qemu_mutex_trylock_func); \
> + _f(m, __FILE__, __LINE__); \
> })
>
> -#define qemu_rec_mutex_lock(m) ({ \
> - QemuRecMutexLockFunc _f = atomic_read(&qemu_rec_mutex_lock_func); \
> - _f(m, __FILE__, __LINE__); \
> +#define qemu_rec_mutex_lock(m) ({ \
> + QemuRecMutexLockFunc _f = qatomic_read(&qemu_rec_mutex_lock_func);\
> + _f(m, __FILE__, __LINE__); \
> })
>
> #define qemu_rec_mutex_trylock(m) ({ \
> QemuRecMutexTrylockFunc _f; \
> - _f = atomic_read(&qemu_rec_mutex_trylock_func); \
> + _f = qatomic_read(&qemu_rec_mutex_trylock_func); \
> _f(m, __FILE__, __LINE__); \
> })
>
> #define qemu_cond_wait(c, m) ({ \
> - QemuCondWaitFunc _f = atomic_read(&qemu_cond_wait_func); \
> + QemuCondWaitFunc _f = qatomic_read(&qemu_cond_wait_func); \
> _f(c, m, __FILE__, __LINE__); \
> })
>
> #define qemu_cond_timedwait(c, m, ms) ({ \
> - QemuCondTimedWaitFunc _f = atomic_read(&qemu_cond_timedwait_func); \
> + QemuCondTimedWaitFunc _f = qatomic_read(&qemu_cond_timedwait_func);\
> _f(c, m, ms, __FILE__, __LINE__); \
> })
> #endif
> @@ -236,7 +236,7 @@ static inline void qemu_spin_lock(QemuSpin *spin)
> __tsan_mutex_pre_lock(spin, 0);
> #endif
> while (unlikely(__sync_lock_test_and_set(&spin->value, true))) {
> - while (atomic_read(&spin->value)) {
> + while (qatomic_read(&spin->value)) {
> cpu_relax();
> }
> }
> @@ -261,7 +261,7 @@ static inline bool qemu_spin_trylock(QemuSpin *spin)
>
> static inline bool qemu_spin_locked(QemuSpin *spin)
> {
> - return atomic_read(&spin->value);
> + return qatomic_read(&spin->value);
> }
>
> static inline void qemu_spin_unlock(QemuSpin *spin)
> diff --git a/include/standard-headers/drivers/infiniband/hw/vmw_pvrdma/pvrdma_ring.h b/include/standard-headers/drivers/infiniband/hw/vmw_pvrdma/pvrdma_ring.h
> index acd4c8346d..7b4062a1a1 100644
> --- a/include/standard-headers/drivers/infiniband/hw/vmw_pvrdma/pvrdma_ring.h
> +++ b/include/standard-headers/drivers/infiniband/hw/vmw_pvrdma/pvrdma_ring.h
> @@ -68,7 +68,7 @@ static inline int pvrdma_idx_valid(uint32_t idx, uint32_t max_elems)
>
> static inline int32_t pvrdma_idx(int *var, uint32_t max_elems)
> {
> - const unsigned int idx = atomic_read(var);
> + const unsigned int idx = qatomic_read(var);
>
> if (pvrdma_idx_valid(idx, max_elems))
> return idx & (max_elems - 1);
> @@ -77,17 +77,17 @@ static inline int32_t pvrdma_idx(int *var, uint32_t max_elems)
>
> static inline void pvrdma_idx_ring_inc(int *var, uint32_t max_elems)
> {
> - uint32_t idx = atomic_read(var) + 1; /* Increment. */
> + uint32_t idx = qatomic_read(var) + 1; /* Increment. */
>
> idx &= (max_elems << 1) - 1; /* Modulo size, flip gen. */
> - atomic_set(var, idx);
> + qatomic_set(var, idx);
> }
>
> static inline int32_t pvrdma_idx_ring_has_space(const struct pvrdma_ring *r,
> uint32_t max_elems, uint32_t *out_tail)
> {
> - const uint32_t tail = atomic_read(&r->prod_tail);
> - const uint32_t head = atomic_read(&r->cons_head);
> + const uint32_t tail = qatomic_read(&r->prod_tail);
> + const uint32_t head = qatomic_read(&r->cons_head);
>
> if (pvrdma_idx_valid(tail, max_elems) &&
> pvrdma_idx_valid(head, max_elems)) {
> @@ -100,8 +100,8 @@ static inline int32_t pvrdma_idx_ring_has_space(const struct pvrdma_ring *r,
> static inline int32_t pvrdma_idx_ring_has_data(const struct pvrdma_ring *r,
> uint32_t max_elems, uint32_t *out_head)
> {
> - const uint32_t tail = atomic_read(&r->prod_tail);
> - const uint32_t head = atomic_read(&r->cons_head);
> + const uint32_t tail = qatomic_read(&r->prod_tail);
> + const uint32_t head = qatomic_read(&r->cons_head);
>
> if (pvrdma_idx_valid(tail, max_elems) &&
> pvrdma_idx_valid(head, max_elems)) {
> diff --git a/linux-user/qemu.h b/linux-user/qemu.h
> index a69a0bd347..941ca99722 100644
> --- a/linux-user/qemu.h
> +++ b/linux-user/qemu.h
> @@ -146,7 +146,7 @@ typedef struct TaskState {
> /* Nonzero if process_pending_signals() needs to do something (either
> * handle a pending signal or unblock signals).
> * This flag is written from a signal handler so should be accessed via
> - * the atomic_read() and atomic_set() functions. (It is not accessed
> + * the qatomic_read() and qatomic_set() functions. (It is not accessed
> * from multiple threads.)
> */
> int signal_pending;
> diff --git a/tcg/i386/tcg-target.h b/tcg/i386/tcg-target.h
> index 99ac1e3958..d2baf796b0 100644
> --- a/tcg/i386/tcg-target.h
> +++ b/tcg/i386/tcg-target.h
> @@ -215,7 +215,7 @@ static inline void tb_target_set_jmp_target(uintptr_t tc_ptr,
> uintptr_t jmp_addr, uintptr_t addr)
> {
> /* patch the branch destination */
> - atomic_set((int32_t *)jmp_addr, addr - (jmp_addr + 4));
> + qatomic_set((int32_t *)jmp_addr, addr - (jmp_addr + 4));
> /* no need to flush icache explicitly */
> }
>
> diff --git a/tcg/s390/tcg-target.h b/tcg/s390/tcg-target.h
> index 07accabbd1..63c8797bd3 100644
> --- a/tcg/s390/tcg-target.h
> +++ b/tcg/s390/tcg-target.h
> @@ -154,7 +154,7 @@ static inline void tb_target_set_jmp_target(uintptr_t tc_ptr,
> {
> /* patch the branch destination */
> intptr_t disp = addr - (jmp_addr - 2);
> - atomic_set((int32_t *)jmp_addr, disp / 2);
> + qatomic_set((int32_t *)jmp_addr, disp / 2);
> /* no need to flush icache explicitly */
> }
>
> diff --git a/tcg/tci/tcg-target.h b/tcg/tci/tcg-target.h
> index 8b90ab71cb..8c1c1d265d 100644
> --- a/tcg/tci/tcg-target.h
> +++ b/tcg/tci/tcg-target.h
> @@ -206,7 +206,7 @@ static inline void tb_target_set_jmp_target(uintptr_t tc_ptr,
> uintptr_t jmp_addr, uintptr_t addr)
> {
> /* patch the branch destination */
> - atomic_set((int32_t *)jmp_addr, addr - (jmp_addr + 4));
> + qatomic_set((int32_t *)jmp_addr, addr - (jmp_addr + 4));
> /* no need to flush icache explicitly */
> }
>
> diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
> index ad8b315b35..e4bbf78366 100644
> --- a/accel/kvm/kvm-all.c
> +++ b/accel/kvm/kvm-all.c
> @@ -2379,7 +2379,7 @@ static __thread bool have_sigbus_pending;
>
> static void kvm_cpu_kick(CPUState *cpu)
> {
> - atomic_set(&cpu->kvm_run->immediate_exit, 1);
> + qatomic_set(&cpu->kvm_run->immediate_exit, 1);
> }
>
> static void kvm_cpu_kick_self(void)
> @@ -2400,7 +2400,7 @@ static void kvm_eat_signals(CPUState *cpu)
> int r;
>
> if (kvm_immediate_exit) {
> - atomic_set(&cpu->kvm_run->immediate_exit, 0);
> + qatomic_set(&cpu->kvm_run->immediate_exit, 0);
> /* Write kvm_run->immediate_exit before the cpu->exit_request
> * write in kvm_cpu_exec.
> */
> @@ -2434,7 +2434,7 @@ int kvm_cpu_exec(CPUState *cpu)
> DPRINTF("kvm_cpu_exec()\n");
>
> if (kvm_arch_process_async_events(cpu)) {
> - atomic_set(&cpu->exit_request, 0);
> + qatomic_set(&cpu->exit_request, 0);
> return EXCP_HLT;
> }
>
> @@ -2450,7 +2450,7 @@ int kvm_cpu_exec(CPUState *cpu)
> }
>
> kvm_arch_pre_run(cpu, run);
> - if (atomic_read(&cpu->exit_request)) {
> + if (qatomic_read(&cpu->exit_request)) {
> DPRINTF("interrupt exit requested\n");
> /*
> * KVM requires us to reenter the kernel after IO exits to complete
> @@ -2577,7 +2577,7 @@ int kvm_cpu_exec(CPUState *cpu)
> vm_stop(RUN_STATE_INTERNAL_ERROR);
> }
>
> - atomic_set(&cpu->exit_request, 0);
> + qatomic_set(&cpu->exit_request, 0);
> return ret;
> }
>
> @@ -2994,7 +2994,7 @@ int kvm_on_sigbus_vcpu(CPUState *cpu, int code, void *addr)
> have_sigbus_pending = true;
> pending_sigbus_addr = addr;
> pending_sigbus_code = code;
> - atomic_set(&cpu->exit_request, 1);
> + qatomic_set(&cpu->exit_request, 1);
> return 0;
> #else
> return 1;
> diff --git a/accel/tcg/cpu-exec.c b/accel/tcg/cpu-exec.c
> index 66d38f9d85..e10b46283c 100644
> --- a/accel/tcg/cpu-exec.c
> +++ b/accel/tcg/cpu-exec.c
> @@ -367,7 +367,8 @@ static inline void tb_add_jump(TranslationBlock *tb, int n,
> goto out_unlock_next;
> }
> /* Atomically claim the jump destination slot only if it was NULL */
> - old = atomic_cmpxchg(&tb->jmp_dest[n], (uintptr_t)NULL, (uintptr_t)tb_next);
> + old = qatomic_cmpxchg(&tb->jmp_dest[n], (uintptr_t)NULL,
> + (uintptr_t)tb_next);
> if (old) {
> goto out_unlock_next;
> }
> @@ -407,7 +408,7 @@ static inline TranslationBlock *tb_find(CPUState *cpu,
> tb = tb_gen_code(cpu, pc, cs_base, flags, cf_mask);
> mmap_unlock();
> /* We add the TB in the virtual pc hash table for the fast lookup */
> - atomic_set(&cpu->tb_jmp_cache[tb_jmp_cache_hash_func(pc)], tb);
> + qatomic_set(&cpu->tb_jmp_cache[tb_jmp_cache_hash_func(pc)], tb);
> }
> #ifndef CONFIG_USER_ONLY
> /* We don't take care of direct jumps when address mapping changes in
> @@ -536,9 +537,9 @@ static inline bool cpu_handle_interrupt(CPUState *cpu,
> * Ensure zeroing happens before reading cpu->exit_request or
> * cpu->interrupt_request (see also smp_wmb in cpu_exit())
> */
> - atomic_mb_set(&cpu_neg(cpu)->icount_decr.u16.high, 0);
> + qatomic_mb_set(&cpu_neg(cpu)->icount_decr.u16.high, 0);
>
> - if (unlikely(atomic_read(&cpu->interrupt_request))) {
> + if (unlikely(qatomic_read(&cpu->interrupt_request))) {
> int interrupt_request;
> qemu_mutex_lock_iothread();
> interrupt_request = cpu->interrupt_request;
> @@ -613,10 +614,10 @@ static inline bool cpu_handle_interrupt(CPUState *cpu,
> }
>
> /* Finally, check if we need to exit to the main loop. */
> - if (unlikely(atomic_read(&cpu->exit_request))
> + if (unlikely(qatomic_read(&cpu->exit_request))
> || (use_icount
> && cpu_neg(cpu)->icount_decr.u16.low + cpu->icount_extra == 0)) {
> - atomic_set(&cpu->exit_request, 0);
> + qatomic_set(&cpu->exit_request, 0);
> if (cpu->exception_index == -1) {
> cpu->exception_index = EXCP_INTERRUPT;
> }
> @@ -642,7 +643,7 @@ static inline void cpu_loop_exec_tb(CPUState *cpu, TranslationBlock *tb,
> }
>
> *last_tb = NULL;
> - insns_left = atomic_read(&cpu_neg(cpu)->icount_decr.u32);
> + insns_left = qatomic_read(&cpu_neg(cpu)->icount_decr.u32);
> if (insns_left < 0) {
> /* Something asked us to stop executing chained TBs; just
> * continue round the main loop. Whatever requested the exit
> diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c
> index 6489abbf8c..aaf8e46ae5 100644
> --- a/accel/tcg/cputlb.c
> +++ b/accel/tcg/cputlb.c
> @@ -312,9 +312,9 @@ void tlb_flush_counts(size_t *pfull, size_t *ppart, size_t *pelide)
> CPU_FOREACH(cpu) {
> CPUArchState *env = cpu->env_ptr;
>
> - full += atomic_read(&env_tlb(env)->c.full_flush_count);
> - part += atomic_read(&env_tlb(env)->c.part_flush_count);
> - elide += atomic_read(&env_tlb(env)->c.elide_flush_count);
> + full += qatomic_read(&env_tlb(env)->c.full_flush_count);
> + part += qatomic_read(&env_tlb(env)->c.part_flush_count);
> + elide += qatomic_read(&env_tlb(env)->c.elide_flush_count);
> }
> *pfull = full;
> *ppart = part;
> @@ -349,13 +349,13 @@ static void tlb_flush_by_mmuidx_async_work(CPUState *cpu, run_on_cpu_data data)
> cpu_tb_jmp_cache_clear(cpu);
>
> if (to_clean == ALL_MMUIDX_BITS) {
> - atomic_set(&env_tlb(env)->c.full_flush_count,
> + qatomic_set(&env_tlb(env)->c.full_flush_count,
> env_tlb(env)->c.full_flush_count + 1);
> } else {
> - atomic_set(&env_tlb(env)->c.part_flush_count,
> + qatomic_set(&env_tlb(env)->c.part_flush_count,
> env_tlb(env)->c.part_flush_count + ctpop16(to_clean));
> if (to_clean != asked) {
> - atomic_set(&env_tlb(env)->c.elide_flush_count,
> + qatomic_set(&env_tlb(env)->c.elide_flush_count,
> env_tlb(env)->c.elide_flush_count +
> ctpop16(asked & ~to_clean));
> }
> @@ -693,7 +693,7 @@ void tlb_unprotect_code(ram_addr_t ram_addr)
> * generated code.
> *
> * Other vCPUs might be reading their TLBs during guest execution, so we update
> - * te->addr_write with atomic_set. We don't need to worry about this for
> + * te->addr_write with qatomic_set. We don't need to worry about this for
> * oversized guests as MTTCG is disabled for them.
> *
> * Called with tlb_c.lock held.
> @@ -711,7 +711,7 @@ static void tlb_reset_dirty_range_locked(CPUTLBEntry *tlb_entry,
> #if TCG_OVERSIZED_GUEST
> tlb_entry->addr_write |= TLB_NOTDIRTY;
> #else
> - atomic_set(&tlb_entry->addr_write,
> + qatomic_set(&tlb_entry->addr_write,
> tlb_entry->addr_write | TLB_NOTDIRTY);
> #endif
> }
> @@ -1138,8 +1138,8 @@ static inline target_ulong tlb_read_ofs(CPUTLBEntry *entry, size_t ofs)
> #if TCG_OVERSIZED_GUEST
> return *(target_ulong *)((uintptr_t)entry + ofs);
> #else
> - /* ofs might correspond to .addr_write, so use atomic_read */
> - return atomic_read((target_ulong *)((uintptr_t)entry + ofs));
> + /* ofs might correspond to .addr_write, so use qatomic_read */
> + return qatomic_read((target_ulong *)((uintptr_t)entry + ofs));
> #endif
> }
>
> @@ -1155,11 +1155,11 @@ static bool victim_tlb_hit(CPUArchState *env, size_t mmu_idx, size_t index,
> CPUTLBEntry *vtlb = &env_tlb(env)->d[mmu_idx].vtable[vidx];
> target_ulong cmp;
>
> - /* elt_ofs might correspond to .addr_write, so use atomic_read */
> + /* elt_ofs might correspond to .addr_write, so use qatomic_read */
> #if TCG_OVERSIZED_GUEST
> cmp = *(target_ulong *)((uintptr_t)vtlb + elt_ofs);
> #else
> - cmp = atomic_read((target_ulong *)((uintptr_t)vtlb + elt_ofs));
> + cmp = qatomic_read((target_ulong *)((uintptr_t)vtlb + elt_ofs));
> #endif
>
> if (cmp == page) {
> diff --git a/accel/tcg/tcg-all.c b/accel/tcg/tcg-all.c
> index 7098ad96c3..1c664924d7 100644
> --- a/accel/tcg/tcg-all.c
> +++ b/accel/tcg/tcg-all.c
> @@ -65,7 +65,7 @@ static void tcg_handle_interrupt(CPUState *cpu, int mask)
> if (!qemu_cpu_is_self(cpu)) {
> qemu_cpu_kick(cpu);
> } else {
> - atomic_set(&cpu_neg(cpu)->icount_decr.u16.high, -1);
> + qatomic_set(&cpu_neg(cpu)->icount_decr.u16.high, -1);
> if (use_icount &&
> !cpu->can_do_io
> && (mask & ~old_mask) != 0) {
> diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c
> index 2d83013633..f44ba9d46d 100644
> --- a/accel/tcg/translate-all.c
> +++ b/accel/tcg/translate-all.c
> @@ -377,9 +377,9 @@ static int cpu_restore_state_from_tb(CPUState *cpu, TranslationBlock *tb,
> restore_state_to_opc(env, tb, data);
>
> #ifdef CONFIG_PROFILER
> - atomic_set(&prof->restore_time,
> + qatomic_set(&prof->restore_time,
> prof->restore_time + profile_getclock() - ti);
> - atomic_set(&prof->restore_count, prof->restore_count + 1);
> + qatomic_set(&prof->restore_count, prof->restore_count + 1);
> #endif
> return 0;
> }
> @@ -509,7 +509,7 @@ static PageDesc *page_find_alloc(tb_page_addr_t index, int alloc)
>
> /* Level 2..N-1. */
> for (i = v_l2_levels; i > 0; i--) {
> - void **p = atomic_rcu_read(lp);
> + void **p = qatomic_rcu_read(lp);
>
> if (p == NULL) {
> void *existing;
> @@ -518,7 +518,7 @@ static PageDesc *page_find_alloc(tb_page_addr_t index, int alloc)
> return NULL;
> }
> p = g_new0(void *, V_L2_SIZE);
> - existing = atomic_cmpxchg(lp, NULL, p);
> + existing = qatomic_cmpxchg(lp, NULL, p);
> if (unlikely(existing)) {
> g_free(p);
> p = existing;
> @@ -528,7 +528,7 @@ static PageDesc *page_find_alloc(tb_page_addr_t index, int alloc)
> lp = p + ((index >> (i * V_L2_BITS)) & (V_L2_SIZE - 1));
> }
>
> - pd = atomic_rcu_read(lp);
> + pd = qatomic_rcu_read(lp);
> if (pd == NULL) {
> void *existing;
>
> @@ -545,7 +545,7 @@ static PageDesc *page_find_alloc(tb_page_addr_t index, int alloc)
> }
> }
> #endif
> - existing = atomic_cmpxchg(lp, NULL, pd);
> + existing = qatomic_cmpxchg(lp, NULL, pd);
> if (unlikely(existing)) {
> #ifndef CONFIG_USER_ONLY
> {
> @@ -1253,7 +1253,7 @@ static void do_tb_flush(CPUState *cpu, run_on_cpu_data tb_flush_count)
> tcg_region_reset_all();
> /* XXX: flush processor icache at this point if cache flush is
> expensive */
> - atomic_mb_set(&tb_ctx.tb_flush_count, tb_ctx.tb_flush_count + 1);
> + qatomic_mb_set(&tb_ctx.tb_flush_count, tb_ctx.tb_flush_count + 1);
>
> done:
> mmap_unlock();
> @@ -1265,7 +1265,7 @@ done:
> void tb_flush(CPUState *cpu)
> {
> if (tcg_enabled()) {
> - unsigned tb_flush_count = atomic_mb_read(&tb_ctx.tb_flush_count);
> + unsigned tb_flush_count = qatomic_mb_read(&tb_ctx.tb_flush_count);
>
> if (cpu_in_exclusive_context(cpu)) {
> do_tb_flush(cpu, RUN_ON_CPU_HOST_INT(tb_flush_count));
> @@ -1358,7 +1358,7 @@ static inline void tb_remove_from_jmp_list(TranslationBlock *orig, int n_orig)
> int n;
>
> /* mark the LSB of jmp_dest[] so that no further jumps can be inserted */
> - ptr = atomic_or_fetch(&orig->jmp_dest[n_orig], 1);
> + ptr = qatomic_or_fetch(&orig->jmp_dest[n_orig], 1);
> dest = (TranslationBlock *)(ptr & ~1);
> if (dest == NULL) {
> return;
> @@ -1369,7 +1369,7 @@ static inline void tb_remove_from_jmp_list(TranslationBlock *orig, int n_orig)
> * While acquiring the lock, the jump might have been removed if the
> * destination TB was invalidated; check again.
> */
> - ptr_locked = atomic_read(&orig->jmp_dest[n_orig]);
> + ptr_locked = qatomic_read(&orig->jmp_dest[n_orig]);
> if (ptr_locked != ptr) {
> qemu_spin_unlock(&dest->jmp_lock);
> /*
> @@ -1415,7 +1415,7 @@ static inline void tb_jmp_unlink(TranslationBlock *dest)
>
> TB_FOR_EACH_JMP(dest, tb, n) {
> tb_reset_jump(tb, n);
> - atomic_and(&tb->jmp_dest[n], (uintptr_t)NULL | 1);
> + qatomic_and(&tb->jmp_dest[n], (uintptr_t)NULL | 1);
> /* No need to clear the list entry; setting the dest ptr is enough */
> }
> dest->jmp_list_head = (uintptr_t)NULL;
> @@ -1439,7 +1439,7 @@ static void do_tb_phys_invalidate(TranslationBlock *tb, bool rm_from_page_list)
>
> /* make sure no further incoming jumps will be chained to this TB */
> qemu_spin_lock(&tb->jmp_lock);
> - atomic_set(&tb->cflags, tb->cflags | CF_INVALID);
> + qatomic_set(&tb->cflags, tb->cflags | CF_INVALID);
> qemu_spin_unlock(&tb->jmp_lock);
>
> /* remove the TB from the hash list */
> @@ -1466,8 +1466,8 @@ static void do_tb_phys_invalidate(TranslationBlock *tb, bool rm_from_page_list)
> /* remove the TB from the hash list */
> h = tb_jmp_cache_hash_func(tb->pc);
> CPU_FOREACH(cpu) {
> - if (atomic_read(&cpu->tb_jmp_cache[h]) == tb) {
> - atomic_set(&cpu->tb_jmp_cache[h], NULL);
> + if (qatomic_read(&cpu->tb_jmp_cache[h]) == tb) {
> + qatomic_set(&cpu->tb_jmp_cache[h], NULL);
> }
> }
>
> @@ -1478,7 +1478,7 @@ static void do_tb_phys_invalidate(TranslationBlock *tb, bool rm_from_page_list)
> /* suppress any remaining jumps to this TB */
> tb_jmp_unlink(tb);
>
> - atomic_set(&tcg_ctx->tb_phys_invalidate_count,
> + qatomic_set(&tcg_ctx->tb_phys_invalidate_count,
> tcg_ctx->tb_phys_invalidate_count + 1);
> }
>
> @@ -1733,7 +1733,7 @@ TranslationBlock *tb_gen_code(CPUState *cpu,
>
> #ifdef CONFIG_PROFILER
> /* includes aborted translations because of exceptions */
> - atomic_set(&prof->tb_count1, prof->tb_count1 + 1);
> + qatomic_set(&prof->tb_count1, prof->tb_count1 + 1);
> ti = profile_getclock();
> #endif
>
> @@ -1758,8 +1758,9 @@ TranslationBlock *tb_gen_code(CPUState *cpu,
> }
>
> #ifdef CONFIG_PROFILER
> - atomic_set(&prof->tb_count, prof->tb_count + 1);
> - atomic_set(&prof->interm_time, prof->interm_time + profile_getclock() - ti);
> + qatomic_set(&prof->tb_count, prof->tb_count + 1);
> + qatomic_set(&prof->interm_time,
> + prof->interm_time + profile_getclock() - ti);
> ti = profile_getclock();
> #endif
>
> @@ -1804,10 +1805,10 @@ TranslationBlock *tb_gen_code(CPUState *cpu,
> tb->tc.size = gen_code_size;
>
> #ifdef CONFIG_PROFILER
> - atomic_set(&prof->code_time, prof->code_time + profile_getclock() - ti);
> - atomic_set(&prof->code_in_len, prof->code_in_len + tb->size);
> - atomic_set(&prof->code_out_len, prof->code_out_len + gen_code_size);
> - atomic_set(&prof->search_out_len, prof->search_out_len + search_size);
> + qatomic_set(&prof->code_time, prof->code_time + profile_getclock() - ti);
> + qatomic_set(&prof->code_in_len, prof->code_in_len + tb->size);
> + qatomic_set(&prof->code_out_len, prof->code_out_len + gen_code_size);
> + qatomic_set(&prof->search_out_len, prof->search_out_len + search_size);
> #endif
>
> #ifdef DEBUG_DISAS
> @@ -1869,7 +1870,7 @@ TranslationBlock *tb_gen_code(CPUState *cpu,
> }
> #endif
>
> - atomic_set(&tcg_ctx->code_gen_ptr, (void *)
> + qatomic_set(&tcg_ctx->code_gen_ptr, (void *)
> ROUND_UP((uintptr_t)gen_code_buf + gen_code_size + search_size,
> CODE_GEN_ALIGN));
>
> @@ -1905,7 +1906,7 @@ TranslationBlock *tb_gen_code(CPUState *cpu,
> uintptr_t orig_aligned = (uintptr_t)gen_code_buf;
>
> orig_aligned -= ROUND_UP(sizeof(*tb), qemu_icache_linesize);
> - atomic_set(&tcg_ctx->code_gen_ptr, (void *)orig_aligned);
> + qatomic_set(&tcg_ctx->code_gen_ptr, (void *)orig_aligned);
> tb_destroy(tb);
> return existing_tb;
> }
> @@ -2273,7 +2274,7 @@ static void tb_jmp_cache_clear_page(CPUState *cpu, target_ulong page_addr)
> unsigned int i, i0 = tb_jmp_cache_hash_page(page_addr);
>
> for (i = 0; i < TB_JMP_PAGE_SIZE; i++) {
> - atomic_set(&cpu->tb_jmp_cache[i0 + i], NULL);
> + qatomic_set(&cpu->tb_jmp_cache[i0 + i], NULL);
> }
> }
>
> @@ -2393,7 +2394,7 @@ void dump_exec_info(void)
>
> qemu_printf("\nStatistics:\n");
> qemu_printf("TB flush count %u\n",
> - atomic_read(&tb_ctx.tb_flush_count));
> + qatomic_read(&tb_ctx.tb_flush_count));
> qemu_printf("TB invalidate count %zu\n",
> tcg_tb_phys_invalidate_count());
>
> @@ -2415,7 +2416,7 @@ void cpu_interrupt(CPUState *cpu, int mask)
> {
> g_assert(qemu_mutex_iothread_locked());
> cpu->interrupt_request |= mask;
> - atomic_set(&cpu_neg(cpu)->icount_decr.u16.high, -1);
> + qatomic_set(&cpu_neg(cpu)->icount_decr.u16.high, -1);
> }
>
> /*
> diff --git a/audio/jackaudio.c b/audio/jackaudio.c
> index 72ed7c4929..1e714b30bc 100644
> --- a/audio/jackaudio.c
> +++ b/audio/jackaudio.c
> @@ -104,7 +104,7 @@ static void qjack_buffer_create(QJackBuffer *buffer, int channels, int frames)
> static void qjack_buffer_clear(QJackBuffer *buffer)
> {
> assert(buffer->data);
> - atomic_store_release(&buffer->used, 0);
> + qatomic_store_release(&buffer->used, 0);
> buffer->rptr = 0;
> buffer->wptr = 0;
> }
> @@ -129,7 +129,7 @@ static int qjack_buffer_write(QJackBuffer *buffer, float *data, int size)
> assert(buffer->data);
> const int samples = size / sizeof(float);
> int frames = samples / buffer->channels;
> - const int avail = buffer->frames - atomic_load_acquire(&buffer->used);
> + const int avail = buffer->frames - qatomic_load_acquire(&buffer->used);
>
> if (frames > avail) {
> frames = avail;
> @@ -153,7 +153,7 @@ static int qjack_buffer_write(QJackBuffer *buffer, float *data, int size)
>
> buffer->wptr = wptr;
>
> - atomic_add(&buffer->used, frames);
> + qatomic_add(&buffer->used, frames);
> return frames * buffer->channels * sizeof(float);
> };
>
> @@ -161,7 +161,7 @@ static int qjack_buffer_write(QJackBuffer *buffer, float *data, int size)
> static int qjack_buffer_write_l(QJackBuffer *buffer, float **dest, int frames)
> {
> assert(buffer->data);
> - const int avail = buffer->frames - atomic_load_acquire(&buffer->used);
> + const int avail = buffer->frames - qatomic_load_acquire(&buffer->used);
> int wptr = buffer->wptr;
>
> if (frames > avail) {
> @@ -185,7 +185,7 @@ static int qjack_buffer_write_l(QJackBuffer *buffer, float **dest, int frames)
> }
> buffer->wptr = wptr;
>
> - atomic_add(&buffer->used, frames);
> + qatomic_add(&buffer->used, frames);
> return frames;
> }
>
> @@ -195,7 +195,7 @@ static int qjack_buffer_read(QJackBuffer *buffer, float *dest, int size)
> assert(buffer->data);
> const int samples = size / sizeof(float);
> int frames = samples / buffer->channels;
> - const int avail = atomic_load_acquire(&buffer->used);
> + const int avail = qatomic_load_acquire(&buffer->used);
>
> if (frames > avail) {
> frames = avail;
> @@ -219,7 +219,7 @@ static int qjack_buffer_read(QJackBuffer *buffer, float *dest, int size)
>
> buffer->rptr = rptr;
>
> - atomic_sub(&buffer->used, frames);
> + qatomic_sub(&buffer->used, frames);
> return frames * buffer->channels * sizeof(float);
> }
>
> @@ -228,7 +228,7 @@ static int qjack_buffer_read_l(QJackBuffer *buffer, float **dest, int frames)
> {
> assert(buffer->data);
> int copy = frames;
> - const int used = atomic_load_acquire(&buffer->used);
> + const int used = qatomic_load_acquire(&buffer->used);
> int rptr = buffer->rptr;
>
> if (copy > used) {
> @@ -252,7 +252,7 @@ static int qjack_buffer_read_l(QJackBuffer *buffer, float **dest, int frames)
> }
> buffer->rptr = rptr;
>
> - atomic_sub(&buffer->used, copy);
> + qatomic_sub(&buffer->used, copy);
> return copy;
> }
>
> diff --git a/block.c b/block.c
> index 11ab55f80b..f72a2e26e8 100644
> --- a/block.c
> +++ b/block.c
> @@ -1694,7 +1694,7 @@ static int bdrv_open_common(BlockDriverState *bs, BlockBackend *file,
> }
>
> /* bdrv_new() and bdrv_close() make it so */
> - assert(atomic_read(&bs->copy_on_read) == 0);
> + assert(qatomic_read(&bs->copy_on_read) == 0);
>
> if (bs->open_flags & BDRV_O_COPY_ON_READ) {
> if (!bs->read_only) {
> @@ -4436,7 +4436,7 @@ static void bdrv_close(BlockDriverState *bs)
> bs->file = NULL;
> g_free(bs->opaque);
> bs->opaque = NULL;
> - atomic_set(&bs->copy_on_read, 0);
> + qatomic_set(&bs->copy_on_read, 0);
> bs->backing_file[0] = '\0';
> bs->backing_format[0] = '\0';
> bs->total_sectors = 0;
> diff --git a/block/block-backend.c b/block/block-backend.c
> index 24dd0670d1..ce78d30794 100644
> --- a/block/block-backend.c
> +++ b/block/block-backend.c
> @@ -1353,12 +1353,12 @@ int blk_make_zero(BlockBackend *blk, BdrvRequestFlags flags)
>
> void blk_inc_in_flight(BlockBackend *blk)
> {
> - atomic_inc(&blk->in_flight);
> + qatomic_inc(&blk->in_flight);
> }
>
> void blk_dec_in_flight(BlockBackend *blk)
> {
> - atomic_dec(&blk->in_flight);
> + qatomic_dec(&blk->in_flight);
> aio_wait_kick();
> }
>
> @@ -1720,7 +1720,7 @@ void blk_drain(BlockBackend *blk)
>
> /* We may have -ENOMEDIUM completions in flight */
> AIO_WAIT_WHILE(blk_get_aio_context(blk),
> - atomic_mb_read(&blk->in_flight) > 0);
> + qatomic_mb_read(&blk->in_flight) > 0);
>
> if (bs) {
> bdrv_drained_end(bs);
> @@ -1739,7 +1739,7 @@ void blk_drain_all(void)
> aio_context_acquire(ctx);
>
> /* We may have -ENOMEDIUM completions in flight */
> - AIO_WAIT_WHILE(ctx, atomic_mb_read(&blk->in_flight) > 0);
> + AIO_WAIT_WHILE(ctx, qatomic_mb_read(&blk->in_flight) > 0);
>
> aio_context_release(ctx);
> }
> @@ -2346,6 +2346,7 @@ void blk_io_limits_update_group(BlockBackend *blk, const char *group)
> static void blk_root_drained_begin(BdrvChild *child)
> {
> BlockBackend *blk = child->opaque;
> + ThrottleGroupMember *tgm = &blk->public.throttle_group_member;
>
> if (++blk->quiesce_counter == 1) {
> if (blk->dev_ops && blk->dev_ops->drained_begin) {
> @@ -2356,8 +2357,8 @@ static void blk_root_drained_begin(BdrvChild *child)
> /* Note that blk->root may not be accessible here yet if we are just
> * attaching to a BlockDriverState that is drained. Use child instead. */
>
> - if (atomic_fetch_inc(&blk->public.throttle_group_member.io_limits_disabled) == 0) {
> - throttle_group_restart_tgm(&blk->public.throttle_group_member);
> + if (qatomic_fetch_inc(&tgm->io_limits_disabled) == 0) {
> + throttle_group_restart_tgm(tgm);
> }
> }
>
> @@ -2374,7 +2375,7 @@ static void blk_root_drained_end(BdrvChild *child, int *drained_end_counter)
> assert(blk->quiesce_counter);
>
> assert(blk->public.throttle_group_member.io_limits_disabled);
> - atomic_dec(&blk->public.throttle_group_member.io_limits_disabled);
> + qatomic_dec(&blk->public.throttle_group_member.io_limits_disabled);
>
> if (--blk->quiesce_counter == 0) {
> if (blk->dev_ops && blk->dev_ops->drained_end) {
> diff --git a/block/io.c b/block/io.c
> index a2389bb38c..11df1889f1 100644
> --- a/block/io.c
> +++ b/block/io.c
> @@ -69,7 +69,7 @@ void bdrv_parent_drained_end_single(BdrvChild *c)
> {
> int drained_end_counter = 0;
> bdrv_parent_drained_end_single_no_poll(c, &drained_end_counter);
> - BDRV_POLL_WHILE(c->bs, atomic_read(&drained_end_counter) > 0);
> + BDRV_POLL_WHILE(c->bs, qatomic_read(&drained_end_counter) > 0);
> }
>
> static void bdrv_parent_drained_end(BlockDriverState *bs, BdrvChild *ignore,
> @@ -186,12 +186,12 @@ void bdrv_refresh_limits(BlockDriverState *bs, Error **errp)
> */
> void bdrv_enable_copy_on_read(BlockDriverState *bs)
> {
> - atomic_inc(&bs->copy_on_read);
> + qatomic_inc(&bs->copy_on_read);
> }
>
> void bdrv_disable_copy_on_read(BlockDriverState *bs)
> {
> - int old = atomic_fetch_dec(&bs->copy_on_read);
> + int old = qatomic_fetch_dec(&bs->copy_on_read);
> assert(old >= 1);
> }
>
> @@ -219,9 +219,9 @@ static void coroutine_fn bdrv_drain_invoke_entry(void *opaque)
> }
>
> /* Set data->done and decrement drained_end_counter before bdrv_wakeup() */
> - atomic_mb_set(&data->done, true);
> + qatomic_mb_set(&data->done, true);
> if (!data->begin) {
> - atomic_dec(data->drained_end_counter);
> + qatomic_dec(data->drained_end_counter);
> }
> bdrv_dec_in_flight(bs);
>
> @@ -248,7 +248,7 @@ static void bdrv_drain_invoke(BlockDriverState *bs, bool begin,
> };
>
> if (!begin) {
> - atomic_inc(drained_end_counter);
> + qatomic_inc(drained_end_counter);
> }
>
> /* Make sure the driver callback completes during the polling phase for
> @@ -268,7 +268,7 @@ bool bdrv_drain_poll(BlockDriverState *bs, bool recursive,
> return true;
> }
>
> - if (atomic_read(&bs->in_flight)) {
> + if (qatomic_read(&bs->in_flight)) {
> return true;
> }
>
> @@ -382,7 +382,7 @@ void bdrv_do_drained_begin_quiesce(BlockDriverState *bs,
> assert(!qemu_in_coroutine());
>
> /* Stop things in parent-to-child order */
> - if (atomic_fetch_inc(&bs->quiesce_counter) == 0) {
> + if (qatomic_fetch_inc(&bs->quiesce_counter) == 0) {
> aio_disable_external(bdrv_get_aio_context(bs));
> }
>
> @@ -473,7 +473,7 @@ static void bdrv_do_drained_end(BlockDriverState *bs, bool recursive,
> bdrv_parent_drained_end(bs, parent, ignore_bds_parents,
> drained_end_counter);
>
> - old_quiesce_counter = atomic_fetch_dec(&bs->quiesce_counter);
> + old_quiesce_counter = qatomic_fetch_dec(&bs->quiesce_counter);
> if (old_quiesce_counter == 1) {
> aio_enable_external(bdrv_get_aio_context(bs));
> }
> @@ -492,7 +492,7 @@ void bdrv_drained_end(BlockDriverState *bs)
> {
> int drained_end_counter = 0;
> bdrv_do_drained_end(bs, false, NULL, false, &drained_end_counter);
> - BDRV_POLL_WHILE(bs, atomic_read(&drained_end_counter) > 0);
> + BDRV_POLL_WHILE(bs, qatomic_read(&drained_end_counter) > 0);
> }
>
> void bdrv_drained_end_no_poll(BlockDriverState *bs, int *drained_end_counter)
> @@ -504,7 +504,7 @@ void bdrv_subtree_drained_end(BlockDriverState *bs)
> {
> int drained_end_counter = 0;
> bdrv_do_drained_end(bs, true, NULL, false, &drained_end_counter);
> - BDRV_POLL_WHILE(bs, atomic_read(&drained_end_counter) > 0);
> + BDRV_POLL_WHILE(bs, qatomic_read(&drained_end_counter) > 0);
> }
>
> void bdrv_apply_subtree_drain(BdrvChild *child, BlockDriverState *new_parent)
> @@ -526,7 +526,7 @@ void bdrv_unapply_subtree_drain(BdrvChild *child, BlockDriverState *old_parent)
> &drained_end_counter);
> }
>
> - BDRV_POLL_WHILE(child->bs, atomic_read(&drained_end_counter) > 0);
> + BDRV_POLL_WHILE(child->bs, qatomic_read(&drained_end_counter) > 0);
> }
>
> /*
> @@ -553,7 +553,7 @@ static void bdrv_drain_assert_idle(BlockDriverState *bs)
> {
> BdrvChild *child, *next;
>
> - assert(atomic_read(&bs->in_flight) == 0);
> + assert(qatomic_read(&bs->in_flight) == 0);
> QLIST_FOREACH_SAFE(child, &bs->children, next, next) {
> bdrv_drain_assert_idle(child->bs);
> }
> @@ -655,7 +655,7 @@ void bdrv_drain_all_end(void)
> }
>
> assert(qemu_get_current_aio_context() == qemu_get_aio_context());
> - AIO_WAIT_WHILE(NULL, atomic_read(&drained_end_counter) > 0);
> + AIO_WAIT_WHILE(NULL, qatomic_read(&drained_end_counter) > 0);
>
> assert(bdrv_drain_all_count > 0);
> bdrv_drain_all_count--;
> @@ -675,7 +675,7 @@ void bdrv_drain_all(void)
> static void tracked_request_end(BdrvTrackedRequest *req)
> {
> if (req->serialising) {
> - atomic_dec(&req->bs->serialising_in_flight);
> + qatomic_dec(&req->bs->serialising_in_flight);
> }
>
> qemu_co_mutex_lock(&req->bs->reqs_lock);
> @@ -777,7 +777,7 @@ bool bdrv_mark_request_serialising(BdrvTrackedRequest *req, uint64_t align)
>
> qemu_co_mutex_lock(&bs->reqs_lock);
> if (!req->serialising) {
> - atomic_inc(&req->bs->serialising_in_flight);
> + qatomic_inc(&req->bs->serialising_in_flight);
> req->serialising = true;
> }
>
> @@ -841,7 +841,7 @@ static int bdrv_get_cluster_size(BlockDriverState *bs)
>
> void bdrv_inc_in_flight(BlockDriverState *bs)
> {
> - atomic_inc(&bs->in_flight);
> + qatomic_inc(&bs->in_flight);
> }
>
> void bdrv_wakeup(BlockDriverState *bs)
> @@ -851,7 +851,7 @@ void bdrv_wakeup(BlockDriverState *bs)
>
> void bdrv_dec_in_flight(BlockDriverState *bs)
> {
> - atomic_dec(&bs->in_flight);
> + qatomic_dec(&bs->in_flight);
> bdrv_wakeup(bs);
> }
>
> @@ -860,7 +860,7 @@ static bool coroutine_fn bdrv_wait_serialising_requests(BdrvTrackedRequest *self
> BlockDriverState *bs = self->bs;
> bool waited = false;
>
> - if (!atomic_read(&bs->serialising_in_flight)) {
> + if (!qatomic_read(&bs->serialising_in_flight)) {
> return false;
> }
>
> @@ -1747,7 +1747,7 @@ int coroutine_fn bdrv_co_preadv_part(BdrvChild *child,
> bdrv_inc_in_flight(bs);
>
> /* Don't do copy-on-read if we read data before write operation */
> - if (atomic_read(&bs->copy_on_read)) {
> + if (qatomic_read(&bs->copy_on_read)) {
> flags |= BDRV_REQ_COPY_ON_READ;
> }
>
> @@ -1935,7 +1935,7 @@ bdrv_co_write_req_finish(BdrvChild *child, int64_t offset, uint64_t bytes,
> int64_t end_sector = DIV_ROUND_UP(offset + bytes, BDRV_SECTOR_SIZE);
> BlockDriverState *bs = child->bs;
>
> - atomic_inc(&bs->write_gen);
> + qatomic_inc(&bs->write_gen);
>
> /*
> * Discard cannot extend the image, but in error handling cases, such as
> @@ -2768,7 +2768,7 @@ int coroutine_fn bdrv_co_flush(BlockDriverState *bs)
> }
>
> qemu_co_mutex_lock(&bs->reqs_lock);
> - current_gen = atomic_read(&bs->write_gen);
> + current_gen = qatomic_read(&bs->write_gen);
>
> /* Wait until any previous flushes are completed */
> while (bs->active_flush_req) {
> @@ -3116,7 +3116,7 @@ void bdrv_io_plug(BlockDriverState *bs)
> bdrv_io_plug(child->bs);
> }
>
> - if (atomic_fetch_inc(&bs->io_plugged) == 0) {
> + if (qatomic_fetch_inc(&bs->io_plugged) == 0) {
> BlockDriver *drv = bs->drv;
> if (drv && drv->bdrv_io_plug) {
> drv->bdrv_io_plug(bs);
> @@ -3129,7 +3129,7 @@ void bdrv_io_unplug(BlockDriverState *bs)
> BdrvChild *child;
>
> assert(bs->io_plugged);
> - if (atomic_fetch_dec(&bs->io_plugged) == 1) {
> + if (qatomic_fetch_dec(&bs->io_plugged) == 1) {
> BlockDriver *drv = bs->drv;
> if (drv && drv->bdrv_io_unplug) {
> drv->bdrv_io_unplug(bs);
> diff --git a/block/nfs.c b/block/nfs.c
> index 61a249a9fc..f86e660374 100644
> --- a/block/nfs.c
> +++ b/block/nfs.c
> @@ -721,7 +721,7 @@ nfs_get_allocated_file_size_cb(int ret, struct nfs_context *nfs, void *data,
> }
>
> /* Set task->complete before reading bs->wakeup. */
> - atomic_mb_set(&task->complete, 1);
> + qatomic_mb_set(&task->complete, 1);
> bdrv_wakeup(task->bs);
> }
>
> diff --git a/block/sheepdog.c b/block/sheepdog.c
> index cbbebc1aaf..2f5c0eb376 100644
> --- a/block/sheepdog.c
> +++ b/block/sheepdog.c
> @@ -665,7 +665,7 @@ out:
> srco->co = NULL;
> srco->ret = ret;
> /* Set srco->finished before reading bs->wakeup. */
> - atomic_mb_set(&srco->finished, true);
> + qatomic_mb_set(&srco->finished, true);
> if (srco->bs) {
> bdrv_wakeup(srco->bs);
> }
> diff --git a/block/throttle-groups.c b/block/throttle-groups.c
> index 4e28365d8d..e2f2813c0f 100644
> --- a/block/throttle-groups.c
> +++ b/block/throttle-groups.c
> @@ -228,7 +228,7 @@ static ThrottleGroupMember *next_throttle_token(ThrottleGroupMember *tgm,
> * immediately if it has pending requests. Otherwise we could be
> * forcing it to wait for other member's throttled requests. */
> if (tgm_has_pending_reqs(tgm, is_write) &&
> - atomic_read(&tgm->io_limits_disabled)) {
> + qatomic_read(&tgm->io_limits_disabled)) {
> return tgm;
> }
>
> @@ -272,7 +272,7 @@ static bool throttle_group_schedule_timer(ThrottleGroupMember *tgm,
> ThrottleTimers *tt = &tgm->throttle_timers;
> bool must_wait;
>
> - if (atomic_read(&tgm->io_limits_disabled)) {
> + if (qatomic_read(&tgm->io_limits_disabled)) {
> return false;
> }
>
> @@ -417,7 +417,7 @@ static void coroutine_fn throttle_group_restart_queue_entry(void *opaque)
>
> g_free(data);
>
> - atomic_dec(&tgm->restart_pending);
> + qatomic_dec(&tgm->restart_pending);
> aio_wait_kick();
> }
>
> @@ -434,7 +434,7 @@ static void throttle_group_restart_queue(ThrottleGroupMember *tgm, bool is_write
> * be no timer pending on this tgm at this point */
> assert(!timer_pending(tgm->throttle_timers.timers[is_write]));
>
> - atomic_inc(&tgm->restart_pending);
> + qatomic_inc(&tgm->restart_pending);
>
> co = qemu_coroutine_create(throttle_group_restart_queue_entry, rd);
> aio_co_enter(tgm->aio_context, co);
> @@ -544,7 +544,7 @@ void throttle_group_register_tgm(ThrottleGroupMember *tgm,
>
> tgm->throttle_state = ts;
> tgm->aio_context = ctx;
> - atomic_set(&tgm->restart_pending, 0);
> + qatomic_set(&tgm->restart_pending, 0);
>
> qemu_mutex_lock(&tg->lock);
> /* If the ThrottleGroup is new set this ThrottleGroupMember as the token */
> @@ -592,7 +592,7 @@ void throttle_group_unregister_tgm(ThrottleGroupMember *tgm)
> }
>
> /* Wait for throttle_group_restart_queue_entry() coroutines to finish */
> - AIO_WAIT_WHILE(tgm->aio_context, atomic_read(&tgm->restart_pending) > 0);
> + AIO_WAIT_WHILE(tgm->aio_context, qatomic_read(&tgm->restart_pending) > 0);
>
> qemu_mutex_lock(&tg->lock);
> for (i = 0; i < 2; i++) {
> diff --git a/block/throttle.c b/block/throttle.c
> index 9a0f38149a..b685166ad4 100644
> --- a/block/throttle.c
> +++ b/block/throttle.c
> @@ -217,7 +217,7 @@ static void throttle_reopen_abort(BDRVReopenState *reopen_state)
> static void coroutine_fn throttle_co_drain_begin(BlockDriverState *bs)
> {
> ThrottleGroupMember *tgm = bs->opaque;
> - if (atomic_fetch_inc(&tgm->io_limits_disabled) == 0) {
> + if (qatomic_fetch_inc(&tgm->io_limits_disabled) == 0) {
> throttle_group_restart_tgm(tgm);
> }
> }
> @@ -226,7 +226,7 @@ static void coroutine_fn throttle_co_drain_end(BlockDriverState *bs)
> {
> ThrottleGroupMember *tgm = bs->opaque;
> assert(tgm->io_limits_disabled);
> - atomic_dec(&tgm->io_limits_disabled);
> + qatomic_dec(&tgm->io_limits_disabled);
> }
>
> static const char *const throttle_strong_runtime_opts[] = {
> diff --git a/blockdev.c b/blockdev.c
> index 7f2561081e..bebd3ba1c3 100644
> --- a/blockdev.c
> +++ b/blockdev.c
> @@ -1604,7 +1604,7 @@ static void external_snapshot_commit(BlkActionState *common)
> /* We don't need (or want) to use the transactional
> * bdrv_reopen_multiple() across all the entries at once, because we
> * don't want to abort all of them if one of them fails the reopen */
> - if (!atomic_read(&state->old_bs->copy_on_read)) {
> + if (!qatomic_read(&state->old_bs->copy_on_read)) {
> bdrv_reopen_set_read_only(state->old_bs, true, NULL);
> }
>
> diff --git a/blockjob.c b/blockjob.c
> index 470facfd47..98ac8af982 100644
> --- a/blockjob.c
> +++ b/blockjob.c
> @@ -298,7 +298,7 @@ BlockJobInfo *block_job_query(BlockJob *job, Error **errp)
> info = g_new0(BlockJobInfo, 1);
> info->type = g_strdup(job_type_str(&job->job));
> info->device = g_strdup(job->job.id);
> - info->busy = atomic_read(&job->job.busy);
> + info->busy = qatomic_read(&job->job.busy);
> info->paused = job->job.pause_count > 0;
> info->offset = job->job.progress.current;
> info->len = job->job.progress.total;
> diff --git a/contrib/libvhost-user/libvhost-user.c b/contrib/libvhost-user/libvhost-user.c
> index 9d30ff2283..05861b1419 100644
> --- a/contrib/libvhost-user/libvhost-user.c
> +++ b/contrib/libvhost-user/libvhost-user.c
> @@ -448,7 +448,7 @@ static void
> vu_log_page(uint8_t *log_table, uint64_t page)
> {
> DPRINT("Logged dirty guest page: %"PRId64"\n", page);
> - atomic_or(&log_table[page / 8], 1 << (page % 8));
> + qatomic_or(&log_table[page / 8], 1 << (page % 8));
> }
>
> static void
> diff --git a/cpus-common.c b/cpus-common.c
> index 34044f4e4c..83475efff7 100644
> --- a/cpus-common.c
> +++ b/cpus-common.c
> @@ -148,7 +148,7 @@ void do_run_on_cpu(CPUState *cpu, run_on_cpu_func func, run_on_cpu_data data,
> wi.exclusive = false;
>
> queue_work_on_cpu(cpu, &wi);
> - while (!atomic_mb_read(&wi.done)) {
> + while (!qatomic_mb_read(&wi.done)) {
> CPUState *self_cpu = current_cpu;
>
> qemu_cond_wait(&qemu_work_cond, mutex);
> @@ -188,20 +188,20 @@ void start_exclusive(void)
> exclusive_idle();
>
> /* Make all other cpus stop executing. */
> - atomic_set(&pending_cpus, 1);
> + qatomic_set(&pending_cpus, 1);
>
> /* Write pending_cpus before reading other_cpu->running. */
> smp_mb();
> running_cpus = 0;
> CPU_FOREACH(other_cpu) {
> - if (atomic_read(&other_cpu->running)) {
> + if (qatomic_read(&other_cpu->running)) {
> other_cpu->has_waiter = true;
> running_cpus++;
> qemu_cpu_kick(other_cpu);
> }
> }
>
> - atomic_set(&pending_cpus, running_cpus + 1);
> + qatomic_set(&pending_cpus, running_cpus + 1);
> while (pending_cpus > 1) {
> qemu_cond_wait(&exclusive_cond, &qemu_cpu_list_lock);
> }
> @@ -220,7 +220,7 @@ void end_exclusive(void)
> current_cpu->in_exclusive_context = false;
>
> qemu_mutex_lock(&qemu_cpu_list_lock);
> - atomic_set(&pending_cpus, 0);
> + qatomic_set(&pending_cpus, 0);
> qemu_cond_broadcast(&exclusive_resume);
> qemu_mutex_unlock(&qemu_cpu_list_lock);
> }
> @@ -228,7 +228,7 @@ void end_exclusive(void)
> /* Wait for exclusive ops to finish, and begin cpu execution. */
> void cpu_exec_start(CPUState *cpu)
> {
> - atomic_set(&cpu->running, true);
> + qatomic_set(&cpu->running, true);
>
> /* Write cpu->running before reading pending_cpus. */
> smp_mb();
> @@ -246,17 +246,17 @@ void cpu_exec_start(CPUState *cpu)
> * 3. pending_cpus == 0. Then start_exclusive is definitely going to
> * see cpu->running == true, and it will kick the CPU.
> */
> - if (unlikely(atomic_read(&pending_cpus))) {
> + if (unlikely(qatomic_read(&pending_cpus))) {
> QEMU_LOCK_GUARD(&qemu_cpu_list_lock);
> if (!cpu->has_waiter) {
> /* Not counted in pending_cpus, let the exclusive item
> * run. Since we have the lock, just set cpu->running to true
> * while holding it; no need to check pending_cpus again.
> */
> - atomic_set(&cpu->running, false);
> + qatomic_set(&cpu->running, false);
> exclusive_idle();
> /* Now pending_cpus is zero. */
> - atomic_set(&cpu->running, true);
> + qatomic_set(&cpu->running, true);
> } else {
> /* Counted in pending_cpus, go ahead and release the
> * waiter at cpu_exec_end.
> @@ -268,7 +268,7 @@ void cpu_exec_start(CPUState *cpu)
> /* Mark cpu as not executing, and release pending exclusive ops. */
> void cpu_exec_end(CPUState *cpu)
> {
> - atomic_set(&cpu->running, false);
> + qatomic_set(&cpu->running, false);
>
> /* Write cpu->running before reading pending_cpus. */
> smp_mb();
> @@ -288,11 +288,11 @@ void cpu_exec_end(CPUState *cpu)
> * see cpu->running == false, and it can ignore this CPU until the
> * next cpu_exec_start.
> */
> - if (unlikely(atomic_read(&pending_cpus))) {
> + if (unlikely(qatomic_read(&pending_cpus))) {
> QEMU_LOCK_GUARD(&qemu_cpu_list_lock);
> if (cpu->has_waiter) {
> cpu->has_waiter = false;
> - atomic_set(&pending_cpus, pending_cpus - 1);
> + qatomic_set(&pending_cpus, pending_cpus - 1);
> if (pending_cpus == 1) {
> qemu_cond_signal(&exclusive_cond);
> }
> @@ -346,7 +346,7 @@ void process_queued_cpu_work(CPUState *cpu)
> if (wi->free) {
> g_free(wi);
> } else {
> - atomic_mb_set(&wi->done, true);
> + qatomic_mb_set(&wi->done, true);
> }
> }
> qemu_mutex_unlock(&cpu->work_mutex);
> diff --git a/dump/dump.c b/dump/dump.c
> index 13fda440a4..45da46a952 100644
> --- a/dump/dump.c
> +++ b/dump/dump.c
> @@ -1572,7 +1572,7 @@ static void dump_state_prepare(DumpState *s)
> bool dump_in_progress(void)
> {
> DumpState *state = &dump_state_global;
> - return (atomic_read(&state->status) == DUMP_STATUS_ACTIVE);
> + return (qatomic_read(&state->status) == DUMP_STATUS_ACTIVE);
> }
>
> /* calculate total size of memory to be dumped (taking filter into
> @@ -1882,7 +1882,7 @@ static void dump_process(DumpState *s, Error **errp)
>
> /* make sure status is written after written_size updates */
> smp_wmb();
> - atomic_set(&s->status,
> + qatomic_set(&s->status,
> (local_err ? DUMP_STATUS_FAILED : DUMP_STATUS_COMPLETED));
>
> /* send DUMP_COMPLETED message (unconditionally) */
> @@ -1908,7 +1908,7 @@ DumpQueryResult *qmp_query_dump(Error **errp)
> {
> DumpQueryResult *result = g_new(DumpQueryResult, 1);
> DumpState *state = &dump_state_global;
> - result->status = atomic_read(&state->status);
> + result->status = qatomic_read(&state->status);
> /* make sure we are reading status and written_size in order */
> smp_rmb();
> result->completed = state->written_size;
> @@ -2013,7 +2013,7 @@ void qmp_dump_guest_memory(bool paging, const char *file,
> begin, length, &local_err);
> if (local_err) {
> error_propagate(errp, local_err);
> - atomic_set(&s->status, DUMP_STATUS_FAILED);
> + qatomic_set(&s->status, DUMP_STATUS_FAILED);
> return;
> }
>
> diff --git a/exec.c b/exec.c
> index e34b602bdf..3f5deb35ff 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -353,13 +353,13 @@ static MemoryRegionSection *address_space_lookup_region(AddressSpaceDispatch *d,
> hwaddr addr,
> bool resolve_subpage)
> {
> - MemoryRegionSection *section = atomic_read(&d->mru_section);
> + MemoryRegionSection *section = qatomic_read(&d->mru_section);
> subpage_t *subpage;
>
> if (!section || section == &d->map.sections[PHYS_SECTION_UNASSIGNED] ||
> !section_covers_addr(section, addr)) {
> section = phys_page_find(d, addr);
> - atomic_set(&d->mru_section, section);
> + qatomic_set(&d->mru_section, section);
> }
> if (resolve_subpage && section->mr->subpage) {
> subpage = container_of(section->mr, subpage_t, iomem);
> @@ -695,7 +695,8 @@ address_space_translate_for_iotlb(CPUState *cpu, int asidx, hwaddr addr,
> IOMMUMemoryRegionClass *imrc;
> IOMMUTLBEntry iotlb;
> int iommu_idx;
> - AddressSpaceDispatch *d = atomic_rcu_read(&cpu->cpu_ases[asidx].memory_dispatch);
> + AddressSpaceDispatch *d =
> + qatomic_rcu_read(&cpu->cpu_ases[asidx].memory_dispatch);
>
> for (;;) {
> section = address_space_translate_internal(d, addr, &addr, plen, false);
> @@ -1247,7 +1248,7 @@ static RAMBlock *qemu_get_ram_block(ram_addr_t addr)
> {
> RAMBlock *block;
>
> - block = atomic_rcu_read(&ram_list.mru_block);
> + block = qatomic_rcu_read(&ram_list.mru_block);
> if (block && addr - block->offset < block->max_length) {
> return block;
> }
> @@ -1273,7 +1274,7 @@ found:
> * call_rcu(reclaim_ramblock, xxx);
> * rcu_read_unlock()
> *
> - * atomic_rcu_set is not needed here. The block was already published
> + * qatomic_rcu_set is not needed here. The block was already published
> * when it was placed into the list. Here we're just making an extra
> * copy of the pointer.
> */
> @@ -1321,7 +1322,7 @@ bool cpu_physical_memory_test_and_clear_dirty(ram_addr_t start,
> page = start_page;
>
> WITH_RCU_READ_LOCK_GUARD() {
> - blocks = atomic_rcu_read(&ram_list.dirty_memory[client]);
> + blocks = qatomic_rcu_read(&ram_list.dirty_memory[client]);
> ramblock = qemu_get_ram_block(start);
> /* Range sanity check on the ramblock */
> assert(start >= ramblock->offset &&
> @@ -1371,7 +1372,7 @@ DirtyBitmapSnapshot *cpu_physical_memory_snapshot_and_clear_dirty
> dest = 0;
>
> WITH_RCU_READ_LOCK_GUARD() {
> - blocks = atomic_rcu_read(&ram_list.dirty_memory[client]);
> + blocks = qatomic_rcu_read(&ram_list.dirty_memory[client]);
>
> while (page < end) {
> unsigned long idx = page / DIRTY_MEMORY_BLOCK_SIZE;
> @@ -2207,7 +2208,7 @@ static void dirty_memory_extend(ram_addr_t old_ram_size,
> DirtyMemoryBlocks *new_blocks;
> int j;
>
> - old_blocks = atomic_rcu_read(&ram_list.dirty_memory[i]);
> + old_blocks = qatomic_rcu_read(&ram_list.dirty_memory[i]);
> new_blocks = g_malloc(sizeof(*new_blocks) +
> sizeof(new_blocks->blocks[0]) * new_num_blocks);
>
> @@ -2220,7 +2221,7 @@ static void dirty_memory_extend(ram_addr_t old_ram_size,
> new_blocks->blocks[j] = bitmap_new(DIRTY_MEMORY_BLOCK_SIZE);
> }
>
> - atomic_rcu_set(&ram_list.dirty_memory[i], new_blocks);
> + qatomic_rcu_set(&ram_list.dirty_memory[i], new_blocks);
>
> if (old_blocks) {
> g_free_rcu(old_blocks, rcu);
> @@ -2667,7 +2668,7 @@ RAMBlock *qemu_ram_block_from_host(void *ptr, bool round_offset,
> }
>
> RCU_READ_LOCK_GUARD();
> - block = atomic_rcu_read(&ram_list.mru_block);
> + block = qatomic_rcu_read(&ram_list.mru_block);
> if (block && block->host && host - block->host < block->max_length) {
> goto found;
> }
> @@ -2912,7 +2913,7 @@ MemoryRegionSection *iotlb_to_section(CPUState *cpu,
> {
> int asidx = cpu_asidx_from_attrs(cpu, attrs);
> CPUAddressSpace *cpuas = &cpu->cpu_ases[asidx];
> - AddressSpaceDispatch *d = atomic_rcu_read(&cpuas->memory_dispatch);
> + AddressSpaceDispatch *d = qatomic_rcu_read(&cpuas->memory_dispatch);
> MemoryRegionSection *sections = d->map.sections;
>
> return §ions[index & ~TARGET_PAGE_MASK];
> @@ -2996,7 +2997,7 @@ static void tcg_commit(MemoryListener *listener)
> * may have split the RCU critical section.
> */
> d = address_space_to_dispatch(cpuas->as);
> - atomic_rcu_set(&cpuas->memory_dispatch, d);
> + qatomic_rcu_set(&cpuas->memory_dispatch, d);
> tlb_flush(cpuas->cpu);
> }
>
> @@ -3443,7 +3444,7 @@ void cpu_register_map_client(QEMUBH *bh)
> qemu_mutex_lock(&map_client_list_lock);
> client->bh = bh;
> QLIST_INSERT_HEAD(&map_client_list, client, link);
> - if (!atomic_read(&bounce.in_use)) {
> + if (!qatomic_read(&bounce.in_use)) {
> cpu_notify_map_clients_locked();
> }
> qemu_mutex_unlock(&map_client_list_lock);
> @@ -3577,7 +3578,7 @@ void *address_space_map(AddressSpace *as,
> mr = flatview_translate(fv, addr, &xlat, &l, is_write, attrs);
>
> if (!memory_access_is_direct(mr, is_write)) {
> - if (atomic_xchg(&bounce.in_use, true)) {
> + if (qatomic_xchg(&bounce.in_use, true)) {
> *plen = 0;
> return NULL;
> }
> @@ -3636,7 +3637,7 @@ void address_space_unmap(AddressSpace *as, void *buffer, hwaddr len,
> qemu_vfree(bounce.buffer);
> bounce.buffer = NULL;
> memory_region_unref(bounce.mr);
> - atomic_mb_set(&bounce.in_use, false);
> + qatomic_mb_set(&bounce.in_use, false);
> cpu_notify_map_clients();
> }
>
> @@ -4105,16 +4106,17 @@ int ram_block_discard_disable(bool state)
> int old;
>
> if (!state) {
> - atomic_dec(&ram_block_discard_disabled);
> + qatomic_dec(&ram_block_discard_disabled);
> return 0;
> }
>
> do {
> - old = atomic_read(&ram_block_discard_disabled);
> + old = qatomic_read(&ram_block_discard_disabled);
> if (old < 0) {
> return -EBUSY;
> }
> - } while (atomic_cmpxchg(&ram_block_discard_disabled, old, old + 1) != old);
> + } while (qatomic_cmpxchg(&ram_block_discard_disabled,
> + old, old + 1) != old);
> return 0;
> }
>
> @@ -4123,27 +4125,28 @@ int ram_block_discard_require(bool state)
> int old;
>
> if (!state) {
> - atomic_inc(&ram_block_discard_disabled);
> + qatomic_inc(&ram_block_discard_disabled);
> return 0;
> }
>
> do {
> - old = atomic_read(&ram_block_discard_disabled);
> + old = qatomic_read(&ram_block_discard_disabled);
> if (old > 0) {
> return -EBUSY;
> }
> - } while (atomic_cmpxchg(&ram_block_discard_disabled, old, old - 1) != old);
> + } while (qatomic_cmpxchg(&ram_block_discard_disabled,
> + old, old - 1) != old);
> return 0;
> }
>
> bool ram_block_discard_is_disabled(void)
> {
> - return atomic_read(&ram_block_discard_disabled) > 0;
> + return qatomic_read(&ram_block_discard_disabled) > 0;
> }
>
> bool ram_block_discard_is_required(void)
> {
> - return atomic_read(&ram_block_discard_disabled) < 0;
> + return qatomic_read(&ram_block_discard_disabled) < 0;
> }
>
> #endif
> diff --git a/hw/core/cpu.c b/hw/core/cpu.c
> index 8f65383ffb..c55c09f734 100644
> --- a/hw/core/cpu.c
> +++ b/hw/core/cpu.c
> @@ -111,10 +111,10 @@ void cpu_reset_interrupt(CPUState *cpu, int mask)
>
> void cpu_exit(CPUState *cpu)
> {
> - atomic_set(&cpu->exit_request, 1);
> + qatomic_set(&cpu->exit_request, 1);
> /* Ensure cpu_exec will see the exit request after TCG has exited. */
> smp_wmb();
> - atomic_set(&cpu->icount_decr_ptr->u16.high, -1);
> + qatomic_set(&cpu->icount_decr_ptr->u16.high, -1);
> }
>
> int cpu_write_elf32_qemunote(WriteCoreDumpFunction f, CPUState *cpu,
> @@ -261,7 +261,7 @@ static void cpu_common_reset(DeviceState *dev)
> cpu->halted = cpu->start_powered_off;
> cpu->mem_io_pc = 0;
> cpu->icount_extra = 0;
> - atomic_set(&cpu->icount_decr_ptr->u32, 0);
> + qatomic_set(&cpu->icount_decr_ptr->u32, 0);
> cpu->can_do_io = 1;
> cpu->exception_index = -1;
> cpu->crash_occurred = false;
> diff --git a/hw/display/qxl.c b/hw/display/qxl.c
> index 11871340e7..431c107096 100644
> --- a/hw/display/qxl.c
> +++ b/hw/display/qxl.c
> @@ -1908,7 +1908,7 @@ static void qxl_send_events(PCIQXLDevice *d, uint32_t events)
> /*
> * Older versions of Spice forgot to define the QXLRam struct
> * with the '__aligned__(4)' attribute. clang 7 and newer will
> - * thus warn that atomic_fetch_or(&d->ram->int_pending, ...)
> + * thus warn that qatomic_fetch_or(&d->ram->int_pending, ...)
> * might be a misaligned atomic access, and will generate an
> * out-of-line call for it, which results in a link error since
> * we don't currently link against libatomic.
> @@ -1928,7 +1928,7 @@ static void qxl_send_events(PCIQXLDevice *d, uint32_t events)
> #define ALIGNED_UINT32_PTR(P) ((uint32_t *)P)
> #endif
>
> - old_pending = atomic_fetch_or(ALIGNED_UINT32_PTR(&d->ram->int_pending),
> + old_pending = qatomic_fetch_or(ALIGNED_UINT32_PTR(&d->ram->int_pending),
> le_events);
> if ((old_pending & le_events) == le_events) {
> return;
> diff --git a/hw/hyperv/hyperv.c b/hw/hyperv/hyperv.c
> index 4b26db1365..cb1074f234 100644
> --- a/hw/hyperv/hyperv.c
> +++ b/hw/hyperv/hyperv.c
> @@ -231,7 +231,7 @@ static void sint_msg_bh(void *opaque)
> HvSintRoute *sint_route = opaque;
> HvSintStagedMessage *staged_msg = sint_route->staged_msg;
>
> - if (atomic_read(&staged_msg->state) != HV_STAGED_MSG_POSTED) {
> + if (qatomic_read(&staged_msg->state) != HV_STAGED_MSG_POSTED) {
> /* status nor ready yet (spurious ack from guest?), ignore */
> return;
> }
> @@ -240,7 +240,7 @@ static void sint_msg_bh(void *opaque)
> staged_msg->status = 0;
>
> /* staged message processing finished, ready to start over */
> - atomic_set(&staged_msg->state, HV_STAGED_MSG_FREE);
> + qatomic_set(&staged_msg->state, HV_STAGED_MSG_FREE);
> /* drop the reference taken in hyperv_post_msg */
> hyperv_sint_route_unref(sint_route);
> }
> @@ -278,7 +278,7 @@ static void cpu_post_msg(CPUState *cs, run_on_cpu_data data)
> memory_region_set_dirty(&synic->msg_page_mr, 0, sizeof(*synic->msg_page));
>
> posted:
> - atomic_set(&staged_msg->state, HV_STAGED_MSG_POSTED);
> + qatomic_set(&staged_msg->state, HV_STAGED_MSG_POSTED);
> /*
> * Notify the msg originator of the progress made; if the slot was busy we
> * set msg_pending flag in it so it will be the guest who will do EOM and
> @@ -301,7 +301,7 @@ int hyperv_post_msg(HvSintRoute *sint_route, struct hyperv_message *src_msg)
> assert(staged_msg);
>
> /* grab the staging area */
> - if (atomic_cmpxchg(&staged_msg->state, HV_STAGED_MSG_FREE,
> + if (qatomic_cmpxchg(&staged_msg->state, HV_STAGED_MSG_FREE,
> HV_STAGED_MSG_BUSY) != HV_STAGED_MSG_FREE) {
> return -EAGAIN;
> }
> @@ -351,7 +351,7 @@ int hyperv_set_event_flag(HvSintRoute *sint_route, unsigned eventno)
> set_mask = BIT_MASK(eventno);
> flags = synic->event_page->slot[sint_route->sint].flags;
>
> - if ((atomic_fetch_or(&flags[set_idx], set_mask) & set_mask) != set_mask) {
> + if ((qatomic_fetch_or(&flags[set_idx], set_mask) & set_mask) != set_mask) {
> memory_region_set_dirty(&synic->event_page_mr, 0,
> sizeof(*synic->event_page));
> ret = hyperv_sint_route_set_sint(sint_route);
> diff --git a/hw/hyperv/vmbus.c b/hw/hyperv/vmbus.c
> index 6ef895bc35..896e981f85 100644
> --- a/hw/hyperv/vmbus.c
> +++ b/hw/hyperv/vmbus.c
> @@ -747,7 +747,7 @@ static int vmbus_channel_notify_guest(VMBusChannel *chan)
>
> idx = BIT_WORD(chan->id);
> mask = BIT_MASK(chan->id);
> - if ((atomic_fetch_or(&int_map[idx], mask) & mask) != mask) {
> + if ((qatomic_fetch_or(&int_map[idx], mask) & mask) != mask) {
> res = hyperv_sint_route_set_sint(chan->notify_route);
> dirty = len;
> }
> diff --git a/hw/i386/xen/xen-hvm.c b/hw/i386/xen/xen-hvm.c
> index cde981bad6..a39a648ca6 100644
> --- a/hw/i386/xen/xen-hvm.c
> +++ b/hw/i386/xen/xen-hvm.c
> @@ -1140,7 +1140,7 @@ static int handle_buffered_iopage(XenIOState *state)
> assert(req.dir == IOREQ_WRITE);
> assert(!req.data_is_ptr);
>
> - atomic_add(&buf_page->read_pointer, qw + 1);
> + qatomic_add(&buf_page->read_pointer, qw + 1);
> }
>
> return req.count;
> diff --git a/hw/intc/rx_icu.c b/hw/intc/rx_icu.c
> index df4b6a8d22..94e17a9dea 100644
> --- a/hw/intc/rx_icu.c
> +++ b/hw/intc/rx_icu.c
> @@ -81,8 +81,8 @@ static void rxicu_request(RXICUState *icu, int n_IRQ)
> int enable;
>
> enable = icu->ier[n_IRQ / 8] & (1 << (n_IRQ & 7));
> - if (n_IRQ > 0 && enable != 0 && atomic_read(&icu->req_irq) < 0) {
> - atomic_set(&icu->req_irq, n_IRQ);
> + if (n_IRQ > 0 && enable != 0 && qatomic_read(&icu->req_irq) < 0) {
> + qatomic_set(&icu->req_irq, n_IRQ);
> set_irq(icu, n_IRQ, rxicu_level(icu, n_IRQ));
> }
> }
> @@ -124,10 +124,10 @@ static void rxicu_set_irq(void *opaque, int n_IRQ, int level)
> }
> if (issue == 0 && src->sense == TRG_LEVEL) {
> icu->ir[n_IRQ] = 0;
> - if (atomic_read(&icu->req_irq) == n_IRQ) {
> + if (qatomic_read(&icu->req_irq) == n_IRQ) {
> /* clear request */
> set_irq(icu, n_IRQ, 0);
> - atomic_set(&icu->req_irq, -1);
> + qatomic_set(&icu->req_irq, -1);
> }
> return;
> }
> @@ -144,11 +144,11 @@ static void rxicu_ack_irq(void *opaque, int no, int level)
> int n_IRQ;
> int max_pri;
>
> - n_IRQ = atomic_read(&icu->req_irq);
> + n_IRQ = qatomic_read(&icu->req_irq);
> if (n_IRQ < 0) {
> return;
> }
> - atomic_set(&icu->req_irq, -1);
> + qatomic_set(&icu->req_irq, -1);
> if (icu->src[n_IRQ].sense != TRG_LEVEL) {
> icu->ir[n_IRQ] = 0;
> }
> diff --git a/hw/intc/sifive_plic.c b/hw/intc/sifive_plic.c
> index af611f8db8..f42fd695d8 100644
> --- a/hw/intc/sifive_plic.c
> +++ b/hw/intc/sifive_plic.c
> @@ -89,12 +89,12 @@ static void sifive_plic_print_state(SiFivePLICState *plic)
>
> static uint32_t atomic_set_masked(uint32_t *a, uint32_t mask, uint32_t value)
> {
> - uint32_t old, new, cmp = atomic_read(a);
> + uint32_t old, new, cmp = qatomic_read(a);
>
> do {
> old = cmp;
> new = (old & ~mask) | (value & mask);
> - cmp = atomic_cmpxchg(a, old, new);
> + cmp = qatomic_cmpxchg(a, old, new);
> } while (old != cmp);
>
> return old;
> diff --git a/hw/misc/edu.c b/hw/misc/edu.c
> index 0ff9d1ac78..e935c418d4 100644
> --- a/hw/misc/edu.c
> +++ b/hw/misc/edu.c
> @@ -212,7 +212,7 @@ static uint64_t edu_mmio_read(void *opaque, hwaddr addr, unsigned size)
> qemu_mutex_unlock(&edu->thr_mutex);
> break;
> case 0x20:
> - val = atomic_read(&edu->status);
> + val = qatomic_read(&edu->status);
> break;
> case 0x24:
> val = edu->irq_status;
> @@ -252,7 +252,7 @@ static void edu_mmio_write(void *opaque, hwaddr addr, uint64_t val,
> edu->addr4 = ~val;
> break;
> case 0x08:
> - if (atomic_read(&edu->status) & EDU_STATUS_COMPUTING) {
> + if (qatomic_read(&edu->status) & EDU_STATUS_COMPUTING) {
> break;
> }
> /* EDU_STATUS_COMPUTING cannot go 0->1 concurrently, because it is only
> @@ -260,15 +260,15 @@ static void edu_mmio_write(void *opaque, hwaddr addr, uint64_t val,
> */
> qemu_mutex_lock(&edu->thr_mutex);
> edu->fact = val;
> - atomic_or(&edu->status, EDU_STATUS_COMPUTING);
> + qatomic_or(&edu->status, EDU_STATUS_COMPUTING);
> qemu_cond_signal(&edu->thr_cond);
> qemu_mutex_unlock(&edu->thr_mutex);
> break;
> case 0x20:
> if (val & EDU_STATUS_IRQFACT) {
> - atomic_or(&edu->status, EDU_STATUS_IRQFACT);
> + qatomic_or(&edu->status, EDU_STATUS_IRQFACT);
> } else {
> - atomic_and(&edu->status, ~EDU_STATUS_IRQFACT);
> + qatomic_and(&edu->status, ~EDU_STATUS_IRQFACT);
> }
> break;
> case 0x60:
> @@ -322,7 +322,7 @@ static void *edu_fact_thread(void *opaque)
> uint32_t val, ret = 1;
>
> qemu_mutex_lock(&edu->thr_mutex);
> - while ((atomic_read(&edu->status) & EDU_STATUS_COMPUTING) == 0 &&
> + while ((qatomic_read(&edu->status) & EDU_STATUS_COMPUTING) == 0 &&
> !edu->stopping) {
> qemu_cond_wait(&edu->thr_cond, &edu->thr_mutex);
> }
> @@ -347,9 +347,9 @@ static void *edu_fact_thread(void *opaque)
> qemu_mutex_lock(&edu->thr_mutex);
> edu->fact = ret;
> qemu_mutex_unlock(&edu->thr_mutex);
> - atomic_and(&edu->status, ~EDU_STATUS_COMPUTING);
> + qatomic_and(&edu->status, ~EDU_STATUS_COMPUTING);
>
> - if (atomic_read(&edu->status) & EDU_STATUS_IRQFACT) {
> + if (qatomic_read(&edu->status) & EDU_STATUS_IRQFACT) {
> qemu_mutex_lock_iothread();
> edu_raise_irq(edu, FACT_IRQ);
> qemu_mutex_unlock_iothread();
> diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
> index cb0d27084c..7bf27b9db7 100644
> --- a/hw/net/virtio-net.c
> +++ b/hw/net/virtio-net.c
> @@ -933,7 +933,7 @@ static void virtio_net_set_features(VirtIODevice *vdev, uint64_t features)
>
> if (virtio_has_feature(features, VIRTIO_NET_F_STANDBY)) {
> qapi_event_send_failover_negotiated(n->netclient_name);
> - atomic_set(&n->primary_should_be_hidden, false);
> + qatomic_set(&n->primary_should_be_hidden, false);
> failover_add_primary(n, &err);
> if (err) {
> n->primary_dev = virtio_connect_failover_devices(n, n->qdev, &err);
> @@ -3168,7 +3168,7 @@ static void virtio_net_handle_migration_primary(VirtIONet *n,
> bool should_be_hidden;
> Error *err = NULL;
>
> - should_be_hidden = atomic_read(&n->primary_should_be_hidden);
> + should_be_hidden = qatomic_read(&n->primary_should_be_hidden);
>
> if (!n->primary_dev) {
> n->primary_dev = virtio_connect_failover_devices(n, n->qdev, &err);
> @@ -3183,7 +3183,7 @@ static void virtio_net_handle_migration_primary(VirtIONet *n,
> qdev_get_vmsd(n->primary_dev),
> n->primary_dev);
> qapi_event_send_unplug_primary(n->primary_device_id);
> - atomic_set(&n->primary_should_be_hidden, true);
> + qatomic_set(&n->primary_should_be_hidden, true);
> } else {
> warn_report("couldn't unplug primary device");
> }
> @@ -3234,7 +3234,7 @@ static int virtio_net_primary_should_be_hidden(DeviceListener *listener,
> n->primary_device_opts = device_opts;
>
> /* primary_should_be_hidden is set during feature negotiation */
> - hide = atomic_read(&n->primary_should_be_hidden);
> + hide = qatomic_read(&n->primary_should_be_hidden);
>
> if (n->primary_device_dict) {
> g_free(n->primary_device_id);
> @@ -3291,7 +3291,7 @@ static void virtio_net_device_realize(DeviceState *dev, Error **errp)
> if (n->failover) {
> n->primary_listener.should_be_hidden =
> virtio_net_primary_should_be_hidden;
> - atomic_set(&n->primary_should_be_hidden, true);
> + qatomic_set(&n->primary_should_be_hidden, true);
> device_listener_register(&n->primary_listener);
> n->migration_state.notify = virtio_net_migration_state_notifier;
> add_migration_state_change_notifier(&n->migration_state);
> diff --git a/hw/rdma/rdma_backend.c b/hw/rdma/rdma_backend.c
> index db7e5c8be5..5de010b1fa 100644
> --- a/hw/rdma/rdma_backend.c
> +++ b/hw/rdma/rdma_backend.c
> @@ -68,7 +68,7 @@ static void free_cqe_ctx(gpointer data, gpointer user_data)
> bctx = rdma_rm_get_cqe_ctx(rdma_dev_res, cqe_ctx_id);
> if (bctx) {
> rdma_rm_dealloc_cqe_ctx(rdma_dev_res, cqe_ctx_id);
> - atomic_dec(&rdma_dev_res->stats.missing_cqe);
> + qatomic_dec(&rdma_dev_res->stats.missing_cqe);
> }
> g_free(bctx);
> }
> @@ -81,7 +81,7 @@ static void clean_recv_mads(RdmaBackendDev *backend_dev)
> cqe_ctx_id = rdma_protected_qlist_pop_int64(&backend_dev->
> recv_mads_list);
> if (cqe_ctx_id != -ENOENT) {
> - atomic_inc(&backend_dev->rdma_dev_res->stats.missing_cqe);
> + qatomic_inc(&backend_dev->rdma_dev_res->stats.missing_cqe);
> free_cqe_ctx(GINT_TO_POINTER(cqe_ctx_id),
> backend_dev->rdma_dev_res);
> }
> @@ -123,7 +123,7 @@ static int rdma_poll_cq(RdmaDeviceResources *rdma_dev_res, struct ibv_cq *ibcq)
> }
> total_ne += ne;
> } while (ne > 0);
> - atomic_sub(&rdma_dev_res->stats.missing_cqe, total_ne);
> + qatomic_sub(&rdma_dev_res->stats.missing_cqe, total_ne);
> }
>
> if (ne < 0) {
> @@ -195,17 +195,17 @@ static void *comp_handler_thread(void *arg)
>
> static inline void disable_rdmacm_mux_async(RdmaBackendDev *backend_dev)
> {
> - atomic_set(&backend_dev->rdmacm_mux.can_receive, 0);
> + qatomic_set(&backend_dev->rdmacm_mux.can_receive, 0);
> }
>
> static inline void enable_rdmacm_mux_async(RdmaBackendDev *backend_dev)
> {
> - atomic_set(&backend_dev->rdmacm_mux.can_receive, sizeof(RdmaCmMuxMsg));
> + qatomic_set(&backend_dev->rdmacm_mux.can_receive, sizeof(RdmaCmMuxMsg));
> }
>
> static inline int rdmacm_mux_can_process_async(RdmaBackendDev *backend_dev)
> {
> - return atomic_read(&backend_dev->rdmacm_mux.can_receive);
> + return qatomic_read(&backend_dev->rdmacm_mux.can_receive);
> }
>
> static int rdmacm_mux_check_op_status(CharBackend *mad_chr_be)
> @@ -555,7 +555,7 @@ void rdma_backend_post_send(RdmaBackendDev *backend_dev,
> goto err_dealloc_cqe_ctx;
> }
>
> - atomic_inc(&backend_dev->rdma_dev_res->stats.missing_cqe);
> + qatomic_inc(&backend_dev->rdma_dev_res->stats.missing_cqe);
> backend_dev->rdma_dev_res->stats.tx++;
>
> return;
> @@ -658,7 +658,7 @@ void rdma_backend_post_recv(RdmaBackendDev *backend_dev,
> goto err_dealloc_cqe_ctx;
> }
>
> - atomic_inc(&backend_dev->rdma_dev_res->stats.missing_cqe);
> + qatomic_inc(&backend_dev->rdma_dev_res->stats.missing_cqe);
> backend_dev->rdma_dev_res->stats.rx_bufs++;
>
> return;
> @@ -710,7 +710,7 @@ void rdma_backend_post_srq_recv(RdmaBackendDev *backend_dev,
> goto err_dealloc_cqe_ctx;
> }
>
> - atomic_inc(&backend_dev->rdma_dev_res->stats.missing_cqe);
> + qatomic_inc(&backend_dev->rdma_dev_res->stats.missing_cqe);
> backend_dev->rdma_dev_res->stats.rx_bufs++;
> backend_dev->rdma_dev_res->stats.rx_srq++;
>
> diff --git a/hw/rdma/rdma_rm.c b/hw/rdma/rdma_rm.c
> index 60957f88db..49141d4074 100644
> --- a/hw/rdma/rdma_rm.c
> +++ b/hw/rdma/rdma_rm.c
> @@ -790,7 +790,7 @@ int rdma_rm_init(RdmaDeviceResources *dev_res, struct ibv_device_attr *dev_attr)
> qemu_mutex_init(&dev_res->lock);
>
> memset(&dev_res->stats, 0, sizeof(dev_res->stats));
> - atomic_set(&dev_res->stats.missing_cqe, 0);
> + qatomic_set(&dev_res->stats.missing_cqe, 0);
>
> return 0;
> }
> diff --git a/hw/rdma/vmw/pvrdma_dev_ring.c b/hw/rdma/vmw/pvrdma_dev_ring.c
> index c122fe7035..f0bcde74b0 100644
> --- a/hw/rdma/vmw/pvrdma_dev_ring.c
> +++ b/hw/rdma/vmw/pvrdma_dev_ring.c
> @@ -38,8 +38,8 @@ int pvrdma_ring_init(PvrdmaRing *ring, const char *name, PCIDevice *dev,
> ring->max_elems = max_elems;
> ring->elem_sz = elem_sz;
> /* TODO: Give a moment to think if we want to redo driver settings
> - atomic_set(&ring->ring_state->prod_tail, 0);
> - atomic_set(&ring->ring_state->cons_head, 0);
> + qatomic_set(&ring->ring_state->prod_tail, 0);
> + qatomic_set(&ring->ring_state->cons_head, 0);
> */
> ring->npages = npages;
> ring->pages = g_malloc(npages * sizeof(void *));
> diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c
> index 92146a2119..fb4cee87a4 100644
> --- a/hw/s390x/s390-pci-bus.c
> +++ b/hw/s390x/s390-pci-bus.c
> @@ -650,7 +650,7 @@ static uint8_t set_ind_atomic(uint64_t ind_loc, uint8_t to_be_set)
> actual = *ind_addr;
> do {
> expected = actual;
> - actual = atomic_cmpxchg(ind_addr, expected, expected | to_be_set);
> + actual = qatomic_cmpxchg(ind_addr, expected, expected | to_be_set);
> } while (actual != expected);
> cpu_physical_memory_unmap((void *)ind_addr, len, 1, len);
>
> diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c
> index 8feb3451a0..8d140dc50f 100644
> --- a/hw/s390x/virtio-ccw.c
> +++ b/hw/s390x/virtio-ccw.c
> @@ -800,7 +800,7 @@ static uint8_t virtio_set_ind_atomic(SubchDev *sch, uint64_t ind_loc,
> actual = *ind_addr;
> do {
> expected = actual;
> - actual = atomic_cmpxchg(ind_addr, expected, expected | to_be_set);
> + actual = qatomic_cmpxchg(ind_addr, expected, expected | to_be_set);
> } while (actual != expected);
> trace_virtio_ccw_set_ind(ind_loc, actual, actual | to_be_set);
> cpu_physical_memory_unmap((void *)ind_addr, len, 1, len);
> diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c
> index 1a1384e7a6..0119516254 100644
> --- a/hw/virtio/vhost.c
> +++ b/hw/virtio/vhost.c
> @@ -90,7 +90,7 @@ static void vhost_dev_sync_region(struct vhost_dev *dev,
> }
> /* Data must be read atomically. We don't really need barrier semantics
> * but it's easier to use atomic_* than roll our own. */
> - log = atomic_xchg(from, 0);
> + log = qatomic_xchg(from, 0);
> while (log) {
> int bit = ctzl(log);
> hwaddr page_addr;
> diff --git a/hw/virtio/virtio-mmio.c b/hw/virtio/virtio-mmio.c
> index f12d1595aa..e1b5c3b81e 100644
> --- a/hw/virtio/virtio-mmio.c
> +++ b/hw/virtio/virtio-mmio.c
> @@ -179,7 +179,7 @@ static uint64_t virtio_mmio_read(void *opaque, hwaddr offset, unsigned size)
> }
> return proxy->vqs[vdev->queue_sel].enabled;
> case VIRTIO_MMIO_INTERRUPT_STATUS:
> - return atomic_read(&vdev->isr);
> + return qatomic_read(&vdev->isr);
> case VIRTIO_MMIO_STATUS:
> return vdev->status;
> case VIRTIO_MMIO_CONFIG_GENERATION:
> @@ -370,7 +370,7 @@ static void virtio_mmio_write(void *opaque, hwaddr offset, uint64_t value,
> }
> break;
> case VIRTIO_MMIO_INTERRUPT_ACK:
> - atomic_and(&vdev->isr, ~value);
> + qatomic_and(&vdev->isr, ~value);
> virtio_update_irq(vdev);
> break;
> case VIRTIO_MMIO_STATUS:
> @@ -496,7 +496,7 @@ static void virtio_mmio_update_irq(DeviceState *opaque, uint16_t vector)
> if (!vdev) {
> return;
> }
> - level = (atomic_read(&vdev->isr) != 0);
> + level = (qatomic_read(&vdev->isr) != 0);
> trace_virtio_mmio_setting_irq(level);
> qemu_set_irq(proxy->irq, level);
> }
> diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
> index 5bc769f685..02790e3237 100644
> --- a/hw/virtio/virtio-pci.c
> +++ b/hw/virtio/virtio-pci.c
> @@ -72,7 +72,7 @@ static void virtio_pci_notify(DeviceState *d, uint16_t vector)
> msix_notify(&proxy->pci_dev, vector);
> else {
> VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
> - pci_set_irq(&proxy->pci_dev, atomic_read(&vdev->isr) & 1);
> + pci_set_irq(&proxy->pci_dev, qatomic_read(&vdev->isr) & 1);
> }
> }
>
> @@ -398,7 +398,7 @@ static uint32_t virtio_ioport_read(VirtIOPCIProxy *proxy, uint32_t addr)
> break;
> case VIRTIO_PCI_ISR:
> /* reading from the ISR also clears it. */
> - ret = atomic_xchg(&vdev->isr, 0);
> + ret = qatomic_xchg(&vdev->isr, 0);
> pci_irq_deassert(&proxy->pci_dev);
> break;
> case VIRTIO_MSI_CONFIG_VECTOR:
> @@ -1362,7 +1362,7 @@ static uint64_t virtio_pci_isr_read(void *opaque, hwaddr addr,
> {
> VirtIOPCIProxy *proxy = opaque;
> VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
> - uint64_t val = atomic_xchg(&vdev->isr, 0);
> + uint64_t val = qatomic_xchg(&vdev->isr, 0);
> pci_irq_deassert(&proxy->pci_dev);
>
> return val;
> diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
> index e983025217..3a3d012d9f 100644
> --- a/hw/virtio/virtio.c
> +++ b/hw/virtio/virtio.c
> @@ -149,8 +149,8 @@ static void virtio_virtqueue_reset_region_cache(struct VirtQueue *vq)
> {
> VRingMemoryRegionCaches *caches;
>
> - caches = atomic_read(&vq->vring.caches);
> - atomic_rcu_set(&vq->vring.caches, NULL);
> + caches = qatomic_read(&vq->vring.caches);
> + qatomic_rcu_set(&vq->vring.caches, NULL);
> if (caches) {
> call_rcu(caches, virtio_free_region_cache, rcu);
> }
> @@ -197,7 +197,7 @@ static void virtio_init_region_cache(VirtIODevice *vdev, int n)
> goto err_avail;
> }
>
> - atomic_rcu_set(&vq->vring.caches, new);
> + qatomic_rcu_set(&vq->vring.caches, new);
> if (old) {
> call_rcu(old, virtio_free_region_cache, rcu);
> }
> @@ -283,7 +283,7 @@ static void vring_packed_flags_write(VirtIODevice *vdev,
> /* Called within rcu_read_lock(). */
> static VRingMemoryRegionCaches *vring_get_region_caches(struct VirtQueue *vq)
> {
> - return atomic_rcu_read(&vq->vring.caches);
> + return qatomic_rcu_read(&vq->vring.caches);
> }
>
> /* Called within rcu_read_lock(). */
> @@ -2007,7 +2007,7 @@ void virtio_reset(void *opaque)
> vdev->queue_sel = 0;
> vdev->status = 0;
> vdev->disabled = false;
> - atomic_set(&vdev->isr, 0);
> + qatomic_set(&vdev->isr, 0);
> vdev->config_vector = VIRTIO_NO_VECTOR;
> virtio_notify_vector(vdev, vdev->config_vector);
>
> @@ -2439,13 +2439,13 @@ void virtio_del_queue(VirtIODevice *vdev, int n)
>
> static void virtio_set_isr(VirtIODevice *vdev, int value)
> {
> - uint8_t old = atomic_read(&vdev->isr);
> + uint8_t old = qatomic_read(&vdev->isr);
>
> /* Do not write ISR if it does not change, so that its cacheline remains
> * shared in the common case where the guest does not read it.
> */
> if ((old & value) != value) {
> - atomic_or(&vdev->isr, value);
> + qatomic_or(&vdev->isr, value);
> }
> }
>
> @@ -3254,7 +3254,7 @@ void virtio_init(VirtIODevice *vdev, const char *name,
> vdev->started = false;
> vdev->device_id = device_id;
> vdev->status = 0;
> - atomic_set(&vdev->isr, 0);
> + qatomic_set(&vdev->isr, 0);
> vdev->queue_sel = 0;
> vdev->config_vector = VIRTIO_NO_VECTOR;
> vdev->vq = g_malloc0(sizeof(VirtQueue) * VIRTIO_QUEUE_MAX);
> diff --git a/hw/xtensa/pic_cpu.c b/hw/xtensa/pic_cpu.c
> index 1d5982a9e4..6c9447565d 100644
> --- a/hw/xtensa/pic_cpu.c
> +++ b/hw/xtensa/pic_cpu.c
> @@ -72,9 +72,9 @@ static void xtensa_set_irq(void *opaque, int irq, int active)
> uint32_t irq_bit = 1 << irq;
>
> if (active) {
> - atomic_or(&env->sregs[INTSET], irq_bit);
> + qatomic_or(&env->sregs[INTSET], irq_bit);
> } else if (env->config->interrupt[irq].inttype == INTTYPE_LEVEL) {
> - atomic_and(&env->sregs[INTSET], ~irq_bit);
> + qatomic_and(&env->sregs[INTSET], ~irq_bit);
> }
>
> check_interrupts(env);
> diff --git a/iothread.c b/iothread.c
> index 3a3860a09c..69eff9efbc 100644
> --- a/iothread.c
> +++ b/iothread.c
> @@ -76,7 +76,7 @@ static void *iothread_run(void *opaque)
> * We must check the running state again in case it was
> * changed in previous aio_poll()
> */
> - if (iothread->running && atomic_read(&iothread->run_gcontext)) {
> + if (iothread->running && qatomic_read(&iothread->run_gcontext)) {
> g_main_loop_run(iothread->main_loop);
> }
> }
> @@ -116,7 +116,7 @@ static void iothread_instance_init(Object *obj)
> iothread->thread_id = -1;
> qemu_sem_init(&iothread->init_done_sem, 0);
> /* By default, we don't run gcontext */
> - atomic_set(&iothread->run_gcontext, 0);
> + qatomic_set(&iothread->run_gcontext, 0);
> }
>
> static void iothread_instance_finalize(Object *obj)
> @@ -348,7 +348,7 @@ IOThreadInfoList *qmp_query_iothreads(Error **errp)
>
> GMainContext *iothread_get_g_main_context(IOThread *iothread)
> {
> - atomic_set(&iothread->run_gcontext, 1);
> + qatomic_set(&iothread->run_gcontext, 1);
> aio_notify(iothread->ctx);
> return iothread->worker_context;
> }
> diff --git a/linux-user/hppa/cpu_loop.c b/linux-user/hppa/cpu_loop.c
> index 9915456a1d..d7e1ec7722 100644
> --- a/linux-user/hppa/cpu_loop.c
> +++ b/linux-user/hppa/cpu_loop.c
> @@ -39,7 +39,7 @@ static abi_ulong hppa_lws(CPUHPPAState *env)
> }
> old = tswap32(old);
> new = tswap32(new);
> - ret = atomic_cmpxchg((uint32_t *)g2h(addr), old, new);
> + ret = qatomic_cmpxchg((uint32_t *)g2h(addr), old, new);
> ret = tswap32(ret);
> break;
>
> @@ -60,19 +60,19 @@ static abi_ulong hppa_lws(CPUHPPAState *env)
> case 0:
> old = *(uint8_t *)g2h(old);
> new = *(uint8_t *)g2h(new);
> - ret = atomic_cmpxchg((uint8_t *)g2h(addr), old, new);
> + ret = qatomic_cmpxchg((uint8_t *)g2h(addr), old, new);
> ret = ret != old;
> break;
> case 1:
> old = *(uint16_t *)g2h(old);
> new = *(uint16_t *)g2h(new);
> - ret = atomic_cmpxchg((uint16_t *)g2h(addr), old, new);
> + ret = qatomic_cmpxchg((uint16_t *)g2h(addr), old, new);
> ret = ret != old;
> break;
> case 2:
> old = *(uint32_t *)g2h(old);
> new = *(uint32_t *)g2h(new);
> - ret = atomic_cmpxchg((uint32_t *)g2h(addr), old, new);
> + ret = qatomic_cmpxchg((uint32_t *)g2h(addr), old, new);
> ret = ret != old;
> break;
> case 3:
> @@ -81,7 +81,8 @@ static abi_ulong hppa_lws(CPUHPPAState *env)
> o64 = *(uint64_t *)g2h(old);
> n64 = *(uint64_t *)g2h(new);
> #ifdef CONFIG_ATOMIC64
> - r64 = atomic_cmpxchg__nocheck((uint64_t *)g2h(addr), o64, n64);
> + r64 = qatomic_cmpxchg__nocheck((uint64_t *)g2h(addr),
> + o64, n64);
> ret = r64 != o64;
> #else
> start_exclusive();
> diff --git a/linux-user/signal.c b/linux-user/signal.c
> index 8cf51ffecd..73de934c65 100644
> --- a/linux-user/signal.c
> +++ b/linux-user/signal.c
> @@ -195,7 +195,7 @@ int block_signals(void)
> sigfillset(&set);
> sigprocmask(SIG_SETMASK, &set, 0);
>
> - return atomic_xchg(&ts->signal_pending, 1);
> + return qatomic_xchg(&ts->signal_pending, 1);
> }
>
> /* Wrapper for sigprocmask function
> @@ -688,7 +688,7 @@ int queue_signal(CPUArchState *env, int sig, int si_type,
> ts->sync_signal.info = *info;
> ts->sync_signal.pending = sig;
> /* signal that a new signal is pending */
> - atomic_set(&ts->signal_pending, 1);
> + qatomic_set(&ts->signal_pending, 1);
> return 1; /* indicates that the signal was queued */
> }
>
> @@ -1005,7 +1005,7 @@ void process_pending_signals(CPUArchState *cpu_env)
> sigset_t set;
> sigset_t *blocked_set;
>
> - while (atomic_read(&ts->signal_pending)) {
> + while (qatomic_read(&ts->signal_pending)) {
> /* FIXME: This is not threadsafe. */
> sigfillset(&set);
> sigprocmask(SIG_SETMASK, &set, 0);
> @@ -1049,7 +1049,7 @@ void process_pending_signals(CPUArchState *cpu_env)
> * of unblocking might cause us to take another host signal which
> * will set signal_pending again).
> */
> - atomic_set(&ts->signal_pending, 0);
> + qatomic_set(&ts->signal_pending, 0);
> ts->in_sigsuspend = 0;
> set = ts->signal_mask;
> sigdelset(&set, SIGSEGV);
> diff --git a/migration/colo-failover.c b/migration/colo-failover.c
> index b717edc8e2..42453481c4 100644
> --- a/migration/colo-failover.c
> +++ b/migration/colo-failover.c
> @@ -63,7 +63,7 @@ FailoverStatus failover_set_state(FailoverStatus old_state,
> {
> FailoverStatus old;
>
> - old = atomic_cmpxchg(&failover_state, old_state, new_state);
> + old = qatomic_cmpxchg(&failover_state, old_state, new_state);
> if (old == old_state) {
> trace_colo_failover_set_state(FailoverStatus_str(new_state));
> }
> @@ -72,7 +72,7 @@ FailoverStatus failover_set_state(FailoverStatus old_state,
>
> FailoverStatus failover_get_state(void)
> {
> - return atomic_read(&failover_state);
> + return qatomic_read(&failover_state);
> }
>
> void qmp_x_colo_lost_heartbeat(Error **errp)
> diff --git a/migration/migration.c b/migration/migration.c
> index 58a5452471..d9d1e0b190 100644
> --- a/migration/migration.c
> +++ b/migration/migration.c
> @@ -1595,7 +1595,7 @@ void qmp_migrate_start_postcopy(Error **errp)
> * we don't error if migration has finished since that would be racy
> * with issuing this command.
> */
> - atomic_set(&s->start_postcopy, true);
> + qatomic_set(&s->start_postcopy, true);
> }
>
> /* shared migration helpers */
> @@ -1603,7 +1603,7 @@ void qmp_migrate_start_postcopy(Error **errp)
> void migrate_set_state(int *state, int old_state, int new_state)
> {
> assert(new_state < MIGRATION_STATUS__MAX);
> - if (atomic_cmpxchg(state, old_state, new_state) == old_state) {
> + if (qatomic_cmpxchg(state, old_state, new_state) == old_state) {
> trace_migrate_set_state(MigrationStatus_str(new_state));
> migrate_generate_event(new_state);
> }
> @@ -1954,7 +1954,7 @@ void qmp_migrate_recover(const char *uri, Error **errp)
> return;
> }
>
> - if (atomic_cmpxchg(&mis->postcopy_recover_triggered,
> + if (qatomic_cmpxchg(&mis->postcopy_recover_triggered,
> false, true) == true) {
> error_setg(errp, "Migrate recovery is triggered already");
> return;
> @@ -3329,7 +3329,7 @@ static MigIterateState migration_iteration_run(MigrationState *s)
> if (pending_size && pending_size >= s->threshold_size) {
> /* Still a significant amount to transfer */
> if (!in_postcopy && pend_pre <= s->threshold_size &&
> - atomic_read(&s->start_postcopy)) {
> + qatomic_read(&s->start_postcopy)) {
> if (postcopy_start(s)) {
> error_report("%s: postcopy failed to start", __func__);
> }
> diff --git a/migration/multifd.c b/migration/multifd.c
> index ac84a61797..fd57378db8 100644
> --- a/migration/multifd.c
> +++ b/migration/multifd.c
> @@ -410,7 +410,7 @@ static int multifd_send_pages(QEMUFile *f)
> MultiFDPages_t *pages = multifd_send_state->pages;
> uint64_t transferred;
>
> - if (atomic_read(&multifd_send_state->exiting)) {
> + if (qatomic_read(&multifd_send_state->exiting)) {
> return -1;
> }
>
> @@ -508,7 +508,7 @@ static void multifd_send_terminate_threads(Error *err)
> * threads at the same time, we can end calling this function
> * twice.
> */
> - if (atomic_xchg(&multifd_send_state->exiting, 1)) {
> + if (qatomic_xchg(&multifd_send_state->exiting, 1)) {
> return;
> }
>
> @@ -632,7 +632,7 @@ static void *multifd_send_thread(void *opaque)
> while (true) {
> qemu_sem_wait(&p->sem);
>
> - if (atomic_read(&multifd_send_state->exiting)) {
> + if (qatomic_read(&multifd_send_state->exiting)) {
> break;
> }
> qemu_mutex_lock(&p->mutex);
> @@ -760,7 +760,7 @@ int multifd_save_setup(Error **errp)
> multifd_send_state->params = g_new0(MultiFDSendParams, thread_count);
> multifd_send_state->pages = multifd_pages_init(page_count);
> qemu_sem_init(&multifd_send_state->channels_ready, 0);
> - atomic_set(&multifd_send_state->exiting, 0);
> + qatomic_set(&multifd_send_state->exiting, 0);
> multifd_send_state->ops = multifd_ops[migrate_multifd_compression()];
>
> for (i = 0; i < thread_count; i++) {
> @@ -997,7 +997,7 @@ int multifd_load_setup(Error **errp)
> thread_count = migrate_multifd_channels();
> multifd_recv_state = g_malloc0(sizeof(*multifd_recv_state));
> multifd_recv_state->params = g_new0(MultiFDRecvParams, thread_count);
> - atomic_set(&multifd_recv_state->count, 0);
> + qatomic_set(&multifd_recv_state->count, 0);
> qemu_sem_init(&multifd_recv_state->sem_sync, 0);
> multifd_recv_state->ops = multifd_ops[migrate_multifd_compression()];
>
> @@ -1037,7 +1037,7 @@ bool multifd_recv_all_channels_created(void)
> return true;
> }
>
> - return thread_count == atomic_read(&multifd_recv_state->count);
> + return thread_count == qatomic_read(&multifd_recv_state->count);
> }
>
> /*
> @@ -1058,7 +1058,7 @@ bool multifd_recv_new_channel(QIOChannel *ioc, Error **errp)
> error_propagate_prepend(errp, local_err,
> "failed to receive packet"
> " via multifd channel %d: ",
> - atomic_read(&multifd_recv_state->count));
> + qatomic_read(&multifd_recv_state->count));
> return false;
> }
> trace_multifd_recv_new_channel(id);
> @@ -1079,7 +1079,7 @@ bool multifd_recv_new_channel(QIOChannel *ioc, Error **errp)
> p->running = true;
> qemu_thread_create(&p->thread, p->name, multifd_recv_thread, p,
> QEMU_THREAD_JOINABLE);
> - atomic_inc(&multifd_recv_state->count);
> - return atomic_read(&multifd_recv_state->count) ==
> + qatomic_inc(&multifd_recv_state->count);
> + return qatomic_read(&multifd_recv_state->count) ==
> migrate_multifd_channels();
> }
> diff --git a/migration/postcopy-ram.c b/migration/postcopy-ram.c
> index baf094ba3a..1654ff11a5 100644
> --- a/migration/postcopy-ram.c
> +++ b/migration/postcopy-ram.c
> @@ -530,7 +530,7 @@ int postcopy_ram_incoming_cleanup(MigrationIncomingState *mis)
> Error *local_err = NULL;
>
> /* Let the fault thread quit */
> - atomic_set(&mis->fault_thread_quit, 1);
> + qatomic_set(&mis->fault_thread_quit, 1);
> postcopy_fault_thread_notify(mis);
> trace_postcopy_ram_incoming_cleanup_join();
> qemu_thread_join(&mis->fault_thread);
> @@ -742,12 +742,12 @@ static void mark_postcopy_blocktime_begin(uintptr_t addr, uint32_t ptid,
>
> low_time_offset = get_low_time_offset(dc);
> if (dc->vcpu_addr[cpu] == 0) {
> - atomic_inc(&dc->smp_cpus_down);
> + qatomic_inc(&dc->smp_cpus_down);
> }
>
> - atomic_xchg(&dc->last_begin, low_time_offset);
> - atomic_xchg(&dc->page_fault_vcpu_time[cpu], low_time_offset);
> - atomic_xchg(&dc->vcpu_addr[cpu], addr);
> + qatomic_xchg(&dc->last_begin, low_time_offset);
> + qatomic_xchg(&dc->page_fault_vcpu_time[cpu], low_time_offset);
> + qatomic_xchg(&dc->vcpu_addr[cpu], addr);
>
> /*
> * check it here, not at the beginning of the function,
> @@ -756,9 +756,9 @@ static void mark_postcopy_blocktime_begin(uintptr_t addr, uint32_t ptid,
> */
> already_received = ramblock_recv_bitmap_test(rb, (void *)addr);
> if (already_received) {
> - atomic_xchg(&dc->vcpu_addr[cpu], 0);
> - atomic_xchg(&dc->page_fault_vcpu_time[cpu], 0);
> - atomic_dec(&dc->smp_cpus_down);
> + qatomic_xchg(&dc->vcpu_addr[cpu], 0);
> + qatomic_xchg(&dc->page_fault_vcpu_time[cpu], 0);
> + qatomic_dec(&dc->smp_cpus_down);
> }
> trace_mark_postcopy_blocktime_begin(addr, dc, dc->page_fault_vcpu_time[cpu],
> cpu, already_received);
> @@ -813,28 +813,28 @@ static void mark_postcopy_blocktime_end(uintptr_t addr)
> for (i = 0; i < smp_cpus; i++) {
> uint32_t vcpu_blocktime = 0;
>
> - read_vcpu_time = atomic_fetch_add(&dc->page_fault_vcpu_time[i], 0);
> - if (atomic_fetch_add(&dc->vcpu_addr[i], 0) != addr ||
> + read_vcpu_time = qatomic_fetch_add(&dc->page_fault_vcpu_time[i], 0);
> + if (qatomic_fetch_add(&dc->vcpu_addr[i], 0) != addr ||
> read_vcpu_time == 0) {
> continue;
> }
> - atomic_xchg(&dc->vcpu_addr[i], 0);
> + qatomic_xchg(&dc->vcpu_addr[i], 0);
> vcpu_blocktime = low_time_offset - read_vcpu_time;
> affected_cpu += 1;
> /* we need to know is that mark_postcopy_end was due to
> * faulted page, another possible case it's prefetched
> * page and in that case we shouldn't be here */
> if (!vcpu_total_blocktime &&
> - atomic_fetch_add(&dc->smp_cpus_down, 0) == smp_cpus) {
> + qatomic_fetch_add(&dc->smp_cpus_down, 0) == smp_cpus) {
> vcpu_total_blocktime = true;
> }
> /* continue cycle, due to one page could affect several vCPUs */
> dc->vcpu_blocktime[i] += vcpu_blocktime;
> }
>
> - atomic_sub(&dc->smp_cpus_down, affected_cpu);
> + qatomic_sub(&dc->smp_cpus_down, affected_cpu);
> if (vcpu_total_blocktime) {
> - dc->total_blocktime += low_time_offset - atomic_fetch_add(
> + dc->total_blocktime += low_time_offset - qatomic_fetch_add(
> &dc->last_begin, 0);
> }
> trace_mark_postcopy_blocktime_end(addr, dc, dc->total_blocktime,
> @@ -928,7 +928,7 @@ static void *postcopy_ram_fault_thread(void *opaque)
> error_report("%s: read() failed", __func__);
> }
>
> - if (atomic_read(&mis->fault_thread_quit)) {
> + if (qatomic_read(&mis->fault_thread_quit)) {
> trace_postcopy_ram_fault_thread_quit();
> break;
> }
> @@ -1410,13 +1410,13 @@ static PostcopyState incoming_postcopy_state;
>
> PostcopyState postcopy_state_get(void)
> {
> - return atomic_mb_read(&incoming_postcopy_state);
> + return qatomic_mb_read(&incoming_postcopy_state);
> }
>
> /* Set the state and return the old state */
> PostcopyState postcopy_state_set(PostcopyState new_state)
> {
> - return atomic_xchg(&incoming_postcopy_state, new_state);
> + return qatomic_xchg(&incoming_postcopy_state, new_state);
> }
>
> /* Register a handler for external shared memory postcopy
> diff --git a/migration/rdma.c b/migration/rdma.c
> index 3bd30d46ad..0340841fad 100644
> --- a/migration/rdma.c
> +++ b/migration/rdma.c
> @@ -2678,7 +2678,7 @@ static ssize_t qio_channel_rdma_writev(QIOChannel *ioc,
> size_t len = 0;
>
> RCU_READ_LOCK_GUARD();
> - rdma = atomic_rcu_read(&rioc->rdmaout);
> + rdma = qatomic_rcu_read(&rioc->rdmaout);
>
> if (!rdma) {
> return -EIO;
> @@ -2760,7 +2760,7 @@ static ssize_t qio_channel_rdma_readv(QIOChannel *ioc,
> size_t done = 0;
>
> RCU_READ_LOCK_GUARD();
> - rdma = atomic_rcu_read(&rioc->rdmain);
> + rdma = qatomic_rcu_read(&rioc->rdmain);
>
> if (!rdma) {
> return -EIO;
> @@ -2875,9 +2875,9 @@ qio_channel_rdma_source_prepare(GSource *source,
>
> RCU_READ_LOCK_GUARD();
> if (rsource->condition == G_IO_IN) {
> - rdma = atomic_rcu_read(&rsource->rioc->rdmain);
> + rdma = qatomic_rcu_read(&rsource->rioc->rdmain);
> } else {
> - rdma = atomic_rcu_read(&rsource->rioc->rdmaout);
> + rdma = qatomic_rcu_read(&rsource->rioc->rdmaout);
> }
>
> if (!rdma) {
> @@ -2902,9 +2902,9 @@ qio_channel_rdma_source_check(GSource *source)
>
> RCU_READ_LOCK_GUARD();
> if (rsource->condition == G_IO_IN) {
> - rdma = atomic_rcu_read(&rsource->rioc->rdmain);
> + rdma = qatomic_rcu_read(&rsource->rioc->rdmain);
> } else {
> - rdma = atomic_rcu_read(&rsource->rioc->rdmaout);
> + rdma = qatomic_rcu_read(&rsource->rioc->rdmaout);
> }
>
> if (!rdma) {
> @@ -2932,9 +2932,9 @@ qio_channel_rdma_source_dispatch(GSource *source,
>
> RCU_READ_LOCK_GUARD();
> if (rsource->condition == G_IO_IN) {
> - rdma = atomic_rcu_read(&rsource->rioc->rdmain);
> + rdma = qatomic_rcu_read(&rsource->rioc->rdmain);
> } else {
> - rdma = atomic_rcu_read(&rsource->rioc->rdmaout);
> + rdma = qatomic_rcu_read(&rsource->rioc->rdmaout);
> }
>
> if (!rdma) {
> @@ -3035,12 +3035,12 @@ static int qio_channel_rdma_close(QIOChannel *ioc,
>
> rdmain = rioc->rdmain;
> if (rdmain) {
> - atomic_rcu_set(&rioc->rdmain, NULL);
> + qatomic_rcu_set(&rioc->rdmain, NULL);
> }
>
> rdmaout = rioc->rdmaout;
> if (rdmaout) {
> - atomic_rcu_set(&rioc->rdmaout, NULL);
> + qatomic_rcu_set(&rioc->rdmaout, NULL);
> }
>
> rcu->rdmain = rdmain;
> @@ -3060,8 +3060,8 @@ qio_channel_rdma_shutdown(QIOChannel *ioc,
>
> RCU_READ_LOCK_GUARD();
>
> - rdmain = atomic_rcu_read(&rioc->rdmain);
> - rdmaout = atomic_rcu_read(&rioc->rdmain);
> + rdmain = qatomic_rcu_read(&rioc->rdmain);
> + rdmaout = qatomic_rcu_read(&rioc->rdmain);
>
> switch (how) {
> case QIO_CHANNEL_SHUTDOWN_READ:
> @@ -3131,7 +3131,7 @@ static size_t qemu_rdma_save_page(QEMUFile *f, void *opaque,
> int ret;
>
> RCU_READ_LOCK_GUARD();
> - rdma = atomic_rcu_read(&rioc->rdmaout);
> + rdma = qatomic_rcu_read(&rioc->rdmaout);
>
> if (!rdma) {
> return -EIO;
> @@ -3451,7 +3451,7 @@ static int qemu_rdma_registration_handle(QEMUFile *f, void *opaque)
> int i = 0;
>
> RCU_READ_LOCK_GUARD();
> - rdma = atomic_rcu_read(&rioc->rdmain);
> + rdma = qatomic_rcu_read(&rioc->rdmain);
>
> if (!rdma) {
> return -EIO;
> @@ -3714,7 +3714,7 @@ rdma_block_notification_handle(QIOChannelRDMA *rioc, const char *name)
> int found = -1;
>
> RCU_READ_LOCK_GUARD();
> - rdma = atomic_rcu_read(&rioc->rdmain);
> + rdma = qatomic_rcu_read(&rioc->rdmain);
>
> if (!rdma) {
> return -EIO;
> @@ -3762,7 +3762,7 @@ static int qemu_rdma_registration_start(QEMUFile *f, void *opaque,
> RDMAContext *rdma;
>
> RCU_READ_LOCK_GUARD();
> - rdma = atomic_rcu_read(&rioc->rdmaout);
> + rdma = qatomic_rcu_read(&rioc->rdmaout);
> if (!rdma) {
> return -EIO;
> }
> @@ -3793,7 +3793,7 @@ static int qemu_rdma_registration_stop(QEMUFile *f, void *opaque,
> int ret = 0;
>
> RCU_READ_LOCK_GUARD();
> - rdma = atomic_rcu_read(&rioc->rdmaout);
> + rdma = qatomic_rcu_read(&rioc->rdmaout);
> if (!rdma) {
> return -EIO;
> }
> diff --git a/monitor/hmp.c b/monitor/hmp.c
> index d598dd02bb..4ecdefd705 100644
> --- a/monitor/hmp.c
> +++ b/monitor/hmp.c
> @@ -1337,19 +1337,19 @@ static void monitor_event(void *opaque, QEMUChrEvent event)
> monitor_resume(mon);
> monitor_flush(mon);
> } else {
> - atomic_mb_set(&mon->suspend_cnt, 0);
> + qatomic_mb_set(&mon->suspend_cnt, 0);
> }
> break;
>
> case CHR_EVENT_MUX_OUT:
> if (mon->reset_seen) {
> - if (atomic_mb_read(&mon->suspend_cnt) == 0) {
> + if (qatomic_mb_read(&mon->suspend_cnt) == 0) {
> monitor_printf(mon, "\n");
> }
> monitor_flush(mon);
> monitor_suspend(mon);
> } else {
> - atomic_inc(&mon->suspend_cnt);
> + qatomic_inc(&mon->suspend_cnt);
> }
> qemu_mutex_lock(&mon->mon_lock);
> mon->mux_out = 1;
> diff --git a/monitor/misc.c b/monitor/misc.c
> index 0b1b9b196c..262f2bd951 100644
> --- a/monitor/misc.c
> +++ b/monitor/misc.c
> @@ -751,7 +751,7 @@ static uint64_t vtop(void *ptr, Error **errp)
> }
>
> /* Force copy-on-write if necessary. */
> - atomic_add((uint8_t *)ptr, 0);
> + qatomic_add((uint8_t *)ptr, 0);
>
> if (pread(fd, &pinfo, sizeof(pinfo), offset) != sizeof(pinfo)) {
> error_setg_errno(errp, errno, "Cannot read pagemap");
> diff --git a/monitor/monitor.c b/monitor/monitor.c
> index b385a3d569..0f32892ad4 100644
> --- a/monitor/monitor.c
> +++ b/monitor/monitor.c
> @@ -449,7 +449,7 @@ int monitor_suspend(Monitor *mon)
> return -ENOTTY;
> }
>
> - atomic_inc(&mon->suspend_cnt);
> + qatomic_inc(&mon->suspend_cnt);
>
> if (mon->use_io_thread) {
> /*
> @@ -476,7 +476,7 @@ void monitor_resume(Monitor *mon)
> return;
> }
>
> - if (atomic_dec_fetch(&mon->suspend_cnt) == 0) {
> + if (qatomic_dec_fetch(&mon->suspend_cnt) == 0) {
> AioContext *ctx;
>
> if (mon->use_io_thread) {
> @@ -501,7 +501,7 @@ int monitor_can_read(void *opaque)
> {
> Monitor *mon = opaque;
>
> - return !atomic_mb_read(&mon->suspend_cnt);
> + return !qatomic_mb_read(&mon->suspend_cnt);
> }
>
> void monitor_list_append(Monitor *mon)
> diff --git a/qemu-nbd.c b/qemu-nbd.c
> index 33476a1000..e39d3b23c1 100644
> --- a/qemu-nbd.c
> +++ b/qemu-nbd.c
> @@ -158,7 +158,7 @@ QEMU_COPYRIGHT "\n"
> #if HAVE_NBD_DEVICE
> static void termsig_handler(int signum)
> {
> - atomic_cmpxchg(&state, RUNNING, TERMINATE);
> + qatomic_cmpxchg(&state, RUNNING, TERMINATE);
> qemu_notify_event();
> }
> #endif /* HAVE_NBD_DEVICE */
> diff --git a/qga/commands.c b/qga/commands.c
> index d3fec807c1..3dcd5fbe5c 100644
> --- a/qga/commands.c
> +++ b/qga/commands.c
> @@ -166,13 +166,13 @@ GuestExecStatus *qmp_guest_exec_status(int64_t pid, Error **errp)
>
> ges = g_new0(GuestExecStatus, 1);
>
> - bool finished = atomic_mb_read(&gei->finished);
> + bool finished = qatomic_mb_read(&gei->finished);
>
> /* need to wait till output channels are closed
> * to be sure we captured all output at this point */
> if (gei->has_output) {
> - finished = finished && atomic_mb_read(&gei->out.closed);
> - finished = finished && atomic_mb_read(&gei->err.closed);
> + finished = finished && qatomic_mb_read(&gei->out.closed);
> + finished = finished && qatomic_mb_read(&gei->err.closed);
> }
>
> ges->exited = finished;
> @@ -274,7 +274,7 @@ static void guest_exec_child_watch(GPid pid, gint status, gpointer data)
> (int32_t)gpid_to_int64(pid), (uint32_t)status);
>
> gei->status = status;
> - atomic_mb_set(&gei->finished, true);
> + qatomic_mb_set(&gei->finished, true);
>
> g_spawn_close_pid(pid);
> }
> @@ -330,7 +330,7 @@ static gboolean guest_exec_input_watch(GIOChannel *ch,
> done:
> g_io_channel_shutdown(ch, true, NULL);
> g_io_channel_unref(ch);
> - atomic_mb_set(&p->closed, true);
> + qatomic_mb_set(&p->closed, true);
> g_free(p->data);
>
> return false;
> @@ -384,7 +384,7 @@ static gboolean guest_exec_output_watch(GIOChannel *ch,
> close:
> g_io_channel_shutdown(ch, true, NULL);
> g_io_channel_unref(ch);
> - atomic_mb_set(&p->closed, true);
> + qatomic_mb_set(&p->closed, true);
> return false;
> }
>
> diff --git a/qom/object.c b/qom/object.c
> index a91a6a515a..1196970635 100644
> --- a/qom/object.c
> +++ b/qom/object.c
> @@ -867,7 +867,7 @@ Object *object_dynamic_cast_assert(Object *obj, const char *typename,
> Object *inst;
>
> for (i = 0; obj && i < OBJECT_CLASS_CAST_CACHE; i++) {
> - if (atomic_read(&obj->class->object_cast_cache[i]) == typename) {
> + if (qatomic_read(&obj->class->object_cast_cache[i]) == typename) {
> goto out;
> }
> }
> @@ -884,10 +884,10 @@ Object *object_dynamic_cast_assert(Object *obj, const char *typename,
>
> if (obj && obj == inst) {
> for (i = 1; i < OBJECT_CLASS_CAST_CACHE; i++) {
> - atomic_set(&obj->class->object_cast_cache[i - 1],
> - atomic_read(&obj->class->object_cast_cache[i]));
> + qatomic_set(&obj->class->object_cast_cache[i - 1],
> + qatomic_read(&obj->class->object_cast_cache[i]));
> }
> - atomic_set(&obj->class->object_cast_cache[i - 1], typename);
> + qatomic_set(&obj->class->object_cast_cache[i - 1], typename);
> }
>
> out:
> @@ -957,7 +957,7 @@ ObjectClass *object_class_dynamic_cast_assert(ObjectClass *class,
> int i;
>
> for (i = 0; class && i < OBJECT_CLASS_CAST_CACHE; i++) {
> - if (atomic_read(&class->class_cast_cache[i]) == typename) {
> + if (qatomic_read(&class->class_cast_cache[i]) == typename) {
> ret = class;
> goto out;
> }
> @@ -978,10 +978,10 @@ ObjectClass *object_class_dynamic_cast_assert(ObjectClass *class,
> #ifdef CONFIG_QOM_CAST_DEBUG
> if (class && ret == class) {
> for (i = 1; i < OBJECT_CLASS_CAST_CACHE; i++) {
> - atomic_set(&class->class_cast_cache[i - 1],
> - atomic_read(&class->class_cast_cache[i]));
> + qatomic_set(&class->class_cast_cache[i - 1],
> + qatomic_read(&class->class_cast_cache[i]));
> }
> - atomic_set(&class->class_cast_cache[i - 1], typename);
> + qatomic_set(&class->class_cast_cache[i - 1], typename);
> }
> out:
> #endif
> @@ -1166,7 +1166,7 @@ Object *object_ref(void *objptr)
> if (!obj) {
> return NULL;
> }
> - atomic_inc(&obj->ref);
> + qatomic_inc(&obj->ref);
> return obj;
> }
>
> @@ -1179,7 +1179,7 @@ void object_unref(void *objptr)
> g_assert(obj->ref > 0);
>
> /* parent always holds a reference to its children */
> - if (atomic_fetch_dec(&obj->ref) == 1) {
> + if (qatomic_fetch_dec(&obj->ref) == 1) {
> object_finalize(obj);
> }
> }
> diff --git a/scsi/qemu-pr-helper.c b/scsi/qemu-pr-helper.c
> index 57ad830d54..d26faaf91e 100644
> --- a/scsi/qemu-pr-helper.c
> +++ b/scsi/qemu-pr-helper.c
> @@ -747,7 +747,7 @@ static void coroutine_fn prh_co_entry(void *opaque)
> goto out;
> }
>
> - while (atomic_read(&state) == RUNNING) {
> + while (qatomic_read(&state) == RUNNING) {
> PRHelperRequest req;
> PRHelperResponse resp;
> int sz;
> @@ -816,7 +816,7 @@ static gboolean accept_client(QIOChannel *ioc, GIOCondition cond, gpointer opaqu
>
> static void termsig_handler(int signum)
> {
> - atomic_cmpxchg(&state, RUNNING, TERMINATE);
> + qatomic_cmpxchg(&state, RUNNING, TERMINATE);
> qemu_notify_event();
> }
>
> diff --git a/softmmu/cpu-throttle.c b/softmmu/cpu-throttle.c
> index 4e6b2818ca..2ec4b8e0bc 100644
> --- a/softmmu/cpu-throttle.c
> +++ b/softmmu/cpu-throttle.c
> @@ -64,7 +64,7 @@ static void cpu_throttle_thread(CPUState *cpu, run_on_cpu_data opaque)
> }
> sleeptime_ns = endtime_ns - qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
> }
> - atomic_set(&cpu->throttle_thread_scheduled, 0);
> + qatomic_set(&cpu->throttle_thread_scheduled, 0);
> }
>
> static void cpu_throttle_timer_tick(void *opaque)
> @@ -77,7 +77,7 @@ static void cpu_throttle_timer_tick(void *opaque)
> return;
> }
> CPU_FOREACH(cpu) {
> - if (!atomic_xchg(&cpu->throttle_thread_scheduled, 1)) {
> + if (!qatomic_xchg(&cpu->throttle_thread_scheduled, 1)) {
> async_run_on_cpu(cpu, cpu_throttle_thread,
> RUN_ON_CPU_NULL);
> }
> @@ -94,7 +94,7 @@ void cpu_throttle_set(int new_throttle_pct)
> new_throttle_pct = MIN(new_throttle_pct, CPU_THROTTLE_PCT_MAX);
> new_throttle_pct = MAX(new_throttle_pct, CPU_THROTTLE_PCT_MIN);
>
> - atomic_set(&throttle_percentage, new_throttle_pct);
> + qatomic_set(&throttle_percentage, new_throttle_pct);
>
> timer_mod(throttle_timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL_RT) +
> CPU_THROTTLE_TIMESLICE_NS);
> @@ -102,7 +102,7 @@ void cpu_throttle_set(int new_throttle_pct)
>
> void cpu_throttle_stop(void)
> {
> - atomic_set(&throttle_percentage, 0);
> + qatomic_set(&throttle_percentage, 0);
> }
>
> bool cpu_throttle_active(void)
> @@ -112,7 +112,7 @@ bool cpu_throttle_active(void)
>
> int cpu_throttle_get_percentage(void)
> {
> - return atomic_read(&throttle_percentage);
> + return qatomic_read(&throttle_percentage);
> }
>
> void cpu_throttle_init(void)
> diff --git a/softmmu/cpus.c b/softmmu/cpus.c
> index e3b98065c9..ac8940d52e 100644
> --- a/softmmu/cpus.c
> +++ b/softmmu/cpus.c
> @@ -192,7 +192,7 @@ static void cpu_update_icount_locked(CPUState *cpu)
> int64_t executed = cpu_get_icount_executed(cpu);
> cpu->icount_budget -= executed;
>
> - atomic_set_i64(&timers_state.qemu_icount,
> + qatomic_set_i64(&timers_state.qemu_icount,
> timers_state.qemu_icount + executed);
> }
>
> @@ -223,13 +223,13 @@ static int64_t cpu_get_icount_raw_locked(void)
> cpu_update_icount_locked(cpu);
> }
> /* The read is protected by the seqlock, but needs atomic64 to avoid UB */
> - return atomic_read_i64(&timers_state.qemu_icount);
> + return qatomic_read_i64(&timers_state.qemu_icount);
> }
>
> static int64_t cpu_get_icount_locked(void)
> {
> int64_t icount = cpu_get_icount_raw_locked();
> - return atomic_read_i64(&timers_state.qemu_icount_bias) +
> + return qatomic_read_i64(&timers_state.qemu_icount_bias) +
> cpu_icount_to_ns(icount);
> }
>
> @@ -262,7 +262,7 @@ int64_t cpu_get_icount(void)
>
> int64_t cpu_icount_to_ns(int64_t icount)
> {
> - return icount << atomic_read(&timers_state.icount_time_shift);
> + return icount << qatomic_read(&timers_state.icount_time_shift);
> }
>
> static int64_t cpu_get_ticks_locked(void)
> @@ -393,18 +393,18 @@ static void icount_adjust(void)
> && last_delta + ICOUNT_WOBBLE < delta * 2
> && timers_state.icount_time_shift > 0) {
> /* The guest is getting too far ahead. Slow time down. */
> - atomic_set(&timers_state.icount_time_shift,
> + qatomic_set(&timers_state.icount_time_shift,
> timers_state.icount_time_shift - 1);
> }
> if (delta < 0
> && last_delta - ICOUNT_WOBBLE > delta * 2
> && timers_state.icount_time_shift < MAX_ICOUNT_SHIFT) {
> /* The guest is getting too far behind. Speed time up. */
> - atomic_set(&timers_state.icount_time_shift,
> + qatomic_set(&timers_state.icount_time_shift,
> timers_state.icount_time_shift + 1);
> }
> last_delta = delta;
> - atomic_set_i64(&timers_state.qemu_icount_bias,
> + qatomic_set_i64(&timers_state.qemu_icount_bias,
> cur_icount - (timers_state.qemu_icount
> << timers_state.icount_time_shift));
> seqlock_write_unlock(&timers_state.vm_clock_seqlock,
> @@ -428,7 +428,7 @@ static void icount_adjust_vm(void *opaque)
>
> static int64_t qemu_icount_round(int64_t count)
> {
> - int shift = atomic_read(&timers_state.icount_time_shift);
> + int shift = qatomic_read(&timers_state.icount_time_shift);
> return (count + (1 << shift) - 1) >> shift;
> }
>
> @@ -466,7 +466,7 @@ static void icount_warp_rt(void)
> int64_t delta = clock - cur_icount;
> warp_delta = MIN(warp_delta, delta);
> }
> - atomic_set_i64(&timers_state.qemu_icount_bias,
> + qatomic_set_i64(&timers_state.qemu_icount_bias,
> timers_state.qemu_icount_bias + warp_delta);
> }
> timers_state.vm_clock_warp_start = -1;
> @@ -499,7 +499,7 @@ void qtest_clock_warp(int64_t dest)
>
> seqlock_write_lock(&timers_state.vm_clock_seqlock,
> &timers_state.vm_clock_lock);
> - atomic_set_i64(&timers_state.qemu_icount_bias,
> + qatomic_set_i64(&timers_state.qemu_icount_bias,
> timers_state.qemu_icount_bias + warp);
> seqlock_write_unlock(&timers_state.vm_clock_seqlock,
> &timers_state.vm_clock_lock);
> @@ -583,7 +583,7 @@ void qemu_start_warp_timer(void)
> */
> seqlock_write_lock(&timers_state.vm_clock_seqlock,
> &timers_state.vm_clock_lock);
> - atomic_set_i64(&timers_state.qemu_icount_bias,
> + qatomic_set_i64(&timers_state.qemu_icount_bias,
> timers_state.qemu_icount_bias + deadline);
> seqlock_write_unlock(&timers_state.vm_clock_seqlock,
> &timers_state.vm_clock_lock);
> @@ -837,11 +837,11 @@ static void qemu_cpu_kick_rr_next_cpu(void)
> {
> CPUState *cpu;
> do {
> - cpu = atomic_mb_read(&tcg_current_rr_cpu);
> + cpu = qatomic_mb_read(&tcg_current_rr_cpu);
> if (cpu) {
> cpu_exit(cpu);
> }
> - } while (cpu != atomic_mb_read(&tcg_current_rr_cpu));
> + } while (cpu != qatomic_mb_read(&tcg_current_rr_cpu));
> }
>
> /* Kick all RR vCPUs */
> @@ -1110,7 +1110,7 @@ static void qemu_cpu_stop(CPUState *cpu, bool exit)
>
> static void qemu_wait_io_event_common(CPUState *cpu)
> {
> - atomic_mb_set(&cpu->thread_kicked, false);
> + qatomic_mb_set(&cpu->thread_kicked, false);
> if (cpu->stop) {
> qemu_cpu_stop(cpu, false);
> }
> @@ -1356,7 +1356,7 @@ static int tcg_cpu_exec(CPUState *cpu)
> ret = cpu_exec(cpu);
> cpu_exec_end(cpu);
> #ifdef CONFIG_PROFILER
> - atomic_set(&tcg_ctx->prof.cpu_exec_time,
> + qatomic_set(&tcg_ctx->prof.cpu_exec_time,
> tcg_ctx->prof.cpu_exec_time + profile_getclock() - ti);
> #endif
> return ret;
> @@ -1443,7 +1443,7 @@ static void *qemu_tcg_rr_cpu_thread_fn(void *arg)
>
> while (cpu && cpu_work_list_empty(cpu) && !cpu->exit_request) {
>
> - atomic_mb_set(&tcg_current_rr_cpu, cpu);
> + qatomic_mb_set(&tcg_current_rr_cpu, cpu);
> current_cpu = cpu;
>
> qemu_clock_enable(QEMU_CLOCK_VIRTUAL,
> @@ -1479,11 +1479,11 @@ static void *qemu_tcg_rr_cpu_thread_fn(void *arg)
> cpu = CPU_NEXT(cpu);
> } /* while (cpu && !cpu->exit_request).. */
>
> - /* Does not need atomic_mb_set because a spurious wakeup is okay. */
> - atomic_set(&tcg_current_rr_cpu, NULL);
> + /* Does not need qatomic_mb_set because a spurious wakeup is okay. */
> + qatomic_set(&tcg_current_rr_cpu, NULL);
>
> if (cpu && cpu->exit_request) {
> - atomic_mb_set(&cpu->exit_request, 0);
> + qatomic_mb_set(&cpu->exit_request, 0);
> }
>
> if (use_icount && all_cpu_threads_idle()) {
> @@ -1687,7 +1687,7 @@ static void *qemu_tcg_cpu_thread_fn(void *arg)
> }
> }
>
> - atomic_mb_set(&cpu->exit_request, 0);
> + qatomic_mb_set(&cpu->exit_request, 0);
> qemu_wait_io_event(cpu);
> } while (!cpu->unplug || cpu_can_run(cpu));
>
> @@ -1776,7 +1776,7 @@ bool qemu_mutex_iothread_locked(void)
> */
> void qemu_mutex_lock_iothread_impl(const char *file, int line)
> {
> - QemuMutexLockFunc bql_lock = atomic_read(&qemu_bql_mutex_lock_func);
> + QemuMutexLockFunc bql_lock = qatomic_read(&qemu_bql_mutex_lock_func);
>
> g_assert(!qemu_mutex_iothread_locked());
> bql_lock(&qemu_global_mutex, file, line);
> diff --git a/softmmu/memory.c b/softmmu/memory.c
> index d030eb6f7c..da5f90f141 100644
> --- a/softmmu/memory.c
> +++ b/softmmu/memory.c
> @@ -294,12 +294,12 @@ static void flatview_destroy(FlatView *view)
>
> static bool flatview_ref(FlatView *view)
> {
> - return atomic_fetch_inc_nonzero(&view->ref) > 0;
> + return qatomic_fetch_inc_nonzero(&view->ref) > 0;
> }
>
> void flatview_unref(FlatView *view)
> {
> - if (atomic_fetch_dec(&view->ref) == 1) {
> + if (qatomic_fetch_dec(&view->ref) == 1) {
> trace_flatview_destroy_rcu(view, view->root);
> assert(view->root);
> call_rcu(view, flatview_destroy, rcu);
> @@ -1027,7 +1027,7 @@ static void address_space_set_flatview(AddressSpace *as)
> }
>
> /* Writes are protected by the BQL. */
> - atomic_rcu_set(&as->current_map, new_view);
> + qatomic_rcu_set(&as->current_map, new_view);
> if (old_view) {
> flatview_unref(old_view);
> }
> diff --git a/softmmu/vl.c b/softmmu/vl.c
> index f7b103467c..50d8c2e42e 100644
> --- a/softmmu/vl.c
> +++ b/softmmu/vl.c
> @@ -1320,7 +1320,7 @@ ShutdownCause qemu_reset_requested_get(void)
>
> static int qemu_shutdown_requested(void)
> {
> - return atomic_xchg(&shutdown_requested, SHUTDOWN_CAUSE_NONE);
> + return qatomic_xchg(&shutdown_requested, SHUTDOWN_CAUSE_NONE);
> }
>
> static void qemu_kill_report(void)
> diff --git a/target/arm/mte_helper.c b/target/arm/mte_helper.c
> index 891306f5b0..5615c6706c 100644
> --- a/target/arm/mte_helper.c
> +++ b/target/arm/mte_helper.c
> @@ -313,11 +313,11 @@ static void store_tag1(uint64_t ptr, uint8_t *mem, int tag)
> static void store_tag1_parallel(uint64_t ptr, uint8_t *mem, int tag)
> {
> int ofs = extract32(ptr, LOG2_TAG_GRANULE, 1) * 4;
> - uint8_t old = atomic_read(mem);
> + uint8_t old = qatomic_read(mem);
>
> while (1) {
> uint8_t new = deposit32(old, ofs, 4, tag);
> - uint8_t cmp = atomic_cmpxchg(mem, old, new);
> + uint8_t cmp = qatomic_cmpxchg(mem, old, new);
> if (likely(cmp == old)) {
> return;
> }
> @@ -398,7 +398,7 @@ static inline void do_st2g(CPUARMState *env, uint64_t ptr, uint64_t xt,
> 2 * TAG_GRANULE, MMU_DATA_STORE, 1, ra);
> if (mem1) {
> tag |= tag << 4;
> - atomic_set(mem1, tag);
> + qatomic_set(mem1, tag);
> }
> }
> }
> diff --git a/target/hppa/op_helper.c b/target/hppa/op_helper.c
> index 5685e303ab..39361d3759 100644
> --- a/target/hppa/op_helper.c
> +++ b/target/hppa/op_helper.c
> @@ -67,7 +67,7 @@ static void atomic_store_3(CPUHPPAState *env, target_ulong addr, uint32_t val,
> old = *haddr;
> while (1) {
> new = (old & ~mask) | (val & mask);
> - cmp = atomic_cmpxchg(haddr, old, new);
> + cmp = qatomic_cmpxchg(haddr, old, new);
> if (cmp == old) {
> return;
> }
> diff --git a/target/i386/mem_helper.c b/target/i386/mem_helper.c
> index acf41f8885..3a6d3ae2ef 100644
> --- a/target/i386/mem_helper.c
> +++ b/target/i386/mem_helper.c
> @@ -68,7 +68,7 @@ void helper_cmpxchg8b(CPUX86State *env, target_ulong a0)
> uint64_t *haddr = g2h(a0);
> cmpv = cpu_to_le64(cmpv);
> newv = cpu_to_le64(newv);
> - oldv = atomic_cmpxchg__nocheck(haddr, cmpv, newv);
> + oldv = qatomic_cmpxchg__nocheck(haddr, cmpv, newv);
> oldv = le64_to_cpu(oldv);
> }
> #else
> diff --git a/target/i386/whpx-all.c b/target/i386/whpx-all.c
> index c78baac6df..5a0f337a4c 100644
> --- a/target/i386/whpx-all.c
> +++ b/target/i386/whpx-all.c
> @@ -946,7 +946,7 @@ static int whpx_vcpu_run(CPUState *cpu)
> whpx_vcpu_process_async_events(cpu);
> if (cpu->halted) {
> cpu->exception_index = EXCP_HLT;
> - atomic_set(&cpu->exit_request, false);
> + qatomic_set(&cpu->exit_request, false);
> return 0;
> }
>
> @@ -961,7 +961,7 @@ static int whpx_vcpu_run(CPUState *cpu)
>
> whpx_vcpu_pre_run(cpu);
>
> - if (atomic_read(&cpu->exit_request)) {
> + if (qatomic_read(&cpu->exit_request)) {
> whpx_vcpu_kick(cpu);
> }
>
> @@ -1113,7 +1113,7 @@ static int whpx_vcpu_run(CPUState *cpu)
> qemu_mutex_lock_iothread();
> current_cpu = cpu;
>
> - atomic_set(&cpu->exit_request, false);
> + qatomic_set(&cpu->exit_request, false);
>
> return ret < 0;
> }
> diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c
> index f4c4111536..904899054d 100644
> --- a/target/riscv/cpu_helper.c
> +++ b/target/riscv/cpu_helper.c
> @@ -537,7 +537,7 @@ restart:
> *pte_pa = pte = updated_pte;
> #else
> target_ulong old_pte =
> - atomic_cmpxchg(pte_pa, pte, updated_pte);
> + qatomic_cmpxchg(pte_pa, pte, updated_pte);
> if (old_pte != pte) {
> goto restart;
> } else {
> diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
> index a237dec757..bd25eed3e8 100644
> --- a/target/s390x/mem_helper.c
> +++ b/target/s390x/mem_helper.c
> @@ -1780,7 +1780,7 @@ static uint32_t do_csst(CPUS390XState *env, uint32_t r3, uint64_t a1,
> if (parallel) {
> #ifdef CONFIG_USER_ONLY
> uint32_t *haddr = g2h(a1);
> - ov = atomic_cmpxchg__nocheck(haddr, cv, nv);
> + ov = qatomic_cmpxchg__nocheck(haddr, cv, nv);
> #else
> TCGMemOpIdx oi = make_memop_idx(MO_TEUL | MO_ALIGN, mem_idx);
> ov = helper_atomic_cmpxchgl_be_mmu(env, a1, cv, nv, oi, ra);
> @@ -1804,7 +1804,7 @@ static uint32_t do_csst(CPUS390XState *env, uint32_t r3, uint64_t a1,
> #ifdef CONFIG_ATOMIC64
> # ifdef CONFIG_USER_ONLY
> uint64_t *haddr = g2h(a1);
> - ov = atomic_cmpxchg__nocheck(haddr, cv, nv);
> + ov = qatomic_cmpxchg__nocheck(haddr, cv, nv);
> # else
> TCGMemOpIdx oi = make_memop_idx(MO_TEQ | MO_ALIGN, mem_idx);
> ov = helper_atomic_cmpxchgq_be_mmu(env, a1, cv, nv, oi, ra);
> diff --git a/target/xtensa/exc_helper.c b/target/xtensa/exc_helper.c
> index 58a64e6d62..2f032bc053 100644
> --- a/target/xtensa/exc_helper.c
> +++ b/target/xtensa/exc_helper.c
> @@ -128,13 +128,13 @@ void HELPER(check_interrupts)(CPUXtensaState *env)
>
> void HELPER(intset)(CPUXtensaState *env, uint32_t v)
> {
> - atomic_or(&env->sregs[INTSET],
> + qatomic_or(&env->sregs[INTSET],
> v & env->config->inttype_mask[INTTYPE_SOFTWARE]);
> }
>
> static void intclear(CPUXtensaState *env, uint32_t v)
> {
> - atomic_and(&env->sregs[INTSET], ~v);
> + qatomic_and(&env->sregs[INTSET], ~v);
> }
>
> void HELPER(intclear)(CPUXtensaState *env, uint32_t v)
> diff --git a/target/xtensa/op_helper.c b/target/xtensa/op_helper.c
> index 09f4962d00..143476849f 100644
> --- a/target/xtensa/op_helper.c
> +++ b/target/xtensa/op_helper.c
> @@ -62,7 +62,7 @@ void HELPER(update_ccompare)(CPUXtensaState *env, uint32_t i)
> {
> uint64_t dcc;
>
> - atomic_and(&env->sregs[INTSET],
> + qatomic_and(&env->sregs[INTSET],
> ~(1u << env->config->timerint[i]));
> HELPER(update_ccount)(env);
> dcc = (uint64_t)(env->sregs[CCOMPARE + i] - env->sregs[CCOUNT] - 1) + 1;
> diff --git a/tcg/tcg.c b/tcg/tcg.c
> index 62f299e36e..284b1c2a15 100644
> --- a/tcg/tcg.c
> +++ b/tcg/tcg.c
> @@ -597,7 +597,7 @@ static inline bool tcg_region_initial_alloc__locked(TCGContext *s)
> /* Call from a safe-work context */
> void tcg_region_reset_all(void)
> {
> - unsigned int n_ctxs = atomic_read(&n_tcg_ctxs);
> + unsigned int n_ctxs = qatomic_read(&n_tcg_ctxs);
> unsigned int i;
>
> qemu_mutex_lock(®ion.lock);
> @@ -605,7 +605,7 @@ void tcg_region_reset_all(void)
> region.agg_size_full = 0;
>
> for (i = 0; i < n_ctxs; i++) {
> - TCGContext *s = atomic_read(&tcg_ctxs[i]);
> + TCGContext *s = qatomic_read(&tcg_ctxs[i]);
> bool err = tcg_region_initial_alloc__locked(s);
>
> g_assert(!err);
> @@ -794,9 +794,9 @@ void tcg_register_thread(void)
> }
>
> /* Claim an entry in tcg_ctxs */
> - n = atomic_fetch_inc(&n_tcg_ctxs);
> + n = qatomic_fetch_inc(&n_tcg_ctxs);
> g_assert(n < ms->smp.max_cpus);
> - atomic_set(&tcg_ctxs[n], s);
> + qatomic_set(&tcg_ctxs[n], s);
>
> if (n > 0) {
> alloc_tcg_plugin_context(s);
> @@ -819,17 +819,17 @@ void tcg_register_thread(void)
> */
> size_t tcg_code_size(void)
> {
> - unsigned int n_ctxs = atomic_read(&n_tcg_ctxs);
> + unsigned int n_ctxs = qatomic_read(&n_tcg_ctxs);
> unsigned int i;
> size_t total;
>
> qemu_mutex_lock(®ion.lock);
> total = region.agg_size_full;
> for (i = 0; i < n_ctxs; i++) {
> - const TCGContext *s = atomic_read(&tcg_ctxs[i]);
> + const TCGContext *s = qatomic_read(&tcg_ctxs[i]);
> size_t size;
>
> - size = atomic_read(&s->code_gen_ptr) - s->code_gen_buffer;
> + size = qatomic_read(&s->code_gen_ptr) - s->code_gen_buffer;
> g_assert(size <= s->code_gen_buffer_size);
> total += size;
> }
> @@ -855,14 +855,14 @@ size_t tcg_code_capacity(void)
>
> size_t tcg_tb_phys_invalidate_count(void)
> {
> - unsigned int n_ctxs = atomic_read(&n_tcg_ctxs);
> + unsigned int n_ctxs = qatomic_read(&n_tcg_ctxs);
> unsigned int i;
> size_t total = 0;
>
> for (i = 0; i < n_ctxs; i++) {
> - const TCGContext *s = atomic_read(&tcg_ctxs[i]);
> + const TCGContext *s = qatomic_read(&tcg_ctxs[i]);
>
> - total += atomic_read(&s->tb_phys_invalidate_count);
> + total += qatomic_read(&s->tb_phys_invalidate_count);
> }
> return total;
> }
> @@ -1041,7 +1041,7 @@ TranslationBlock *tcg_tb_alloc(TCGContext *s)
> }
> goto retry;
> }
> - atomic_set(&s->code_gen_ptr, next);
> + qatomic_set(&s->code_gen_ptr, next);
> s->data_gen_ptr = NULL;
> return tb;
> }
> @@ -2134,7 +2134,7 @@ static void tcg_dump_ops(TCGContext *s, bool have_prefs)
> QemuLogFile *logfile;
>
> rcu_read_lock();
> - logfile = atomic_rcu_read(&qemu_logfile);
> + logfile = qatomic_rcu_read(&qemu_logfile);
> if (logfile) {
> for (; col < 40; ++col) {
> putc(' ', logfile->fd);
> @@ -2341,7 +2341,7 @@ void tcg_op_remove(TCGContext *s, TCGOp *op)
> s->nb_ops--;
>
> #ifdef CONFIG_PROFILER
> - atomic_set(&s->prof.del_op_count, s->prof.del_op_count + 1);
> + qatomic_set(&s->prof.del_op_count, s->prof.del_op_count + 1);
> #endif
> }
>
> @@ -3964,12 +3964,12 @@ static void tcg_reg_alloc_call(TCGContext *s, TCGOp *op)
> /* avoid copy/paste errors */
> #define PROF_ADD(to, from, field) \
> do { \
> - (to)->field += atomic_read(&((from)->field)); \
> + (to)->field += qatomic_read(&((from)->field)); \
> } while (0)
>
> #define PROF_MAX(to, from, field) \
> do { \
> - typeof((from)->field) val__ = atomic_read(&((from)->field)); \
> + typeof((from)->field) val__ = qatomic_read(&((from)->field)); \
> if (val__ > (to)->field) { \
> (to)->field = val__; \
> } \
> @@ -3979,11 +3979,11 @@ static void tcg_reg_alloc_call(TCGContext *s, TCGOp *op)
> static inline
> void tcg_profile_snapshot(TCGProfile *prof, bool counters, bool table)
> {
> - unsigned int n_ctxs = atomic_read(&n_tcg_ctxs);
> + unsigned int n_ctxs = qatomic_read(&n_tcg_ctxs);
> unsigned int i;
>
> for (i = 0; i < n_ctxs; i++) {
> - TCGContext *s = atomic_read(&tcg_ctxs[i]);
> + TCGContext *s = qatomic_read(&tcg_ctxs[i]);
> const TCGProfile *orig = &s->prof;
>
> if (counters) {
> @@ -4042,15 +4042,15 @@ void tcg_dump_op_count(void)
>
> int64_t tcg_cpu_exec_time(void)
> {
> - unsigned int n_ctxs = atomic_read(&n_tcg_ctxs);
> + unsigned int n_ctxs = qatomic_read(&n_tcg_ctxs);
> unsigned int i;
> int64_t ret = 0;
>
> for (i = 0; i < n_ctxs; i++) {
> - const TCGContext *s = atomic_read(&tcg_ctxs[i]);
> + const TCGContext *s = qatomic_read(&tcg_ctxs[i]);
> const TCGProfile *prof = &s->prof;
>
> - ret += atomic_read(&prof->cpu_exec_time);
> + ret += qatomic_read(&prof->cpu_exec_time);
> }
> return ret;
> }
> @@ -4083,15 +4083,15 @@ int tcg_gen_code(TCGContext *s, TranslationBlock *tb)
> QTAILQ_FOREACH(op, &s->ops, link) {
> n++;
> }
> - atomic_set(&prof->op_count, prof->op_count + n);
> + qatomic_set(&prof->op_count, prof->op_count + n);
> if (n > prof->op_count_max) {
> - atomic_set(&prof->op_count_max, n);
> + qatomic_set(&prof->op_count_max, n);
> }
>
> n = s->nb_temps;
> - atomic_set(&prof->temp_count, prof->temp_count + n);
> + qatomic_set(&prof->temp_count, prof->temp_count + n);
> if (n > prof->temp_count_max) {
> - atomic_set(&prof->temp_count_max, n);
> + qatomic_set(&prof->temp_count_max, n);
> }
> }
> #endif
> @@ -4125,7 +4125,7 @@ int tcg_gen_code(TCGContext *s, TranslationBlock *tb)
> #endif
>
> #ifdef CONFIG_PROFILER
> - atomic_set(&prof->opt_time, prof->opt_time - profile_getclock());
> + qatomic_set(&prof->opt_time, prof->opt_time - profile_getclock());
> #endif
>
> #ifdef USE_TCG_OPTIMIZATIONS
> @@ -4133,8 +4133,8 @@ int tcg_gen_code(TCGContext *s, TranslationBlock *tb)
> #endif
>
> #ifdef CONFIG_PROFILER
> - atomic_set(&prof->opt_time, prof->opt_time + profile_getclock());
> - atomic_set(&prof->la_time, prof->la_time - profile_getclock());
> + qatomic_set(&prof->opt_time, prof->opt_time + profile_getclock());
> + qatomic_set(&prof->la_time, prof->la_time - profile_getclock());
> #endif
>
> reachable_code_pass(s);
> @@ -4159,7 +4159,7 @@ int tcg_gen_code(TCGContext *s, TranslationBlock *tb)
> }
>
> #ifdef CONFIG_PROFILER
> - atomic_set(&prof->la_time, prof->la_time + profile_getclock());
> + qatomic_set(&prof->la_time, prof->la_time + profile_getclock());
> #endif
>
> #ifdef DEBUG_DISAS
> @@ -4190,7 +4190,7 @@ int tcg_gen_code(TCGContext *s, TranslationBlock *tb)
> TCGOpcode opc = op->opc;
>
> #ifdef CONFIG_PROFILER
> - atomic_set(&prof->table_op_count[opc], prof->table_op_count[opc] + 1);
> + qatomic_set(&prof->table_op_count[opc], prof->table_op_count[opc] + 1);
> #endif
>
> switch (opc) {
> diff --git a/tcg/tci.c b/tcg/tci.c
> index 46fe9ce63f..82039fd163 100644
> --- a/tcg/tci.c
> +++ b/tcg/tci.c
> @@ -1115,7 +1115,7 @@ uintptr_t tcg_qemu_tb_exec(CPUArchState *env, uint8_t *tb_ptr)
> case INDEX_op_goto_tb:
> /* Jump address is aligned */
> tb_ptr = QEMU_ALIGN_PTR_UP(tb_ptr, 4);
> - t0 = atomic_read((int32_t *)tb_ptr);
> + t0 = qatomic_read((int32_t *)tb_ptr);
> tb_ptr += sizeof(int32_t);
> tci_assert(tb_ptr == old_code_ptr + op_size);
> tb_ptr += (int32_t)t0;
> diff --git a/tests/atomic64-bench.c b/tests/atomic64-bench.c
> index 121a8c14f4..e474753d34 100644
> --- a/tests/atomic64-bench.c
> +++ b/tests/atomic64-bench.c
> @@ -56,17 +56,17 @@ static void *thread_func(void *arg)
> {
> struct thread_info *info = arg;
>
> - atomic_inc(&n_ready_threads);
> - while (!atomic_read(&test_start)) {
> + qatomic_inc(&n_ready_threads);
> + while (!qatomic_read(&test_start)) {
> cpu_relax();
> }
>
> - while (!atomic_read(&test_stop)) {
> + while (!qatomic_read(&test_stop)) {
> unsigned int index;
>
> info->r = xorshift64star(info->r);
> index = info->r & (range - 1);
> - atomic_read_i64(&counts[index].i64);
> + qatomic_read_i64(&counts[index].i64);
> info->accesses++;
> }
> return NULL;
> @@ -76,13 +76,13 @@ static void run_test(void)
> {
> unsigned int i;
>
> - while (atomic_read(&n_ready_threads) != n_threads) {
> + while (qatomic_read(&n_ready_threads) != n_threads) {
> cpu_relax();
> }
>
> - atomic_set(&test_start, true);
> + qatomic_set(&test_start, true);
> g_usleep(duration * G_USEC_PER_SEC);
> - atomic_set(&test_stop, true);
> + qatomic_set(&test_stop, true);
>
> for (i = 0; i < n_threads; i++) {
> qemu_thread_join(&threads[i]);
> diff --git a/tests/atomic_add-bench.c b/tests/atomic_add-bench.c
> index 5666f6bbff..f05471ab45 100644
> --- a/tests/atomic_add-bench.c
> +++ b/tests/atomic_add-bench.c
> @@ -53,12 +53,12 @@ static void *thread_func(void *arg)
> {
> struct thread_info *info = arg;
>
> - atomic_inc(&n_ready_threads);
> - while (!atomic_read(&test_start)) {
> + qatomic_inc(&n_ready_threads);
> + while (!qatomic_read(&test_start)) {
> cpu_relax();
> }
>
> - while (!atomic_read(&test_stop)) {
> + while (!qatomic_read(&test_stop)) {
> unsigned int index;
>
> info->r = xorshift64star(info->r);
> @@ -68,7 +68,7 @@ static void *thread_func(void *arg)
> counts[index].val += 1;
> qemu_mutex_unlock(&counts[index].lock);
> } else {
> - atomic_inc(&counts[index].val);
> + qatomic_inc(&counts[index].val);
> }
> }
> return NULL;
> @@ -78,13 +78,13 @@ static void run_test(void)
> {
> unsigned int i;
>
> - while (atomic_read(&n_ready_threads) != n_threads) {
> + while (qatomic_read(&n_ready_threads) != n_threads) {
> cpu_relax();
> }
>
> - atomic_set(&test_start, true);
> + qatomic_set(&test_start, true);
> g_usleep(duration * G_USEC_PER_SEC);
> - atomic_set(&test_stop, true);
> + qatomic_set(&test_stop, true);
>
> for (i = 0; i < n_threads; i++) {
> qemu_thread_join(&threads[i]);
> diff --git a/tests/iothread.c b/tests/iothread.c
> index d3a2ee9a01..afde12b4ef 100644
> --- a/tests/iothread.c
> +++ b/tests/iothread.c
> @@ -74,7 +74,7 @@ static void *iothread_run(void *opaque)
> qemu_cond_signal(&iothread->init_done_cond);
> qemu_mutex_unlock(&iothread->init_done_lock);
>
> - while (!atomic_read(&iothread->stopping)) {
> + while (!qatomic_read(&iothread->stopping)) {
> aio_poll(iothread->ctx, true);
> }
>
> diff --git a/tests/qht-bench.c b/tests/qht-bench.c
> index 362f03cb03..2e5b70ccd0 100644
> --- a/tests/qht-bench.c
> +++ b/tests/qht-bench.c
> @@ -209,13 +209,13 @@ static void *thread_func(void *p)
>
> rcu_register_thread();
>
> - atomic_inc(&n_ready_threads);
> - while (!atomic_read(&test_start)) {
> + qatomic_inc(&n_ready_threads);
> + while (!qatomic_read(&test_start)) {
> cpu_relax();
> }
>
> rcu_read_lock();
> - while (!atomic_read(&test_stop)) {
> + while (!qatomic_read(&test_stop)) {
> info->seed = xorshift64star(info->seed);
> info->func(info);
> }
> @@ -423,13 +423,13 @@ static void run_test(void)
> {
> int i;
>
> - while (atomic_read(&n_ready_threads) != n_rw_threads + n_rz_threads) {
> + while (qatomic_read(&n_ready_threads) != n_rw_threads + n_rz_threads) {
> cpu_relax();
> }
>
> - atomic_set(&test_start, true);
> + qatomic_set(&test_start, true);
> g_usleep(duration * G_USEC_PER_SEC);
> - atomic_set(&test_stop, true);
> + qatomic_set(&test_stop, true);
>
> for (i = 0; i < n_rw_threads; i++) {
> qemu_thread_join(&rw_threads[i]);
> diff --git a/tests/rcutorture.c b/tests/rcutorture.c
> index 732f03abda..de6f649058 100644
> --- a/tests/rcutorture.c
> +++ b/tests/rcutorture.c
> @@ -123,7 +123,7 @@ static void *rcu_read_perf_test(void *arg)
> rcu_register_thread();
>
> *(struct rcu_reader_data **)arg = &rcu_reader;
> - atomic_inc(&nthreadsrunning);
> + qatomic_inc(&nthreadsrunning);
> while (goflag == GOFLAG_INIT) {
> g_usleep(1000);
> }
> @@ -149,7 +149,7 @@ static void *rcu_update_perf_test(void *arg)
> rcu_register_thread();
>
> *(struct rcu_reader_data **)arg = &rcu_reader;
> - atomic_inc(&nthreadsrunning);
> + qatomic_inc(&nthreadsrunning);
> while (goflag == GOFLAG_INIT) {
> g_usleep(1000);
> }
> @@ -172,7 +172,7 @@ static void perftestinit(void)
>
> static void perftestrun(int nthreads, int duration, int nreaders, int nupdaters)
> {
> - while (atomic_read(&nthreadsrunning) < nthreads) {
> + while (qatomic_read(&nthreadsrunning) < nthreads) {
> g_usleep(1000);
> }
> goflag = GOFLAG_RUN;
> @@ -259,8 +259,8 @@ static void *rcu_read_stress_test(void *arg)
> }
> while (goflag == GOFLAG_RUN) {
> rcu_read_lock();
> - p = atomic_rcu_read(&rcu_stress_current);
> - if (atomic_read(&p->mbtest) == 0) {
> + p = qatomic_rcu_read(&rcu_stress_current);
> + if (qatomic_read(&p->mbtest) == 0) {
> n_mberror++;
> }
> rcu_read_lock();
> @@ -268,7 +268,7 @@ static void *rcu_read_stress_test(void *arg)
> garbage++;
> }
> rcu_read_unlock();
> - pc = atomic_read(&p->age);
> + pc = qatomic_read(&p->age);
> rcu_read_unlock();
> if ((pc > RCU_STRESS_PIPE_LEN) || (pc < 0)) {
> pc = RCU_STRESS_PIPE_LEN;
> @@ -301,7 +301,7 @@ static void *rcu_read_stress_test(void *arg)
> static void *rcu_update_stress_test(void *arg)
> {
> int i, rcu_stress_idx = 0;
> - struct rcu_stress *cp = atomic_read(&rcu_stress_current);
> + struct rcu_stress *cp = qatomic_read(&rcu_stress_current);
>
> rcu_register_thread();
> *(struct rcu_reader_data **)arg = &rcu_reader;
> @@ -319,11 +319,11 @@ static void *rcu_update_stress_test(void *arg)
> p = &rcu_stress_array[rcu_stress_idx];
> /* catching up with ourselves would be a bug */
> assert(p != cp);
> - atomic_set(&p->mbtest, 0);
> + qatomic_set(&p->mbtest, 0);
> smp_mb();
> - atomic_set(&p->age, 0);
> - atomic_set(&p->mbtest, 1);
> - atomic_rcu_set(&rcu_stress_current, p);
> + qatomic_set(&p->age, 0);
> + qatomic_set(&p->mbtest, 1);
> + qatomic_rcu_set(&rcu_stress_current, p);
> cp = p;
> /*
> * New RCU structure is now live, update pipe counts on old
> @@ -331,7 +331,7 @@ static void *rcu_update_stress_test(void *arg)
> */
> for (i = 0; i < RCU_STRESS_PIPE_LEN; i++) {
> if (i != rcu_stress_idx) {
> - atomic_set(&rcu_stress_array[i].age,
> + qatomic_set(&rcu_stress_array[i].age,
> rcu_stress_array[i].age + 1);
> }
> }
> diff --git a/tests/test-aio-multithread.c b/tests/test-aio-multithread.c
> index d3144be7e0..a555cc8835 100644
> --- a/tests/test-aio-multithread.c
> +++ b/tests/test-aio-multithread.c
> @@ -118,16 +118,16 @@ static bool schedule_next(int n)
> {
> Coroutine *co;
>
> - co = atomic_xchg(&to_schedule[n], NULL);
> + co = qatomic_xchg(&to_schedule[n], NULL);
> if (!co) {
> - atomic_inc(&count_retry);
> + qatomic_inc(&count_retry);
> return false;
> }
>
> if (n == id) {
> - atomic_inc(&count_here);
> + qatomic_inc(&count_here);
> } else {
> - atomic_inc(&count_other);
> + qatomic_inc(&count_other);
> }
>
> aio_co_schedule(ctx[n], co);
> @@ -143,13 +143,13 @@ static coroutine_fn void test_multi_co_schedule_entry(void *opaque)
> {
> g_assert(to_schedule[id] == NULL);
>
> - while (!atomic_mb_read(&now_stopping)) {
> + while (!qatomic_mb_read(&now_stopping)) {
> int n;
>
> n = g_test_rand_int_range(0, NUM_CONTEXTS);
> schedule_next(n);
>
> - atomic_mb_set(&to_schedule[id], qemu_coroutine_self());
> + qatomic_mb_set(&to_schedule[id], qemu_coroutine_self());
> qemu_coroutine_yield();
> g_assert(to_schedule[id] == NULL);
> }
> @@ -171,7 +171,7 @@ static void test_multi_co_schedule(int seconds)
>
> g_usleep(seconds * 1000000);
>
> - atomic_mb_set(&now_stopping, true);
> + qatomic_mb_set(&now_stopping, true);
> for (i = 0; i < NUM_CONTEXTS; i++) {
> ctx_run(i, finish_cb, NULL);
> to_schedule[i] = NULL;
> @@ -202,7 +202,7 @@ static CoMutex comutex;
>
> static void coroutine_fn test_multi_co_mutex_entry(void *opaque)
> {
> - while (!atomic_mb_read(&now_stopping)) {
> + while (!qatomic_mb_read(&now_stopping)) {
> qemu_co_mutex_lock(&comutex);
> counter++;
> qemu_co_mutex_unlock(&comutex);
> @@ -212,9 +212,9 @@ static void coroutine_fn test_multi_co_mutex_entry(void *opaque)
> * exits before the coroutine is woken up, causing a spurious
> * assertion failure.
> */
> - atomic_inc(&atomic_counter);
> + qatomic_inc(&atomic_counter);
> }
> - atomic_dec(&running);
> + qatomic_dec(&running);
> }
>
> static void test_multi_co_mutex(int threads, int seconds)
> @@ -236,7 +236,7 @@ static void test_multi_co_mutex(int threads, int seconds)
>
> g_usleep(seconds * 1000000);
>
> - atomic_mb_set(&now_stopping, true);
> + qatomic_mb_set(&now_stopping, true);
> while (running > 0) {
> g_usleep(100000);
> }
> @@ -296,9 +296,9 @@ static void mcs_mutex_lock(void)
>
> nodes[id].next = -1;
> nodes[id].locked = 1;
> - prev = atomic_xchg(&mutex_head, id);
> + prev = qatomic_xchg(&mutex_head, id);
> if (prev != -1) {
> - atomic_set(&nodes[prev].next, id);
> + qatomic_set(&nodes[prev].next, id);
> qemu_futex_wait(&nodes[id].locked, 1);
> }
> }
> @@ -306,13 +306,13 @@ static void mcs_mutex_lock(void)
> static void mcs_mutex_unlock(void)
> {
> int next;
> - if (atomic_read(&nodes[id].next) == -1) {
> - if (atomic_read(&mutex_head) == id &&
> - atomic_cmpxchg(&mutex_head, id, -1) == id) {
> + if (qatomic_read(&nodes[id].next) == -1) {
> + if (qatomic_read(&mutex_head) == id &&
> + qatomic_cmpxchg(&mutex_head, id, -1) == id) {
> /* Last item in the list, exit. */
> return;
> }
> - while (atomic_read(&nodes[id].next) == -1) {
> + while (qatomic_read(&nodes[id].next) == -1) {
> /* mcs_mutex_lock did the xchg, but has not updated
> * nodes[prev].next yet.
> */
> @@ -320,20 +320,20 @@ static void mcs_mutex_unlock(void)
> }
>
> /* Wake up the next in line. */
> - next = atomic_read(&nodes[id].next);
> + next = qatomic_read(&nodes[id].next);
> nodes[next].locked = 0;
> qemu_futex_wake(&nodes[next].locked, 1);
> }
>
> static void test_multi_fair_mutex_entry(void *opaque)
> {
> - while (!atomic_mb_read(&now_stopping)) {
> + while (!qatomic_mb_read(&now_stopping)) {
> mcs_mutex_lock();
> counter++;
> mcs_mutex_unlock();
> - atomic_inc(&atomic_counter);
> + qatomic_inc(&atomic_counter);
> }
> - atomic_dec(&running);
> + qatomic_dec(&running);
> }
>
> static void test_multi_fair_mutex(int threads, int seconds)
> @@ -355,7 +355,7 @@ static void test_multi_fair_mutex(int threads, int seconds)
>
> g_usleep(seconds * 1000000);
>
> - atomic_mb_set(&now_stopping, true);
> + qatomic_mb_set(&now_stopping, true);
> while (running > 0) {
> g_usleep(100000);
> }
> @@ -383,13 +383,13 @@ static QemuMutex mutex;
>
> static void test_multi_mutex_entry(void *opaque)
> {
> - while (!atomic_mb_read(&now_stopping)) {
> + while (!qatomic_mb_read(&now_stopping)) {
> qemu_mutex_lock(&mutex);
> counter++;
> qemu_mutex_unlock(&mutex);
> - atomic_inc(&atomic_counter);
> + qatomic_inc(&atomic_counter);
> }
> - atomic_dec(&running);
> + qatomic_dec(&running);
> }
>
> static void test_multi_mutex(int threads, int seconds)
> @@ -411,7 +411,7 @@ static void test_multi_mutex(int threads, int seconds)
>
> g_usleep(seconds * 1000000);
>
> - atomic_mb_set(&now_stopping, true);
> + qatomic_mb_set(&now_stopping, true);
> while (running > 0) {
> g_usleep(100000);
> }
> diff --git a/tests/test-logging.c b/tests/test-logging.c
> index 8b1522cfed..ccb819f193 100644
> --- a/tests/test-logging.c
> +++ b/tests/test-logging.c
> @@ -133,7 +133,7 @@ static void test_logfile_write(gconstpointer data)
> */
> qemu_set_log_filename(file_path, &error_abort);
> rcu_read_lock();
> - logfile = atomic_rcu_read(&qemu_logfile);
> + logfile = qatomic_rcu_read(&qemu_logfile);
> orig_fd = logfile->fd;
> g_assert(logfile && logfile->fd);
> fprintf(logfile->fd, "%s 1st write to file\n", __func__);
> @@ -141,7 +141,7 @@ static void test_logfile_write(gconstpointer data)
>
> /* Change the logfile and ensure that the handle is still valid. */
> qemu_set_log_filename(file_path1, &error_abort);
> - logfile2 = atomic_rcu_read(&qemu_logfile);
> + logfile2 = qatomic_rcu_read(&qemu_logfile);
> g_assert(logfile->fd == orig_fd);
> g_assert(logfile2->fd != logfile->fd);
> fprintf(logfile->fd, "%s 2nd write to file\n", __func__);
> diff --git a/tests/test-rcu-list.c b/tests/test-rcu-list.c
> index 92be51ec50..49641e1936 100644
> --- a/tests/test-rcu-list.c
> +++ b/tests/test-rcu-list.c
> @@ -106,7 +106,7 @@ static void reclaim_list_el(struct rcu_head *prcu)
> struct list_element *el = container_of(prcu, struct list_element, rcu);
> g_free(el);
> /* Accessed only from call_rcu thread. */
> - atomic_set_i64(&n_reclaims, n_reclaims + 1);
> + qatomic_set_i64(&n_reclaims, n_reclaims + 1);
> }
>
> #if TEST_LIST_TYPE == 1
> @@ -172,16 +172,16 @@ static void *rcu_q_reader(void *arg)
> rcu_register_thread();
>
> *(struct rcu_reader_data **)arg = &rcu_reader;
> - atomic_inc(&nthreadsrunning);
> - while (atomic_read(&goflag) == GOFLAG_INIT) {
> + qatomic_inc(&nthreadsrunning);
> + while (qatomic_read(&goflag) == GOFLAG_INIT) {
> g_usleep(1000);
> }
>
> - while (atomic_read(&goflag) == GOFLAG_RUN) {
> + while (qatomic_read(&goflag) == GOFLAG_RUN) {
> rcu_read_lock();
> TEST_LIST_FOREACH_RCU(el, &Q_list_head, entry) {
> n_reads_local++;
> - if (atomic_read(&goflag) == GOFLAG_STOP) {
> + if (qatomic_read(&goflag) == GOFLAG_STOP) {
> break;
> }
> }
> @@ -207,12 +207,12 @@ static void *rcu_q_updater(void *arg)
> struct list_element *el, *prev_el;
>
> *(struct rcu_reader_data **)arg = &rcu_reader;
> - atomic_inc(&nthreadsrunning);
> - while (atomic_read(&goflag) == GOFLAG_INIT) {
> + qatomic_inc(&nthreadsrunning);
> + while (qatomic_read(&goflag) == GOFLAG_INIT) {
> g_usleep(1000);
> }
>
> - while (atomic_read(&goflag) == GOFLAG_RUN) {
> + while (qatomic_read(&goflag) == GOFLAG_RUN) {
> target_el = select_random_el(RCU_Q_LEN);
> j = 0;
> /* FOREACH_RCU could work here but let's use both macros */
> @@ -226,7 +226,7 @@ static void *rcu_q_updater(void *arg)
> break;
> }
> }
> - if (atomic_read(&goflag) == GOFLAG_STOP) {
> + if (qatomic_read(&goflag) == GOFLAG_STOP) {
> break;
> }
> target_el = select_random_el(RCU_Q_LEN);
> @@ -248,7 +248,7 @@ static void *rcu_q_updater(void *arg)
> qemu_mutex_lock(&counts_mutex);
> n_nodes += n_nodes_local;
> n_updates += n_updates_local;
> - atomic_set_i64(&n_nodes_removed, n_nodes_removed + n_removed_local);
> + qatomic_set_i64(&n_nodes_removed, n_nodes_removed + n_removed_local);
> qemu_mutex_unlock(&counts_mutex);
> return NULL;
> }
> @@ -271,13 +271,13 @@ static void rcu_qtest_init(void)
> static void rcu_qtest_run(int duration, int nreaders)
> {
> int nthreads = nreaders + 1;
> - while (atomic_read(&nthreadsrunning) < nthreads) {
> + while (qatomic_read(&nthreadsrunning) < nthreads) {
> g_usleep(1000);
> }
>
> - atomic_set(&goflag, GOFLAG_RUN);
> + qatomic_set(&goflag, GOFLAG_RUN);
> sleep(duration);
> - atomic_set(&goflag, GOFLAG_STOP);
> + qatomic_set(&goflag, GOFLAG_STOP);
> wait_all_threads();
> }
>
> @@ -302,21 +302,23 @@ static void rcu_qtest(const char *test, int duration, int nreaders)
> n_removed_local++;
> }
> qemu_mutex_lock(&counts_mutex);
> - atomic_set_i64(&n_nodes_removed, n_nodes_removed + n_removed_local);
> + qatomic_set_i64(&n_nodes_removed, n_nodes_removed + n_removed_local);
> qemu_mutex_unlock(&counts_mutex);
> synchronize_rcu();
> - while (atomic_read_i64(&n_nodes_removed) > atomic_read_i64(&n_reclaims)) {
> + while (qatomic_read_i64(&n_nodes_removed) >
> + qatomic_read_i64(&n_reclaims)) {
> g_usleep(100);
> synchronize_rcu();
> }
> if (g_test_in_charge) {
> - g_assert_cmpint(atomic_read_i64(&n_nodes_removed), ==,
> - atomic_read_i64(&n_reclaims));
> + g_assert_cmpint(qatomic_read_i64(&n_nodes_removed), ==,
> + qatomic_read_i64(&n_reclaims));
> } else {
> printf("%s: %d readers; 1 updater; nodes read: " \
> "%lld, nodes removed: %"PRIi64"; nodes reclaimed: %"PRIi64"\n",
> test, nthreadsrunning - 1, n_reads,
> - atomic_read_i64(&n_nodes_removed), atomic_read_i64(&n_reclaims));
> + qatomic_read_i64(&n_nodes_removed),
> + qatomic_read_i64(&n_reclaims));
> exit(0);
> }
> }
> diff --git a/tests/test-thread-pool.c b/tests/test-thread-pool.c
> index 0b675923f6..70dc6314a1 100644
> --- a/tests/test-thread-pool.c
> +++ b/tests/test-thread-pool.c
> @@ -21,15 +21,15 @@ typedef struct {
> static int worker_cb(void *opaque)
> {
> WorkerTestData *data = opaque;
> - return atomic_fetch_inc(&data->n);
> + return qatomic_fetch_inc(&data->n);
> }
>
> static int long_cb(void *opaque)
> {
> WorkerTestData *data = opaque;
> - if (atomic_cmpxchg(&data->n, 0, 1) == 0) {
> + if (qatomic_cmpxchg(&data->n, 0, 1) == 0) {
> g_usleep(2000000);
> - atomic_or(&data->n, 2);
> + qatomic_or(&data->n, 2);
> }
> return 0;
> }
> @@ -172,7 +172,7 @@ static void do_test_cancel(bool sync)
> /* Cancel the jobs that haven't been started yet. */
> num_canceled = 0;
> for (i = 0; i < 100; i++) {
> - if (atomic_cmpxchg(&data[i].n, 0, 4) == 0) {
> + if (qatomic_cmpxchg(&data[i].n, 0, 4) == 0) {
> data[i].ret = -ECANCELED;
> if (sync) {
> bdrv_aio_cancel(data[i].aiocb);
> @@ -186,7 +186,7 @@ static void do_test_cancel(bool sync)
> g_assert_cmpint(num_canceled, <, 100);
>
> for (i = 0; i < 100; i++) {
> - if (data[i].aiocb && atomic_read(&data[i].n) < 4) {
> + if (data[i].aiocb && qatomic_read(&data[i].n) < 4) {
> if (sync) {
> /* Canceling the others will be a blocking operation. */
> bdrv_aio_cancel(data[i].aiocb);
> diff --git a/util/aio-posix.c b/util/aio-posix.c
> index f7f13ebfc2..280f27bb99 100644
> --- a/util/aio-posix.c
> +++ b/util/aio-posix.c
> @@ -27,7 +27,7 @@
>
> bool aio_poll_disabled(AioContext *ctx)
> {
> - return atomic_read(&ctx->poll_disable_cnt);
> + return qatomic_read(&ctx->poll_disable_cnt);
> }
>
> void aio_add_ready_handler(AioHandlerList *ready_list,
> @@ -148,8 +148,8 @@ void aio_set_fd_handler(AioContext *ctx,
> * Changing handlers is a rare event, and a little wasted polling until
> * the aio_notify below is not an issue.
> */
> - atomic_set(&ctx->poll_disable_cnt,
> - atomic_read(&ctx->poll_disable_cnt) + poll_disable_change);
> + qatomic_set(&ctx->poll_disable_cnt,
> + qatomic_read(&ctx->poll_disable_cnt) + poll_disable_change);
>
> ctx->fdmon_ops->update(ctx, node, new_node);
> if (node) {
> @@ -581,7 +581,7 @@ bool aio_poll(AioContext *ctx, bool blocking)
> */
> use_notify_me = timeout != 0;
> if (use_notify_me) {
> - atomic_set(&ctx->notify_me, atomic_read(&ctx->notify_me) + 2);
> + qatomic_set(&ctx->notify_me, qatomic_read(&ctx->notify_me) + 2);
> /*
> * Write ctx->notify_me before reading ctx->notified. Pairs with
> * smp_mb in aio_notify().
> @@ -589,7 +589,7 @@ bool aio_poll(AioContext *ctx, bool blocking)
> smp_mb();
>
> /* Don't block if aio_notify() was called */
> - if (atomic_read(&ctx->notified)) {
> + if (qatomic_read(&ctx->notified)) {
> timeout = 0;
> }
> }
> @@ -603,8 +603,8 @@ bool aio_poll(AioContext *ctx, bool blocking)
>
> if (use_notify_me) {
> /* Finish the poll before clearing the flag. */
> - atomic_store_release(&ctx->notify_me,
> - atomic_read(&ctx->notify_me) - 2);
> + qatomic_store_release(&ctx->notify_me,
> + qatomic_read(&ctx->notify_me) - 2);
> }
>
> aio_notify_accept(ctx);
> diff --git a/util/aio-wait.c b/util/aio-wait.c
> index b4877493f8..bdb3d3af22 100644
> --- a/util/aio-wait.c
> +++ b/util/aio-wait.c
> @@ -36,7 +36,7 @@ static void dummy_bh_cb(void *opaque)
> void aio_wait_kick(void)
> {
> /* The barrier (or an atomic op) is in the caller. */
> - if (atomic_read(&global_aio_wait.num_waiters)) {
> + if (qatomic_read(&global_aio_wait.num_waiters)) {
> aio_bh_schedule_oneshot(qemu_get_aio_context(), dummy_bh_cb, NULL);
> }
> }
> diff --git a/util/aio-win32.c b/util/aio-win32.c
> index 49bd90e62e..e7b1d649e9 100644
> --- a/util/aio-win32.c
> +++ b/util/aio-win32.c
> @@ -345,7 +345,7 @@ bool aio_poll(AioContext *ctx, bool blocking)
> * so disable the optimization now.
> */
> if (blocking) {
> - atomic_set(&ctx->notify_me, atomic_read(&ctx->notify_me) + 2);
> + qatomic_set(&ctx->notify_me, qatomic_read(&ctx->notify_me) + 2);
> /*
> * Write ctx->notify_me before computing the timeout
> * (reading bottom half flags, etc.). Pairs with
> @@ -384,7 +384,8 @@ bool aio_poll(AioContext *ctx, bool blocking)
> ret = WaitForMultipleObjects(count, events, FALSE, timeout);
> if (blocking) {
> assert(first);
> - atomic_store_release(&ctx->notify_me, atomic_read(&ctx->notify_me) - 2);
> + qatomic_store_release(&ctx->notify_me,
> + qatomic_read(&ctx->notify_me) - 2);
> aio_notify_accept(ctx);
> }
>
> diff --git a/util/async.c b/util/async.c
> index 4266745dee..f758354c6a 100644
> --- a/util/async.c
> +++ b/util/async.c
> @@ -70,13 +70,13 @@ static void aio_bh_enqueue(QEMUBH *bh, unsigned new_flags)
> unsigned old_flags;
>
> /*
> - * The memory barrier implicit in atomic_fetch_or makes sure that:
> + * The memory barrier implicit in qatomic_fetch_or makes sure that:
> * 1. idle & any writes needed by the callback are done before the
> * locations are read in the aio_bh_poll.
> * 2. ctx is loaded before the callback has a chance to execute and bh
> * could be freed.
> */
> - old_flags = atomic_fetch_or(&bh->flags, BH_PENDING | new_flags);
> + old_flags = qatomic_fetch_or(&bh->flags, BH_PENDING | new_flags);
> if (!(old_flags & BH_PENDING)) {
> QSLIST_INSERT_HEAD_ATOMIC(&ctx->bh_list, bh, next);
> }
> @@ -96,13 +96,13 @@ static QEMUBH *aio_bh_dequeue(BHList *head, unsigned *flags)
> QSLIST_REMOVE_HEAD(head, next);
>
> /*
> - * The atomic_and is paired with aio_bh_enqueue(). The implicit memory
> + * The qatomic_and is paired with aio_bh_enqueue(). The implicit memory
> * barrier ensures that the callback sees all writes done by the scheduling
> * thread. It also ensures that the scheduling thread sees the cleared
> * flag before bh->cb has run, and thus will call aio_notify again if
> * necessary.
> */
> - *flags = atomic_fetch_and(&bh->flags,
> + *flags = qatomic_fetch_and(&bh->flags,
> ~(BH_PENDING | BH_SCHEDULED | BH_IDLE));
> return bh;
> }
> @@ -185,7 +185,7 @@ void qemu_bh_schedule(QEMUBH *bh)
> */
> void qemu_bh_cancel(QEMUBH *bh)
> {
> - atomic_and(&bh->flags, ~BH_SCHEDULED);
> + qatomic_and(&bh->flags, ~BH_SCHEDULED);
> }
>
> /* This func is async.The bottom half will do the delete action at the finial
> @@ -249,7 +249,7 @@ aio_ctx_prepare(GSource *source, gint *timeout)
> {
> AioContext *ctx = (AioContext *) source;
>
> - atomic_set(&ctx->notify_me, atomic_read(&ctx->notify_me) | 1);
> + qatomic_set(&ctx->notify_me, qatomic_read(&ctx->notify_me) | 1);
>
> /*
> * Write ctx->notify_me before computing the timeout
> @@ -276,7 +276,7 @@ aio_ctx_check(GSource *source)
> BHListSlice *s;
>
> /* Finish computing the timeout before clearing the flag. */
> - atomic_store_release(&ctx->notify_me, atomic_read(&ctx->notify_me) & ~1);
> + qatomic_store_release(&ctx->notify_me, qatomic_read(&ctx->notify_me) & ~1);
> aio_notify_accept(ctx);
>
> QSLIST_FOREACH_RCU(bh, &ctx->bh_list, next) {
> @@ -424,21 +424,21 @@ void aio_notify(AioContext *ctx)
> * aio_notify_accept.
> */
> smp_wmb();
> - atomic_set(&ctx->notified, true);
> + qatomic_set(&ctx->notified, true);
>
> /*
> * Write ctx->notified before reading ctx->notify_me. Pairs
> * with smp_mb in aio_ctx_prepare or aio_poll.
> */
> smp_mb();
> - if (atomic_read(&ctx->notify_me)) {
> + if (qatomic_read(&ctx->notify_me)) {
> event_notifier_set(&ctx->notifier);
> }
> }
>
> void aio_notify_accept(AioContext *ctx)
> {
> - atomic_set(&ctx->notified, false);
> + qatomic_set(&ctx->notified, false);
>
> /*
> * Write ctx->notified before reading e.g. bh->flags. Pairs with smp_wmb
> @@ -465,7 +465,7 @@ static bool aio_context_notifier_poll(void *opaque)
> EventNotifier *e = opaque;
> AioContext *ctx = container_of(e, AioContext, notifier);
>
> - return atomic_read(&ctx->notified);
> + return qatomic_read(&ctx->notified);
> }
>
> static void co_schedule_bh_cb(void *opaque)
> @@ -489,7 +489,7 @@ static void co_schedule_bh_cb(void *opaque)
> aio_context_acquire(ctx);
>
> /* Protected by write barrier in qemu_aio_coroutine_enter */
> - atomic_set(&co->scheduled, NULL);
> + qatomic_set(&co->scheduled, NULL);
> qemu_aio_coroutine_enter(ctx, co);
> aio_context_release(ctx);
> }
> @@ -546,7 +546,7 @@ fail:
> void aio_co_schedule(AioContext *ctx, Coroutine *co)
> {
> trace_aio_co_schedule(ctx, co);
> - const char *scheduled = atomic_cmpxchg(&co->scheduled, NULL,
> + const char *scheduled = qatomic_cmpxchg(&co->scheduled, NULL,
> __func__);
>
> if (scheduled) {
> @@ -577,7 +577,7 @@ void aio_co_wake(struct Coroutine *co)
> * qemu_coroutine_enter.
> */
> smp_read_barrier_depends();
> - ctx = atomic_read(&co->ctx);
> + ctx = qatomic_read(&co->ctx);
>
> aio_co_enter(ctx, co);
> }
> diff --git a/util/atomic64.c b/util/atomic64.c
> index b198a6c9c8..93037d5b11 100644
> --- a/util/atomic64.c
> +++ b/util/atomic64.c
> @@ -51,8 +51,8 @@ static QemuSpin *addr_to_lock(const void *addr)
> return ret; \
> }
>
> -GEN_READ(atomic_read_i64, int64_t)
> -GEN_READ(atomic_read_u64, uint64_t)
> +GEN_READ(qatomic_read_i64, int64_t)
> +GEN_READ(qatomic_read_u64, uint64_t)
> #undef GEN_READ
>
> #define GEN_SET(name, type) \
> @@ -65,11 +65,11 @@ GEN_READ(atomic_read_u64, uint64_t)
> qemu_spin_unlock(lock); \
> }
>
> -GEN_SET(atomic_set_i64, int64_t)
> -GEN_SET(atomic_set_u64, uint64_t)
> +GEN_SET(qatomic_set_i64, int64_t)
> +GEN_SET(qatomic_set_u64, uint64_t)
> #undef GEN_SET
>
> -void atomic64_init(void)
> +void qatomic64_init(void)
> {
> int i;
>
> diff --git a/util/bitmap.c b/util/bitmap.c
> index 1753ff7f5b..1f201393ae 100644
> --- a/util/bitmap.c
> +++ b/util/bitmap.c
> @@ -190,7 +190,7 @@ void bitmap_set_atomic(unsigned long *map, long start, long nr)
>
> /* First word */
> if (nr - bits_to_set > 0) {
> - atomic_or(p, mask_to_set);
> + qatomic_or(p, mask_to_set);
> nr -= bits_to_set;
> bits_to_set = BITS_PER_LONG;
> mask_to_set = ~0UL;
> @@ -209,9 +209,9 @@ void bitmap_set_atomic(unsigned long *map, long start, long nr)
> /* Last word */
> if (nr) {
> mask_to_set &= BITMAP_LAST_WORD_MASK(size);
> - atomic_or(p, mask_to_set);
> + qatomic_or(p, mask_to_set);
> } else {
> - /* If we avoided the full barrier in atomic_or(), issue a
> + /* If we avoided the full barrier in qatomic_or(), issue a
> * barrier to account for the assignments in the while loop.
> */
> smp_mb();
> @@ -253,7 +253,7 @@ bool bitmap_test_and_clear_atomic(unsigned long *map, long start, long nr)
>
> /* First word */
> if (nr - bits_to_clear > 0) {
> - old_bits = atomic_fetch_and(p, ~mask_to_clear);
> + old_bits = qatomic_fetch_and(p, ~mask_to_clear);
> dirty |= old_bits & mask_to_clear;
> nr -= bits_to_clear;
> bits_to_clear = BITS_PER_LONG;
> @@ -265,7 +265,7 @@ bool bitmap_test_and_clear_atomic(unsigned long *map, long start, long nr)
> if (bits_to_clear == BITS_PER_LONG) {
> while (nr >= BITS_PER_LONG) {
> if (*p) {
> - old_bits = atomic_xchg(p, 0);
> + old_bits = qatomic_xchg(p, 0);
> dirty |= old_bits;
> }
> nr -= BITS_PER_LONG;
> @@ -276,7 +276,7 @@ bool bitmap_test_and_clear_atomic(unsigned long *map, long start, long nr)
> /* Last word */
> if (nr) {
> mask_to_clear &= BITMAP_LAST_WORD_MASK(size);
> - old_bits = atomic_fetch_and(p, ~mask_to_clear);
> + old_bits = qatomic_fetch_and(p, ~mask_to_clear);
> dirty |= old_bits & mask_to_clear;
> } else {
> if (!dirty) {
> @@ -291,7 +291,7 @@ void bitmap_copy_and_clear_atomic(unsigned long *dst, unsigned long *src,
> long nr)
> {
> while (nr > 0) {
> - *dst = atomic_xchg(src, 0);
> + *dst = qatomic_xchg(src, 0);
> dst++;
> src++;
> nr -= BITS_PER_LONG;
> diff --git a/util/cacheinfo.c b/util/cacheinfo.c
> index d94dc6adc8..7804c186b6 100644
> --- a/util/cacheinfo.c
> +++ b/util/cacheinfo.c
> @@ -193,5 +193,5 @@ static void __attribute__((constructor)) init_cache_info(void)
> qemu_dcache_linesize = dsize;
> qemu_dcache_linesize_log = ctz32(dsize);
>
> - atomic64_init();
> + qatomic64_init();
> }
> diff --git a/util/fdmon-epoll.c b/util/fdmon-epoll.c
> index fcd989d47d..e11a8a022e 100644
> --- a/util/fdmon-epoll.c
> +++ b/util/fdmon-epoll.c
> @@ -65,7 +65,7 @@ static int fdmon_epoll_wait(AioContext *ctx, AioHandlerList *ready_list,
> struct epoll_event events[128];
>
> /* Fall back while external clients are disabled */
> - if (atomic_read(&ctx->external_disable_cnt)) {
> + if (qatomic_read(&ctx->external_disable_cnt)) {
> return fdmon_poll_ops.wait(ctx, ready_list, timeout);
> }
>
> @@ -132,7 +132,7 @@ bool fdmon_epoll_try_upgrade(AioContext *ctx, unsigned npfd)
> }
>
> /* Do not upgrade while external clients are disabled */
> - if (atomic_read(&ctx->external_disable_cnt)) {
> + if (qatomic_read(&ctx->external_disable_cnt)) {
> return false;
> }
>
> diff --git a/util/fdmon-io_uring.c b/util/fdmon-io_uring.c
> index 1d14177df0..1461dfa407 100644
> --- a/util/fdmon-io_uring.c
> +++ b/util/fdmon-io_uring.c
> @@ -103,7 +103,7 @@ static void enqueue(AioHandlerSList *head, AioHandler *node, unsigned flags)
> {
> unsigned old_flags;
>
> - old_flags = atomic_fetch_or(&node->flags, FDMON_IO_URING_PENDING | flags);
> + old_flags = qatomic_fetch_or(&node->flags, FDMON_IO_URING_PENDING | flags);
> if (!(old_flags & FDMON_IO_URING_PENDING)) {
> QSLIST_INSERT_HEAD_ATOMIC(head, node, node_submitted);
> }
> @@ -127,7 +127,7 @@ static AioHandler *dequeue(AioHandlerSList *head, unsigned *flags)
> * telling process_cqe() to delete the AioHandler when its
> * IORING_OP_POLL_ADD completes.
> */
> - *flags = atomic_fetch_and(&node->flags, ~(FDMON_IO_URING_PENDING |
> + *flags = qatomic_fetch_and(&node->flags, ~(FDMON_IO_URING_PENDING |
> FDMON_IO_URING_ADD));
> return node;
> }
> @@ -233,7 +233,7 @@ static bool process_cqe(AioContext *ctx,
> * with enqueue() here then we can safely clear the FDMON_IO_URING_REMOVE
> * bit before IORING_OP_POLL_REMOVE is submitted.
> */
> - flags = atomic_fetch_and(&node->flags, ~FDMON_IO_URING_REMOVE);
> + flags = qatomic_fetch_and(&node->flags, ~FDMON_IO_URING_REMOVE);
> if (flags & FDMON_IO_URING_REMOVE) {
> QLIST_INSERT_HEAD_RCU(&ctx->deleted_aio_handlers, node, node_deleted);
> return false;
> @@ -273,7 +273,7 @@ static int fdmon_io_uring_wait(AioContext *ctx, AioHandlerList *ready_list,
> int ret;
>
> /* Fall back while external clients are disabled */
> - if (atomic_read(&ctx->external_disable_cnt)) {
> + if (qatomic_read(&ctx->external_disable_cnt)) {
> return fdmon_poll_ops.wait(ctx, ready_list, timeout);
> }
>
> @@ -312,7 +312,7 @@ static bool fdmon_io_uring_need_wait(AioContext *ctx)
> }
>
> /* Are we falling back to fdmon-poll? */
> - return atomic_read(&ctx->external_disable_cnt);
> + return qatomic_read(&ctx->external_disable_cnt);
> }
>
> static const FDMonOps fdmon_io_uring_ops = {
> @@ -344,7 +344,7 @@ void fdmon_io_uring_destroy(AioContext *ctx)
>
> /* Move handlers due to be removed onto the deleted list */
> while ((node = QSLIST_FIRST_RCU(&ctx->submit_list))) {
> - unsigned flags = atomic_fetch_and(&node->flags,
> + unsigned flags = qatomic_fetch_and(&node->flags,
> ~(FDMON_IO_URING_PENDING |
> FDMON_IO_URING_ADD |
> FDMON_IO_URING_REMOVE));
> diff --git a/util/lockcnt.c b/util/lockcnt.c
> index 4f88dcf8b8..5da36946b1 100644
> --- a/util/lockcnt.c
> +++ b/util/lockcnt.c
> @@ -61,7 +61,7 @@ static bool qemu_lockcnt_cmpxchg_or_wait(QemuLockCnt *lockcnt, int *val,
> int expected = *val;
>
> trace_lockcnt_fast_path_attempt(lockcnt, expected, new_if_free);
> - *val = atomic_cmpxchg(&lockcnt->count, expected, new_if_free);
> + *val = qatomic_cmpxchg(&lockcnt->count, expected, new_if_free);
> if (*val == expected) {
> trace_lockcnt_fast_path_success(lockcnt, expected, new_if_free);
> *val = new_if_free;
> @@ -81,7 +81,7 @@ static bool qemu_lockcnt_cmpxchg_or_wait(QemuLockCnt *lockcnt, int *val,
> int new = expected - QEMU_LOCKCNT_STATE_LOCKED + QEMU_LOCKCNT_STATE_WAITING;
>
> trace_lockcnt_futex_wait_prepare(lockcnt, expected, new);
> - *val = atomic_cmpxchg(&lockcnt->count, expected, new);
> + *val = qatomic_cmpxchg(&lockcnt->count, expected, new);
> if (*val == expected) {
> *val = new;
> }
> @@ -92,7 +92,7 @@ static bool qemu_lockcnt_cmpxchg_or_wait(QemuLockCnt *lockcnt, int *val,
> *waited = true;
> trace_lockcnt_futex_wait(lockcnt, *val);
> qemu_futex_wait(&lockcnt->count, *val);
> - *val = atomic_read(&lockcnt->count);
> + *val = qatomic_read(&lockcnt->count);
> trace_lockcnt_futex_wait_resume(lockcnt, *val);
> continue;
> }
> @@ -110,13 +110,14 @@ static void lockcnt_wake(QemuLockCnt *lockcnt)
>
> void qemu_lockcnt_inc(QemuLockCnt *lockcnt)
> {
> - int val = atomic_read(&lockcnt->count);
> + int val = qatomic_read(&lockcnt->count);
> bool waited = false;
>
> for (;;) {
> if (val >= QEMU_LOCKCNT_COUNT_STEP) {
> int expected = val;
> - val = atomic_cmpxchg(&lockcnt->count, val, val + QEMU_LOCKCNT_COUNT_STEP);
> + val = qatomic_cmpxchg(&lockcnt->count, val,
> + val + QEMU_LOCKCNT_COUNT_STEP);
> if (val == expected) {
> break;
> }
> @@ -142,7 +143,7 @@ void qemu_lockcnt_inc(QemuLockCnt *lockcnt)
>
> void qemu_lockcnt_dec(QemuLockCnt *lockcnt)
> {
> - atomic_sub(&lockcnt->count, QEMU_LOCKCNT_COUNT_STEP);
> + qatomic_sub(&lockcnt->count, QEMU_LOCKCNT_COUNT_STEP);
> }
>
> /* Decrement a counter, and return locked if it is decremented to zero.
> @@ -151,14 +152,15 @@ void qemu_lockcnt_dec(QemuLockCnt *lockcnt)
> */
> bool qemu_lockcnt_dec_and_lock(QemuLockCnt *lockcnt)
> {
> - int val = atomic_read(&lockcnt->count);
> + int val = qatomic_read(&lockcnt->count);
> int locked_state = QEMU_LOCKCNT_STATE_LOCKED;
> bool waited = false;
>
> for (;;) {
> if (val >= 2 * QEMU_LOCKCNT_COUNT_STEP) {
> int expected = val;
> - val = atomic_cmpxchg(&lockcnt->count, val, val - QEMU_LOCKCNT_COUNT_STEP);
> + val = qatomic_cmpxchg(&lockcnt->count, val,
> + val - QEMU_LOCKCNT_COUNT_STEP);
> if (val == expected) {
> break;
> }
> @@ -199,7 +201,7 @@ bool qemu_lockcnt_dec_and_lock(QemuLockCnt *lockcnt)
> */
> bool qemu_lockcnt_dec_if_lock(QemuLockCnt *lockcnt)
> {
> - int val = atomic_read(&lockcnt->count);
> + int val = qatomic_read(&lockcnt->count);
> int locked_state = QEMU_LOCKCNT_STATE_LOCKED;
> bool waited = false;
>
> @@ -233,7 +235,7 @@ bool qemu_lockcnt_dec_if_lock(QemuLockCnt *lockcnt)
>
> void qemu_lockcnt_lock(QemuLockCnt *lockcnt)
> {
> - int val = atomic_read(&lockcnt->count);
> + int val = qatomic_read(&lockcnt->count);
> int step = QEMU_LOCKCNT_STATE_LOCKED;
> bool waited = false;
>
> @@ -255,12 +257,12 @@ void qemu_lockcnt_inc_and_unlock(QemuLockCnt *lockcnt)
> {
> int expected, new, val;
>
> - val = atomic_read(&lockcnt->count);
> + val = qatomic_read(&lockcnt->count);
> do {
> expected = val;
> new = (val + QEMU_LOCKCNT_COUNT_STEP) & ~QEMU_LOCKCNT_STATE_MASK;
> trace_lockcnt_unlock_attempt(lockcnt, val, new);
> - val = atomic_cmpxchg(&lockcnt->count, val, new);
> + val = qatomic_cmpxchg(&lockcnt->count, val, new);
> } while (val != expected);
>
> trace_lockcnt_unlock_success(lockcnt, val, new);
> @@ -273,12 +275,12 @@ void qemu_lockcnt_unlock(QemuLockCnt *lockcnt)
> {
> int expected, new, val;
>
> - val = atomic_read(&lockcnt->count);
> + val = qatomic_read(&lockcnt->count);
> do {
> expected = val;
> new = val & ~QEMU_LOCKCNT_STATE_MASK;
> trace_lockcnt_unlock_attempt(lockcnt, val, new);
> - val = atomic_cmpxchg(&lockcnt->count, val, new);
> + val = qatomic_cmpxchg(&lockcnt->count, val, new);
> } while (val != expected);
>
> trace_lockcnt_unlock_success(lockcnt, val, new);
> @@ -289,7 +291,7 @@ void qemu_lockcnt_unlock(QemuLockCnt *lockcnt)
>
> unsigned qemu_lockcnt_count(QemuLockCnt *lockcnt)
> {
> - return atomic_read(&lockcnt->count) >> QEMU_LOCKCNT_COUNT_SHIFT;
> + return qatomic_read(&lockcnt->count) >> QEMU_LOCKCNT_COUNT_SHIFT;
> }
> #else
> void qemu_lockcnt_init(QemuLockCnt *lockcnt)
> @@ -307,13 +309,13 @@ void qemu_lockcnt_inc(QemuLockCnt *lockcnt)
> {
> int old;
> for (;;) {
> - old = atomic_read(&lockcnt->count);
> + old = qatomic_read(&lockcnt->count);
> if (old == 0) {
> qemu_lockcnt_lock(lockcnt);
> qemu_lockcnt_inc_and_unlock(lockcnt);
> return;
> } else {
> - if (atomic_cmpxchg(&lockcnt->count, old, old + 1) == old) {
> + if (qatomic_cmpxchg(&lockcnt->count, old, old + 1) == old) {
> return;
> }
> }
> @@ -322,7 +324,7 @@ void qemu_lockcnt_inc(QemuLockCnt *lockcnt)
>
> void qemu_lockcnt_dec(QemuLockCnt *lockcnt)
> {
> - atomic_dec(&lockcnt->count);
> + qatomic_dec(&lockcnt->count);
> }
>
> /* Decrement a counter, and return locked if it is decremented to zero.
> @@ -331,9 +333,9 @@ void qemu_lockcnt_dec(QemuLockCnt *lockcnt)
> */
> bool qemu_lockcnt_dec_and_lock(QemuLockCnt *lockcnt)
> {
> - int val = atomic_read(&lockcnt->count);
> + int val = qatomic_read(&lockcnt->count);
> while (val > 1) {
> - int old = atomic_cmpxchg(&lockcnt->count, val, val - 1);
> + int old = qatomic_cmpxchg(&lockcnt->count, val, val - 1);
> if (old != val) {
> val = old;
> continue;
> @@ -343,7 +345,7 @@ bool qemu_lockcnt_dec_and_lock(QemuLockCnt *lockcnt)
> }
>
> qemu_lockcnt_lock(lockcnt);
> - if (atomic_fetch_dec(&lockcnt->count) == 1) {
> + if (qatomic_fetch_dec(&lockcnt->count) == 1) {
> return true;
> }
>
> @@ -360,13 +362,13 @@ bool qemu_lockcnt_dec_and_lock(QemuLockCnt *lockcnt)
> bool qemu_lockcnt_dec_if_lock(QemuLockCnt *lockcnt)
> {
> /* No need for acquire semantics if we return false. */
> - int val = atomic_read(&lockcnt->count);
> + int val = qatomic_read(&lockcnt->count);
> if (val > 1) {
> return false;
> }
>
> qemu_lockcnt_lock(lockcnt);
> - if (atomic_fetch_dec(&lockcnt->count) == 1) {
> + if (qatomic_fetch_dec(&lockcnt->count) == 1) {
> return true;
> }
>
> @@ -381,7 +383,7 @@ void qemu_lockcnt_lock(QemuLockCnt *lockcnt)
>
> void qemu_lockcnt_inc_and_unlock(QemuLockCnt *lockcnt)
> {
> - atomic_inc(&lockcnt->count);
> + qatomic_inc(&lockcnt->count);
> qemu_mutex_unlock(&lockcnt->mutex);
> }
>
> @@ -392,6 +394,6 @@ void qemu_lockcnt_unlock(QemuLockCnt *lockcnt)
>
> unsigned qemu_lockcnt_count(QemuLockCnt *lockcnt)
> {
> - return atomic_read(&lockcnt->count);
> + return qatomic_read(&lockcnt->count);
> }
> #endif
> diff --git a/util/log.c b/util/log.c
> index bdb3d712e8..4b423062aa 100644
> --- a/util/log.c
> +++ b/util/log.c
> @@ -41,7 +41,7 @@ int qemu_log(const char *fmt, ...)
> QemuLogFile *logfile;
>
> rcu_read_lock();
> - logfile = atomic_rcu_read(&qemu_logfile);
> + logfile = qatomic_rcu_read(&qemu_logfile);
> if (logfile) {
> va_list ap;
> va_start(ap, fmt);
> @@ -98,7 +98,7 @@ void qemu_set_log(int log_flags)
> QEMU_LOCK_GUARD(&qemu_logfile_mutex);
> if (qemu_logfile && !need_to_open_file) {
> logfile = qemu_logfile;
> - atomic_rcu_set(&qemu_logfile, NULL);
> + qatomic_rcu_set(&qemu_logfile, NULL);
> call_rcu(logfile, qemu_logfile_free, rcu);
> } else if (!qemu_logfile && need_to_open_file) {
> logfile = g_new0(QemuLogFile, 1);
> @@ -135,7 +135,7 @@ void qemu_set_log(int log_flags)
> #endif
> log_append = 1;
> }
> - atomic_rcu_set(&qemu_logfile, logfile);
> + qatomic_rcu_set(&qemu_logfile, logfile);
> }
> }
>
> @@ -272,7 +272,7 @@ void qemu_log_flush(void)
> QemuLogFile *logfile;
>
> rcu_read_lock();
> - logfile = atomic_rcu_read(&qemu_logfile);
> + logfile = qatomic_rcu_read(&qemu_logfile);
> if (logfile) {
> fflush(logfile->fd);
> }
> @@ -288,7 +288,7 @@ void qemu_log_close(void)
> logfile = qemu_logfile;
>
> if (logfile) {
> - atomic_rcu_set(&qemu_logfile, NULL);
> + qatomic_rcu_set(&qemu_logfile, NULL);
> call_rcu(logfile, qemu_logfile_free, rcu);
> }
> qemu_mutex_unlock(&qemu_logfile_mutex);
> diff --git a/util/qemu-coroutine-lock.c b/util/qemu-coroutine-lock.c
> index 5da5234155..36927b5f88 100644
> --- a/util/qemu-coroutine-lock.c
> +++ b/util/qemu-coroutine-lock.c
> @@ -212,10 +212,10 @@ static void coroutine_fn qemu_co_mutex_lock_slowpath(AioContext *ctx,
> /* This is the "Responsibility Hand-Off" protocol; a lock() picks from
> * a concurrent unlock() the responsibility of waking somebody up.
> */
> - old_handoff = atomic_mb_read(&mutex->handoff);
> + old_handoff = qatomic_mb_read(&mutex->handoff);
> if (old_handoff &&
> has_waiters(mutex) &&
> - atomic_cmpxchg(&mutex->handoff, old_handoff, 0) == old_handoff) {
> + qatomic_cmpxchg(&mutex->handoff, old_handoff, 0) == old_handoff) {
> /* There can be no concurrent pops, because there can be only
> * one active handoff at a time.
> */
> @@ -250,18 +250,18 @@ void coroutine_fn qemu_co_mutex_lock(CoMutex *mutex)
> */
> i = 0;
> retry_fast_path:
> - waiters = atomic_cmpxchg(&mutex->locked, 0, 1);
> + waiters = qatomic_cmpxchg(&mutex->locked, 0, 1);
> if (waiters != 0) {
> while (waiters == 1 && ++i < 1000) {
> - if (atomic_read(&mutex->ctx) == ctx) {
> + if (qatomic_read(&mutex->ctx) == ctx) {
> break;
> }
> - if (atomic_read(&mutex->locked) == 0) {
> + if (qatomic_read(&mutex->locked) == 0) {
> goto retry_fast_path;
> }
> cpu_relax();
> }
> - waiters = atomic_fetch_inc(&mutex->locked);
> + waiters = qatomic_fetch_inc(&mutex->locked);
> }
>
> if (waiters == 0) {
> @@ -288,7 +288,7 @@ void coroutine_fn qemu_co_mutex_unlock(CoMutex *mutex)
> mutex->ctx = NULL;
> mutex->holder = NULL;
> self->locks_held--;
> - if (atomic_fetch_dec(&mutex->locked) == 1) {
> + if (qatomic_fetch_dec(&mutex->locked) == 1) {
> /* No waiting qemu_co_mutex_lock(). Pfew, that was easy! */
> return;
> }
> @@ -311,7 +311,7 @@ void coroutine_fn qemu_co_mutex_unlock(CoMutex *mutex)
> }
>
> our_handoff = mutex->sequence;
> - atomic_mb_set(&mutex->handoff, our_handoff);
> + qatomic_mb_set(&mutex->handoff, our_handoff);
> if (!has_waiters(mutex)) {
> /* The concurrent lock has not added itself yet, so it
> * will be able to pick our handoff.
> @@ -322,7 +322,7 @@ void coroutine_fn qemu_co_mutex_unlock(CoMutex *mutex)
> /* Try to do the handoff protocol ourselves; if somebody else has
> * already taken it, however, we're done and they're responsible.
> */
> - if (atomic_cmpxchg(&mutex->handoff, our_handoff, 0) != our_handoff) {
> + if (qatomic_cmpxchg(&mutex->handoff, our_handoff, 0) != our_handoff) {
> break;
> }
> }
> diff --git a/util/qemu-coroutine-sleep.c b/util/qemu-coroutine-sleep.c
> index 769a76e57d..8c4dac4fd7 100644
> --- a/util/qemu-coroutine-sleep.c
> +++ b/util/qemu-coroutine-sleep.c
> @@ -28,7 +28,7 @@ struct QemuCoSleepState {
> void qemu_co_sleep_wake(QemuCoSleepState *sleep_state)
> {
> /* Write of schedule protected by barrier write in aio_co_schedule */
> - const char *scheduled = atomic_cmpxchg(&sleep_state->co->scheduled,
> + const char *scheduled = qatomic_cmpxchg(&sleep_state->co->scheduled,
> qemu_co_sleep_ns__scheduled, NULL);
>
> assert(scheduled == qemu_co_sleep_ns__scheduled);
> @@ -54,7 +54,7 @@ void coroutine_fn qemu_co_sleep_ns_wakeable(QEMUClockType type, int64_t ns,
> .user_state_pointer = sleep_state,
> };
>
> - const char *scheduled = atomic_cmpxchg(&state.co->scheduled, NULL,
> + const char *scheduled = qatomic_cmpxchg(&state.co->scheduled, NULL,
> qemu_co_sleep_ns__scheduled);
> if (scheduled) {
> fprintf(stderr,
> diff --git a/util/qemu-coroutine.c b/util/qemu-coroutine.c
> index c3caa6c770..38fb6d3084 100644
> --- a/util/qemu-coroutine.c
> +++ b/util/qemu-coroutine.c
> @@ -60,7 +60,7 @@ Coroutine *qemu_coroutine_create(CoroutineEntry *entry, void *opaque)
> * release_pool_size and the actual size of release_pool. But
> * it is just a heuristic, it does not need to be perfect.
> */
> - alloc_pool_size = atomic_xchg(&release_pool_size, 0);
> + alloc_pool_size = qatomic_xchg(&release_pool_size, 0);
> QSLIST_MOVE_ATOMIC(&alloc_pool, &release_pool);
> co = QSLIST_FIRST(&alloc_pool);
> }
> @@ -88,7 +88,7 @@ static void coroutine_delete(Coroutine *co)
> if (CONFIG_COROUTINE_POOL) {
> if (release_pool_size < POOL_BATCH_SIZE * 2) {
> QSLIST_INSERT_HEAD_ATOMIC(&release_pool, co, pool_next);
> - atomic_inc(&release_pool_size);
> + qatomic_inc(&release_pool_size);
> return;
> }
> if (alloc_pool_size < POOL_BATCH_SIZE) {
> @@ -115,7 +115,7 @@ void qemu_aio_coroutine_enter(AioContext *ctx, Coroutine *co)
>
> /* Cannot rely on the read barrier for to in aio_co_wake(), as there are
> * callers outside of aio_co_wake() */
> - const char *scheduled = atomic_mb_read(&to->scheduled);
> + const char *scheduled = qatomic_mb_read(&to->scheduled);
>
> QSIMPLEQ_REMOVE_HEAD(&pending, co_queue_next);
>
> diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c
> index 99ce2fd5e6..de4bf7616e 100644
> --- a/util/qemu-sockets.c
> +++ b/util/qemu-sockets.c
> @@ -395,7 +395,7 @@ static struct addrinfo *inet_parse_connect_saddr(InetSocketAddress *saddr,
> memset(&ai, 0, sizeof(ai));
>
> ai.ai_flags = AI_CANONNAME | AI_ADDRCONFIG;
> - if (atomic_read(&useV4Mapped)) {
> + if (qatomic_read(&useV4Mapped)) {
> ai.ai_flags |= AI_V4MAPPED;
> }
> ai.ai_family = inet_ai_family_from_address(saddr, &err);
> @@ -421,7 +421,7 @@ static struct addrinfo *inet_parse_connect_saddr(InetSocketAddress *saddr,
> */
> if (rc == EAI_BADFLAGS &&
> (ai.ai_flags & AI_V4MAPPED)) {
> - atomic_set(&useV4Mapped, 0);
> + qatomic_set(&useV4Mapped, 0);
> ai.ai_flags &= ~AI_V4MAPPED;
> rc = getaddrinfo(saddr->host, saddr->port, &ai, &res);
> }
> diff --git a/util/qemu-thread-posix.c b/util/qemu-thread-posix.c
> index b4c2359272..dcff5e7c5d 100644
> --- a/util/qemu-thread-posix.c
> +++ b/util/qemu-thread-posix.c
> @@ -414,8 +414,8 @@ void qemu_event_set(QemuEvent *ev)
> */
> assert(ev->initialized);
> smp_mb();
> - if (atomic_read(&ev->value) != EV_SET) {
> - if (atomic_xchg(&ev->value, EV_SET) == EV_BUSY) {
> + if (qatomic_read(&ev->value) != EV_SET) {
> + if (qatomic_xchg(&ev->value, EV_SET) == EV_BUSY) {
> /* There were waiters, wake them up. */
> qemu_futex_wake(ev, INT_MAX);
> }
> @@ -427,14 +427,14 @@ void qemu_event_reset(QemuEvent *ev)
> unsigned value;
>
> assert(ev->initialized);
> - value = atomic_read(&ev->value);
> + value = qatomic_read(&ev->value);
> smp_mb_acquire();
> if (value == EV_SET) {
> /*
> * If there was a concurrent reset (or even reset+wait),
> * do nothing. Otherwise change EV_SET->EV_FREE.
> */
> - atomic_or(&ev->value, EV_FREE);
> + qatomic_or(&ev->value, EV_FREE);
> }
> }
>
> @@ -443,7 +443,7 @@ void qemu_event_wait(QemuEvent *ev)
> unsigned value;
>
> assert(ev->initialized);
> - value = atomic_read(&ev->value);
> + value = qatomic_read(&ev->value);
> smp_mb_acquire();
> if (value != EV_SET) {
> if (value == EV_FREE) {
> @@ -453,7 +453,7 @@ void qemu_event_wait(QemuEvent *ev)
> * a concurrent busy->free transition. After the CAS, the
> * event will be either set or busy.
> */
> - if (atomic_cmpxchg(&ev->value, EV_FREE, EV_BUSY) == EV_SET) {
> + if (qatomic_cmpxchg(&ev->value, EV_FREE, EV_BUSY) == EV_SET) {
> return;
> }
> }
> diff --git a/util/qemu-thread-win32.c b/util/qemu-thread-win32.c
> index d207b0cb58..cb5aa2018c 100644
> --- a/util/qemu-thread-win32.c
> +++ b/util/qemu-thread-win32.c
> @@ -250,8 +250,8 @@ void qemu_event_set(QemuEvent *ev)
> * ev->value we need a full memory barrier here.
> */
> smp_mb();
> - if (atomic_read(&ev->value) != EV_SET) {
> - if (atomic_xchg(&ev->value, EV_SET) == EV_BUSY) {
> + if (qatomic_read(&ev->value) != EV_SET) {
> + if (qatomic_xchg(&ev->value, EV_SET) == EV_BUSY) {
> /* There were waiters, wake them up. */
> SetEvent(ev->event);
> }
> @@ -263,13 +263,13 @@ void qemu_event_reset(QemuEvent *ev)
> unsigned value;
>
> assert(ev->initialized);
> - value = atomic_read(&ev->value);
> + value = qatomic_read(&ev->value);
> smp_mb_acquire();
> if (value == EV_SET) {
> /* If there was a concurrent reset (or even reset+wait),
> * do nothing. Otherwise change EV_SET->EV_FREE.
> */
> - atomic_or(&ev->value, EV_FREE);
> + qatomic_or(&ev->value, EV_FREE);
> }
> }
>
> @@ -278,7 +278,7 @@ void qemu_event_wait(QemuEvent *ev)
> unsigned value;
>
> assert(ev->initialized);
> - value = atomic_read(&ev->value);
> + value = qatomic_read(&ev->value);
> smp_mb_acquire();
> if (value != EV_SET) {
> if (value == EV_FREE) {
> @@ -292,7 +292,7 @@ void qemu_event_wait(QemuEvent *ev)
> * because there cannot be a concurrent busy->free transition.
> * After the CAS, the event will be either set or busy.
> */
> - if (atomic_cmpxchg(&ev->value, EV_FREE, EV_BUSY) == EV_SET) {
> + if (qatomic_cmpxchg(&ev->value, EV_FREE, EV_BUSY) == EV_SET) {
> value = EV_SET;
> } else {
> value = EV_BUSY;
> diff --git a/util/qemu-timer.c b/util/qemu-timer.c
> index 878d80fd5e..ca677836cb 100644
> --- a/util/qemu-timer.c
> +++ b/util/qemu-timer.c
> @@ -170,7 +170,7 @@ void qemu_clock_enable(QEMUClockType type, bool enabled)
>
> bool timerlist_has_timers(QEMUTimerList *timer_list)
> {
> - return !!atomic_read(&timer_list->active_timers);
> + return !!qatomic_read(&timer_list->active_timers);
> }
>
> bool qemu_clock_has_timers(QEMUClockType type)
> @@ -183,7 +183,7 @@ bool timerlist_expired(QEMUTimerList *timer_list)
> {
> int64_t expire_time;
>
> - if (!atomic_read(&timer_list->active_timers)) {
> + if (!qatomic_read(&timer_list->active_timers)) {
> return false;
> }
>
> @@ -213,7 +213,7 @@ int64_t timerlist_deadline_ns(QEMUTimerList *timer_list)
> int64_t delta;
> int64_t expire_time;
>
> - if (!atomic_read(&timer_list->active_timers)) {
> + if (!qatomic_read(&timer_list->active_timers)) {
> return -1;
> }
>
> @@ -385,7 +385,7 @@ static void timer_del_locked(QEMUTimerList *timer_list, QEMUTimer *ts)
> if (!t)
> break;
> if (t == ts) {
> - atomic_set(pt, t->next);
> + qatomic_set(pt, t->next);
> break;
> }
> pt = &t->next;
> @@ -408,7 +408,7 @@ static bool timer_mod_ns_locked(QEMUTimerList *timer_list,
> }
> ts->expire_time = MAX(expire_time, 0);
> ts->next = *pt;
> - atomic_set(pt, ts);
> + qatomic_set(pt, ts);
>
> return pt == &timer_list->active_timers;
> }
> @@ -502,7 +502,7 @@ bool timerlist_run_timers(QEMUTimerList *timer_list)
> QEMUTimerCB *cb;
> void *opaque;
>
> - if (!atomic_read(&timer_list->active_timers)) {
> + if (!qatomic_read(&timer_list->active_timers)) {
> return false;
> }
>
> diff --git a/util/qht.c b/util/qht.c
> index b2e020c398..079605121b 100644
> --- a/util/qht.c
> +++ b/util/qht.c
> @@ -131,11 +131,11 @@ static inline void qht_unlock(struct qht *ht)
>
> /*
> * Note: reading partially-updated pointers in @pointers could lead to
> - * segfaults. We thus access them with atomic_read/set; this guarantees
> + * segfaults. We thus access them with qatomic_read/set; this guarantees
> * that the compiler makes all those accesses atomic. We also need the
> - * volatile-like behavior in atomic_read, since otherwise the compiler
> + * volatile-like behavior in qatomic_read, since otherwise the compiler
> * might refetch the pointer.
> - * atomic_read's are of course not necessary when the bucket lock is held.
> + * qatomic_read's are of course not necessary when the bucket lock is held.
> *
> * If both ht->lock and b->lock are grabbed, ht->lock should always
> * be grabbed first.
> @@ -286,7 +286,7 @@ void qht_map_lock_buckets__no_stale(struct qht *ht, struct qht_map **pmap)
> {
> struct qht_map *map;
>
> - map = atomic_rcu_read(&ht->map);
> + map = qatomic_rcu_read(&ht->map);
> qht_map_lock_buckets(map);
> if (likely(!qht_map_is_stale__locked(ht, map))) {
> *pmap = map;
> @@ -318,7 +318,7 @@ struct qht_bucket *qht_bucket_lock__no_stale(struct qht *ht, uint32_t hash,
> struct qht_bucket *b;
> struct qht_map *map;
>
> - map = atomic_rcu_read(&ht->map);
> + map = qatomic_rcu_read(&ht->map);
> b = qht_map_to_bucket(map, hash);
>
> qemu_spin_lock(&b->lock);
> @@ -340,7 +340,8 @@ struct qht_bucket *qht_bucket_lock__no_stale(struct qht *ht, uint32_t hash,
>
> static inline bool qht_map_needs_resize(const struct qht_map *map)
> {
> - return atomic_read(&map->n_added_buckets) > map->n_added_buckets_threshold;
> + return qatomic_read(&map->n_added_buckets) >
> + map->n_added_buckets_threshold;
> }
>
> static inline void qht_chain_destroy(const struct qht_bucket *head)
> @@ -404,7 +405,7 @@ void qht_init(struct qht *ht, qht_cmp_func_t cmp, size_t n_elems,
> ht->mode = mode;
> qemu_mutex_init(&ht->lock);
> map = qht_map_create(n_buckets);
> - atomic_rcu_set(&ht->map, map);
> + qatomic_rcu_set(&ht->map, map);
> }
>
> /* call only when there are no readers/writers left */
> @@ -425,8 +426,8 @@ static void qht_bucket_reset__locked(struct qht_bucket *head)
> if (b->pointers[i] == NULL) {
> goto done;
> }
> - atomic_set(&b->hashes[i], 0);
> - atomic_set(&b->pointers[i], NULL);
> + qatomic_set(&b->hashes[i], 0);
> + qatomic_set(&b->pointers[i], NULL);
> }
> b = b->next;
> } while (b);
> @@ -492,19 +493,19 @@ void *qht_do_lookup(const struct qht_bucket *head, qht_lookup_func_t func,
>
> do {
> for (i = 0; i < QHT_BUCKET_ENTRIES; i++) {
> - if (atomic_read(&b->hashes[i]) == hash) {
> + if (qatomic_read(&b->hashes[i]) == hash) {
> /* The pointer is dereferenced before seqlock_read_retry,
> * so (unlike qht_insert__locked) we need to use
> - * atomic_rcu_read here.
> + * qatomic_rcu_read here.
> */
> - void *p = atomic_rcu_read(&b->pointers[i]);
> + void *p = qatomic_rcu_read(&b->pointers[i]);
>
> if (likely(p) && likely(func(p, userp))) {
> return p;
> }
> }
> }
> - b = atomic_rcu_read(&b->next);
> + b = qatomic_rcu_read(&b->next);
> } while (b);
>
> return NULL;
> @@ -532,7 +533,7 @@ void *qht_lookup_custom(const struct qht *ht, const void *userp, uint32_t hash,
> unsigned int version;
> void *ret;
>
> - map = atomic_rcu_read(&ht->map);
> + map = qatomic_rcu_read(&ht->map);
> b = qht_map_to_bucket(map, hash);
>
> version = seqlock_read_begin(&b->sequence);
> @@ -584,7 +585,7 @@ static void *qht_insert__locked(const struct qht *ht, struct qht_map *map,
> memset(b, 0, sizeof(*b));
> new = b;
> i = 0;
> - atomic_inc(&map->n_added_buckets);
> + qatomic_inc(&map->n_added_buckets);
> if (unlikely(qht_map_needs_resize(map)) && needs_resize) {
> *needs_resize = true;
> }
> @@ -593,11 +594,11 @@ static void *qht_insert__locked(const struct qht *ht, struct qht_map *map,
> /* found an empty key: acquire the seqlock and write */
> seqlock_write_begin(&head->sequence);
> if (new) {
> - atomic_rcu_set(&prev->next, b);
> + qatomic_rcu_set(&prev->next, b);
> }
> /* smp_wmb() implicit in seqlock_write_begin. */
> - atomic_set(&b->hashes[i], hash);
> - atomic_set(&b->pointers[i], p);
> + qatomic_set(&b->hashes[i], hash);
> + qatomic_set(&b->pointers[i], p);
> seqlock_write_end(&head->sequence);
> return NULL;
> }
> @@ -668,11 +669,11 @@ qht_entry_move(struct qht_bucket *to, int i, struct qht_bucket *from, int j)
> qht_debug_assert(to->pointers[i]);
> qht_debug_assert(from->pointers[j]);
>
> - atomic_set(&to->hashes[i], from->hashes[j]);
> - atomic_set(&to->pointers[i], from->pointers[j]);
> + qatomic_set(&to->hashes[i], from->hashes[j]);
> + qatomic_set(&to->pointers[i], from->pointers[j]);
>
> - atomic_set(&from->hashes[j], 0);
> - atomic_set(&from->pointers[j], NULL);
> + qatomic_set(&from->hashes[j], 0);
> + qatomic_set(&from->pointers[j], NULL);
> }
>
> /*
> @@ -687,7 +688,7 @@ static inline void qht_bucket_remove_entry(struct qht_bucket *orig, int pos)
>
> if (qht_entry_is_last(orig, pos)) {
> orig->hashes[pos] = 0;
> - atomic_set(&orig->pointers[pos], NULL);
> + qatomic_set(&orig->pointers[pos], NULL);
> return;
> }
> do {
> @@ -803,7 +804,7 @@ do_qht_iter(struct qht *ht, const struct qht_iter *iter, void *userp)
> {
> struct qht_map *map;
>
> - map = atomic_rcu_read(&ht->map);
> + map = qatomic_rcu_read(&ht->map);
> qht_map_lock_buckets(map);
> qht_map_iter__all_locked(map, iter, userp);
> qht_map_unlock_buckets(map);
> @@ -876,7 +877,7 @@ static void qht_do_resize_reset(struct qht *ht, struct qht_map *new, bool reset)
> qht_map_iter__all_locked(old, &iter, &data);
> qht_map_debug__all_locked(new);
>
> - atomic_rcu_set(&ht->map, new);
> + qatomic_rcu_set(&ht->map, new);
> qht_map_unlock_buckets(old);
> call_rcu(old, qht_map_destroy, rcu);
> }
> @@ -905,7 +906,7 @@ void qht_statistics_init(const struct qht *ht, struct qht_stats *stats)
> const struct qht_map *map;
> int i;
>
> - map = atomic_rcu_read(&ht->map);
> + map = qatomic_rcu_read(&ht->map);
>
> stats->used_head_buckets = 0;
> stats->entries = 0;
> @@ -933,13 +934,13 @@ void qht_statistics_init(const struct qht *ht, struct qht_stats *stats)
> b = head;
> do {
> for (j = 0; j < QHT_BUCKET_ENTRIES; j++) {
> - if (atomic_read(&b->pointers[j]) == NULL) {
> + if (qatomic_read(&b->pointers[j]) == NULL) {
> break;
> }
> entries++;
> }
> buckets++;
> - b = atomic_rcu_read(&b->next);
> + b = qatomic_rcu_read(&b->next);
> } while (b);
> } while (seqlock_read_retry(&head->sequence, version));
>
> diff --git a/util/qsp.c b/util/qsp.c
> index 7d5147f1b2..bacc5fa2f6 100644
> --- a/util/qsp.c
> +++ b/util/qsp.c
> @@ -245,11 +245,11 @@ static void qsp_do_init(void)
>
> static __attribute__((noinline)) void qsp_init__slowpath(void)
> {
> - if (atomic_cmpxchg(&qsp_initializing, false, true) == false) {
> + if (qatomic_cmpxchg(&qsp_initializing, false, true) == false) {
> qsp_do_init();
> - atomic_set(&qsp_initialized, true);
> + qatomic_set(&qsp_initialized, true);
> } else {
> - while (!atomic_read(&qsp_initialized)) {
> + while (!qatomic_read(&qsp_initialized)) {
> cpu_relax();
> }
> }
> @@ -258,7 +258,7 @@ static __attribute__((noinline)) void qsp_init__slowpath(void)
> /* qsp_init() must be called from _all_ exported functions */
> static inline void qsp_init(void)
> {
> - if (likely(atomic_read(&qsp_initialized))) {
> + if (likely(qatomic_read(&qsp_initialized))) {
> return;
> }
> qsp_init__slowpath();
> @@ -346,9 +346,9 @@ static QSPEntry *qsp_entry_get(const void *obj, const char *file, int line,
> */
> static inline void do_qsp_entry_record(QSPEntry *e, int64_t delta, bool acq)
> {
> - atomic_set_u64(&e->ns, e->ns + delta);
> + qatomic_set_u64(&e->ns, e->ns + delta);
> if (acq) {
> - atomic_set_u64(&e->n_acqs, e->n_acqs + 1);
> + qatomic_set_u64(&e->n_acqs, e->n_acqs + 1);
> }
> }
>
> @@ -432,29 +432,29 @@ qsp_cond_timedwait(QemuCond *cond, QemuMutex *mutex, int ms,
>
> bool qsp_is_enabled(void)
> {
> - return atomic_read(&qemu_mutex_lock_func) == qsp_mutex_lock;
> + return qatomic_read(&qemu_mutex_lock_func) == qsp_mutex_lock;
> }
>
> void qsp_enable(void)
> {
> - atomic_set(&qemu_mutex_lock_func, qsp_mutex_lock);
> - atomic_set(&qemu_mutex_trylock_func, qsp_mutex_trylock);
> - atomic_set(&qemu_bql_mutex_lock_func, qsp_bql_mutex_lock);
> - atomic_set(&qemu_rec_mutex_lock_func, qsp_rec_mutex_lock);
> - atomic_set(&qemu_rec_mutex_trylock_func, qsp_rec_mutex_trylock);
> - atomic_set(&qemu_cond_wait_func, qsp_cond_wait);
> - atomic_set(&qemu_cond_timedwait_func, qsp_cond_timedwait);
> + qatomic_set(&qemu_mutex_lock_func, qsp_mutex_lock);
> + qatomic_set(&qemu_mutex_trylock_func, qsp_mutex_trylock);
> + qatomic_set(&qemu_bql_mutex_lock_func, qsp_bql_mutex_lock);
> + qatomic_set(&qemu_rec_mutex_lock_func, qsp_rec_mutex_lock);
> + qatomic_set(&qemu_rec_mutex_trylock_func, qsp_rec_mutex_trylock);
> + qatomic_set(&qemu_cond_wait_func, qsp_cond_wait);
> + qatomic_set(&qemu_cond_timedwait_func, qsp_cond_timedwait);
> }
>
> void qsp_disable(void)
> {
> - atomic_set(&qemu_mutex_lock_func, qemu_mutex_lock_impl);
> - atomic_set(&qemu_mutex_trylock_func, qemu_mutex_trylock_impl);
> - atomic_set(&qemu_bql_mutex_lock_func, qemu_mutex_lock_impl);
> - atomic_set(&qemu_rec_mutex_lock_func, qemu_rec_mutex_lock_impl);
> - atomic_set(&qemu_rec_mutex_trylock_func, qemu_rec_mutex_trylock_impl);
> - atomic_set(&qemu_cond_wait_func, qemu_cond_wait_impl);
> - atomic_set(&qemu_cond_timedwait_func, qemu_cond_timedwait_impl);
> + qatomic_set(&qemu_mutex_lock_func, qemu_mutex_lock_impl);
> + qatomic_set(&qemu_mutex_trylock_func, qemu_mutex_trylock_impl);
> + qatomic_set(&qemu_bql_mutex_lock_func, qemu_mutex_lock_impl);
> + qatomic_set(&qemu_rec_mutex_lock_func, qemu_rec_mutex_lock_impl);
> + qatomic_set(&qemu_rec_mutex_trylock_func, qemu_rec_mutex_trylock_impl);
> + qatomic_set(&qemu_cond_wait_func, qemu_cond_wait_impl);
> + qatomic_set(&qemu_cond_timedwait_func, qemu_cond_timedwait_impl);
> }
>
> static gint qsp_tree_cmp(gconstpointer ap, gconstpointer bp, gpointer up)
> @@ -538,8 +538,8 @@ static void qsp_aggregate(void *p, uint32_t h, void *up)
> * The entry is in the global hash table; read from it atomically (as in
> * "read once").
> */
> - agg->ns += atomic_read_u64(&e->ns);
> - agg->n_acqs += atomic_read_u64(&e->n_acqs);
> + agg->ns += qatomic_read_u64(&e->ns);
> + agg->n_acqs += qatomic_read_u64(&e->n_acqs);
> }
>
> static void qsp_iter_diff(void *p, uint32_t hash, void *htp)
> @@ -610,7 +610,7 @@ static void qsp_mktree(GTree *tree, bool callsite_coalesce)
> * with the snapshot.
> */
> WITH_RCU_READ_LOCK_GUARD() {
> - QSPSnapshot *snap = atomic_rcu_read(&qsp_snapshot);
> + QSPSnapshot *snap = qatomic_rcu_read(&qsp_snapshot);
>
> /* Aggregate all results from the global hash table into a local one */
> qht_init(&ht, qsp_entry_no_thread_cmp, QSP_INITIAL_SIZE,
> @@ -806,7 +806,7 @@ void qsp_reset(void)
> qht_iter(&qsp_ht, qsp_aggregate, &new->ht);
>
> /* replace the previous snapshot, if any */
> - old = atomic_xchg(&qsp_snapshot, new);
> + old = qatomic_xchg(&qsp_snapshot, new);
> if (old) {
> call_rcu(old, qsp_snapshot_destroy, rcu);
> }
> diff --git a/util/rcu.c b/util/rcu.c
> index c4fefa9333..13ac0f75cb 100644
> --- a/util/rcu.c
> +++ b/util/rcu.c
> @@ -57,7 +57,7 @@ static inline int rcu_gp_ongoing(unsigned long *ctr)
> {
> unsigned long v;
>
> - v = atomic_read(ctr);
> + v = qatomic_read(ctr);
> return v && (v != rcu_gp_ctr);
> }
>
> @@ -82,14 +82,14 @@ static void wait_for_readers(void)
> */
> qemu_event_reset(&rcu_gp_event);
>
> - /* Instead of using atomic_mb_set for index->waiting, and
> - * atomic_mb_read for index->ctr, memory barriers are placed
> + /* Instead of using qatomic_mb_set for index->waiting, and
> + * qatomic_mb_read for index->ctr, memory barriers are placed
> * manually since writes to different threads are independent.
> * qemu_event_reset has acquire semantics, so no memory barrier
> * is needed here.
> */
> QLIST_FOREACH(index, ®istry, node) {
> - atomic_set(&index->waiting, true);
> + qatomic_set(&index->waiting, true);
> }
>
> /* Here, order the stores to index->waiting before the loads of
> @@ -106,7 +106,7 @@ static void wait_for_readers(void)
> /* No need for mb_set here, worst of all we
> * get some extra futex wakeups.
> */
> - atomic_set(&index->waiting, false);
> + qatomic_set(&index->waiting, false);
> }
> }
>
> @@ -151,7 +151,7 @@ void synchronize_rcu(void)
>
> QEMU_LOCK_GUARD(&rcu_registry_lock);
> if (!QLIST_EMPTY(®istry)) {
> - /* In either case, the atomic_mb_set below blocks stores that free
> + /* In either case, the qatomic_mb_set below blocks stores that free
> * old RCU-protected pointers.
> */
> if (sizeof(rcu_gp_ctr) < 8) {
> @@ -160,12 +160,12 @@ void synchronize_rcu(void)
> *
> * Switch parity: 0 -> 1, 1 -> 0.
> */
> - atomic_mb_set(&rcu_gp_ctr, rcu_gp_ctr ^ RCU_GP_CTR);
> + qatomic_mb_set(&rcu_gp_ctr, rcu_gp_ctr ^ RCU_GP_CTR);
> wait_for_readers();
> - atomic_mb_set(&rcu_gp_ctr, rcu_gp_ctr ^ RCU_GP_CTR);
> + qatomic_mb_set(&rcu_gp_ctr, rcu_gp_ctr ^ RCU_GP_CTR);
> } else {
> /* Increment current grace period. */
> - atomic_mb_set(&rcu_gp_ctr, rcu_gp_ctr + RCU_GP_CTR);
> + qatomic_mb_set(&rcu_gp_ctr, rcu_gp_ctr + RCU_GP_CTR);
> }
>
> wait_for_readers();
> @@ -188,8 +188,8 @@ static void enqueue(struct rcu_head *node)
> struct rcu_head **old_tail;
>
> node->next = NULL;
> - old_tail = atomic_xchg(&tail, &node->next);
> - atomic_mb_set(old_tail, node);
> + old_tail = qatomic_xchg(&tail, &node->next);
> + qatomic_mb_set(old_tail, node);
> }
>
> static struct rcu_head *try_dequeue(void)
> @@ -203,7 +203,7 @@ retry:
> * The tail, because it is the first step in the enqueuing.
> * It is only the next pointers that might be inconsistent.
> */
> - if (head == &dummy && atomic_mb_read(&tail) == &dummy.next) {
> + if (head == &dummy && qatomic_mb_read(&tail) == &dummy.next) {
> abort();
> }
>
> @@ -211,7 +211,7 @@ retry:
> * wrong and we need to wait until its enqueuer finishes the update.
> */
> node = head;
> - next = atomic_mb_read(&head->next);
> + next = qatomic_mb_read(&head->next);
> if (!next) {
> return NULL;
> }
> @@ -240,7 +240,7 @@ static void *call_rcu_thread(void *opaque)
>
> for (;;) {
> int tries = 0;
> - int n = atomic_read(&rcu_call_count);
> + int n = qatomic_read(&rcu_call_count);
>
> /* Heuristically wait for a decent number of callbacks to pile up.
> * Fetch rcu_call_count now, we only must process elements that were
> @@ -250,7 +250,7 @@ static void *call_rcu_thread(void *opaque)
> g_usleep(10000);
> if (n == 0) {
> qemu_event_reset(&rcu_call_ready_event);
> - n = atomic_read(&rcu_call_count);
> + n = qatomic_read(&rcu_call_count);
> if (n == 0) {
> #if defined(CONFIG_MALLOC_TRIM)
> malloc_trim(4 * 1024 * 1024);
> @@ -258,10 +258,10 @@ static void *call_rcu_thread(void *opaque)
> qemu_event_wait(&rcu_call_ready_event);
> }
> }
> - n = atomic_read(&rcu_call_count);
> + n = qatomic_read(&rcu_call_count);
> }
>
> - atomic_sub(&rcu_call_count, n);
> + qatomic_sub(&rcu_call_count, n);
> synchronize_rcu();
> qemu_mutex_lock_iothread();
> while (n > 0) {
> @@ -289,7 +289,7 @@ void call_rcu1(struct rcu_head *node, void (*func)(struct rcu_head *node))
> {
> node->func = func;
> enqueue(node);
> - atomic_inc(&rcu_call_count);
> + qatomic_inc(&rcu_call_count);
> qemu_event_set(&rcu_call_ready_event);
> }
>
> diff --git a/util/stats64.c b/util/stats64.c
> index 389c365a9e..897613c949 100644
> --- a/util/stats64.c
> +++ b/util/stats64.c
> @@ -18,27 +18,27 @@
> static inline void stat64_rdlock(Stat64 *s)
> {
> /* Keep out incoming writers to avoid them starving us. */
> - atomic_add(&s->lock, 2);
> + qatomic_add(&s->lock, 2);
>
> /* If there is a concurrent writer, wait for it. */
> - while (atomic_read(&s->lock) & 1) {
> + while (qatomic_read(&s->lock) & 1) {
> cpu_relax();
> }
> }
>
> static inline void stat64_rdunlock(Stat64 *s)
> {
> - atomic_sub(&s->lock, 2);
> + qatomic_sub(&s->lock, 2);
> }
>
> static inline bool stat64_wrtrylock(Stat64 *s)
> {
> - return atomic_cmpxchg(&s->lock, 0, 1) == 0;
> + return qatomic_cmpxchg(&s->lock, 0, 1) == 0;
> }
>
> static inline void stat64_wrunlock(Stat64 *s)
> {
> - atomic_dec(&s->lock);
> + qatomic_dec(&s->lock);
> }
>
> uint64_t stat64_get(const Stat64 *s)
> @@ -50,8 +50,8 @@ uint64_t stat64_get(const Stat64 *s)
> /* 64-bit writes always take the lock, so we can read in
> * any order.
> */
> - high = atomic_read(&s->high);
> - low = atomic_read(&s->low);
> + high = qatomic_read(&s->high);
> + low = qatomic_read(&s->low);
> stat64_rdunlock((Stat64 *)s);
>
> return ((uint64_t)high << 32) | low;
> @@ -70,9 +70,9 @@ bool stat64_add32_carry(Stat64 *s, uint32_t low, uint32_t high)
> * order of our update. By updating s->low first, we can check
> * whether we have to carry into s->high.
> */
> - old = atomic_fetch_add(&s->low, low);
> + old = qatomic_fetch_add(&s->low, low);
> high += (old + low) < old;
> - atomic_add(&s->high, high);
> + qatomic_add(&s->high, high);
> stat64_wrunlock(s);
> return true;
> }
> @@ -87,8 +87,8 @@ bool stat64_min_slow(Stat64 *s, uint64_t value)
> return false;
> }
>
> - high = atomic_read(&s->high);
> - low = atomic_read(&s->low);
> + high = qatomic_read(&s->high);
> + low = qatomic_read(&s->low);
>
> orig = ((uint64_t)high << 32) | low;
> if (value < orig) {
> @@ -98,9 +98,9 @@ bool stat64_min_slow(Stat64 *s, uint64_t value)
> * effect on stat64_min is that the slow path may be triggered
> * unnecessarily.
> */
> - atomic_set(&s->low, (uint32_t)value);
> + qatomic_set(&s->low, (uint32_t)value);
> smp_wmb();
> - atomic_set(&s->high, value >> 32);
> + qatomic_set(&s->high, value >> 32);
> }
> stat64_wrunlock(s);
> return true;
> @@ -116,8 +116,8 @@ bool stat64_max_slow(Stat64 *s, uint64_t value)
> return false;
> }
>
> - high = atomic_read(&s->high);
> - low = atomic_read(&s->low);
> + high = qatomic_read(&s->high);
> + low = qatomic_read(&s->low);
>
> orig = ((uint64_t)high << 32) | low;
> if (value > orig) {
> @@ -127,9 +127,9 @@ bool stat64_max_slow(Stat64 *s, uint64_t value)
> * effect on stat64_max is that the slow path may be triggered
> * unnecessarily.
> */
> - atomic_set(&s->low, (uint32_t)value);
> + qatomic_set(&s->low, (uint32_t)value);
> smp_wmb();
> - atomic_set(&s->high, value >> 32);
> + qatomic_set(&s->high, value >> 32);
> }
> stat64_wrunlock(s);
> return true;
> diff --git a/docs/devel/atomics.rst b/docs/devel/atomics.rst
> index 445c3b3503..52baa0736d 100644
> --- a/docs/devel/atomics.rst
> +++ b/docs/devel/atomics.rst
> @@ -23,9 +23,9 @@ provides macros that fall in three camps:
>
> - compiler barriers: ``barrier()``;
>
> -- weak atomic access and manual memory barriers: ``atomic_read()``,
> - ``atomic_set()``, ``smp_rmb()``, ``smp_wmb()``, ``smp_mb()``, ``smp_mb_acquire()``,
> - ``smp_mb_release()``, ``smp_read_barrier_depends()``;
> +- weak atomic access and manual memory barriers: ``qatomic_read()``,
> + ``qatomic_set()``, ``smp_rmb()``, ``smp_wmb()``, ``smp_mb()``,
> + ``smp_mb_acquire()``, ``smp_mb_release()``, ``smp_read_barrier_depends()``;
>
> - sequentially consistent atomic access: everything else.
>
> @@ -67,23 +67,23 @@ in the order specified by its program".
> ``qemu/atomic.h`` provides the following set of atomic read-modify-write
> operations::
>
> - void atomic_inc(ptr)
> - void atomic_dec(ptr)
> - void atomic_add(ptr, val)
> - void atomic_sub(ptr, val)
> - void atomic_and(ptr, val)
> - void atomic_or(ptr, val)
> + void qatomic_inc(ptr)
> + void qatomic_dec(ptr)
> + void qatomic_add(ptr, val)
> + void qatomic_sub(ptr, val)
> + void qatomic_and(ptr, val)
> + void qatomic_or(ptr, val)
>
> - typeof(*ptr) atomic_fetch_inc(ptr)
> - typeof(*ptr) atomic_fetch_dec(ptr)
> - typeof(*ptr) atomic_fetch_add(ptr, val)
> - typeof(*ptr) atomic_fetch_sub(ptr, val)
> - typeof(*ptr) atomic_fetch_and(ptr, val)
> - typeof(*ptr) atomic_fetch_or(ptr, val)
> - typeof(*ptr) atomic_fetch_xor(ptr, val)
> - typeof(*ptr) atomic_fetch_inc_nonzero(ptr)
> - typeof(*ptr) atomic_xchg(ptr, val)
> - typeof(*ptr) atomic_cmpxchg(ptr, old, new)
> + typeof(*ptr) qatomic_fetch_inc(ptr)
> + typeof(*ptr) qatomic_fetch_dec(ptr)
> + typeof(*ptr) qatomic_fetch_add(ptr, val)
> + typeof(*ptr) qatomic_fetch_sub(ptr, val)
> + typeof(*ptr) qatomic_fetch_and(ptr, val)
> + typeof(*ptr) qatomic_fetch_or(ptr, val)
> + typeof(*ptr) qatomic_fetch_xor(ptr, val)
> + typeof(*ptr) qatomic_fetch_inc_nonzero(ptr)
> + typeof(*ptr) qatomic_xchg(ptr, val)
> + typeof(*ptr) qatomic_cmpxchg(ptr, old, new)
>
> all of which return the old value of ``*ptr``. These operations are
> polymorphic; they operate on any type that is as wide as a pointer or
> @@ -91,19 +91,19 @@ smaller.
>
> Similar operations return the new value of ``*ptr``::
>
> - typeof(*ptr) atomic_inc_fetch(ptr)
> - typeof(*ptr) atomic_dec_fetch(ptr)
> - typeof(*ptr) atomic_add_fetch(ptr, val)
> - typeof(*ptr) atomic_sub_fetch(ptr, val)
> - typeof(*ptr) atomic_and_fetch(ptr, val)
> - typeof(*ptr) atomic_or_fetch(ptr, val)
> - typeof(*ptr) atomic_xor_fetch(ptr, val)
> + typeof(*ptr) qatomic_inc_fetch(ptr)
> + typeof(*ptr) qatomic_dec_fetch(ptr)
> + typeof(*ptr) qatomic_add_fetch(ptr, val)
> + typeof(*ptr) qatomic_sub_fetch(ptr, val)
> + typeof(*ptr) qatomic_and_fetch(ptr, val)
> + typeof(*ptr) qatomic_or_fetch(ptr, val)
> + typeof(*ptr) qatomic_xor_fetch(ptr, val)
>
> ``qemu/atomic.h`` also provides loads and stores that cannot be reordered
> with each other::
>
> - typeof(*ptr) atomic_mb_read(ptr)
> - void atomic_mb_set(ptr, val)
> + typeof(*ptr) qatomic_mb_read(ptr)
> + void qatomic_mb_set(ptr, val)
>
> However these do not provide sequential consistency and, in particular,
> they do not participate in the total ordering enforced by
> @@ -115,11 +115,11 @@ easiest to hardest):
>
> - lightweight synchronization primitives such as ``QemuEvent``
>
> -- RCU operations (``atomic_rcu_read``, ``atomic_rcu_set``) when publishing
> +- RCU operations (``qatomic_rcu_read``, ``qatomic_rcu_set``) when publishing
> or accessing a new version of a data structure
>
> -- other atomic accesses: ``atomic_read`` and ``atomic_load_acquire`` for
> - loads, ``atomic_set`` and ``atomic_store_release`` for stores, ``smp_mb``
> +- other atomic accesses: ``qatomic_read`` and ``qatomic_load_acquire`` for
> + loads, ``qatomic_set`` and ``qatomic_store_release`` for stores, ``smp_mb``
> to forbid reordering subsequent loads before a store.
>
>
> @@ -149,22 +149,22 @@ The only guarantees that you can rely upon in this case are:
>
> When using this model, variables are accessed with:
>
> -- ``atomic_read()`` and ``atomic_set()``; these prevent the compiler from
> +- ``qatomic_read()`` and ``qatomic_set()``; these prevent the compiler from
> optimizing accesses out of existence and creating unsolicited
> accesses, but do not otherwise impose any ordering on loads and
> stores: both the compiler and the processor are free to reorder
> them.
>
> -- ``atomic_load_acquire()``, which guarantees the LOAD to appear to
> +- ``qatomic_load_acquire()``, which guarantees the LOAD to appear to
> happen, with respect to the other components of the system,
> before all the LOAD or STORE operations specified afterwards.
> - Operations coming before ``atomic_load_acquire()`` can still be
> + Operations coming before ``qatomic_load_acquire()`` can still be
> reordered after it.
>
> -- ``atomic_store_release()``, which guarantees the STORE to appear to
> +- ``qatomic_store_release()``, which guarantees the STORE to appear to
> happen, with respect to the other components of the system,
> after all the LOAD or STORE operations specified before.
> - Operations coming after ``atomic_store_release()`` can still be
> + Operations coming after ``qatomic_store_release()`` can still be
> reordered before it.
>
> Restrictions to the ordering of accesses can also be specified
> @@ -229,7 +229,7 @@ They come in six kinds:
> dependency and a full read barrier or better is required.
>
>
> -Memory barriers and ``atomic_load_acquire``/``atomic_store_release`` are
> +Memory barriers and ``qatomic_load_acquire``/``qatomic_store_release`` are
> mostly used when a data structure has one thread that is always a writer
> and one thread that is always a reader:
>
> @@ -238,8 +238,8 @@ and one thread that is always a reader:
> +==================================+==================================+
> | :: | :: |
> | | |
> - | atomic_store_release(&a, x); | y = atomic_load_acquire(&b); |
> - | atomic_store_release(&b, y); | x = atomic_load_acquire(&a); |
> + | qatomic_store_release(&a, x); | y = qatomic_load_acquire(&b); |
> + | qatomic_store_release(&b, y); | x = qatomic_load_acquire(&a); |
> +----------------------------------+----------------------------------+
>
> In this case, correctness is easy to check for using the "pairing"
> @@ -258,14 +258,14 @@ outside a loop. For example:
> | | |
> | n = 0; | n = 0; |
> | for (i = 0; i < 10; i++) | for (i = 0; i < 10; i++) |
> - | n += atomic_load_acquire(&a[i]); | n += atomic_read(&a[i]); |
> + | n += qatomic_load_acquire(&a[i]); | n += qatomic_read(&a[i]); |
> | | smp_mb_acquire(); |
> +------------------------------------------+----------------------------------+
> | :: | :: |
> | | |
> | | smp_mb_release(); |
> | for (i = 0; i < 10; i++) | for (i = 0; i < 10; i++) |
> - | atomic_store_release(&a[i], false); | atomic_set(&a[i], false); |
> + | qatomic_store_release(&a[i], false); | qatomic_set(&a[i], false); |
> +------------------------------------------+----------------------------------+
>
> Splitting a loop can also be useful to reduce the number of barriers:
> @@ -277,11 +277,11 @@ Splitting a loop can also be useful to reduce the number of barriers:
> | | |
> | n = 0; | smp_mb_release(); |
> | for (i = 0; i < 10; i++) { | for (i = 0; i < 10; i++) |
> - | atomic_store_release(&a[i], false); | atomic_set(&a[i], false); |
> + | qatomic_store_release(&a[i], false); | qatomic_set(&a[i], false); |
> | smp_mb(); | smb_mb(); |
> - | n += atomic_read(&b[i]); | n = 0; |
> + | n += qatomic_read(&b[i]); | n = 0; |
> | } | for (i = 0; i < 10; i++) |
> - | | n += atomic_read(&b[i]); |
> + | | n += qatomic_read(&b[i]); |
> +------------------------------------------+----------------------------------+
>
> In this case, a ``smp_mb_release()`` is also replaced with a (possibly cheaper, and clearer
> @@ -294,10 +294,10 @@ as well) ``smp_wmb()``:
> | | |
> | | smp_mb_release(); |
> | for (i = 0; i < 10; i++) { | for (i = 0; i < 10; i++) |
> - | atomic_store_release(&a[i], false); | atomic_set(&a[i], false); |
> - | atomic_store_release(&b[i], false); | smb_wmb(); |
> + | qatomic_store_release(&a[i], false); | qatomic_set(&a[i], false); |
> + | qatomic_store_release(&b[i], false); | smb_wmb(); |
> | } | for (i = 0; i < 10; i++) |
> - | | atomic_set(&b[i], false); |
> + | | qatomic_set(&b[i], false); |
> +------------------------------------------+----------------------------------+
>
>
> @@ -306,7 +306,7 @@ as well) ``smp_wmb()``:
> Acquire/release pairing and the *synchronizes-with* relation
> ------------------------------------------------------------
>
> -Atomic operations other than ``atomic_set()`` and ``atomic_read()`` have
> +Atomic operations other than ``qatomic_set()`` and ``qatomic_read()`` have
> either *acquire* or *release* semantics [#rmw]_. This has two effects:
>
> .. [#rmw] Read-modify-write operations can have both---acquire applies to the
> @@ -357,16 +357,16 @@ thread 2 is relying on the *synchronizes-with* relation between ``pthread_exit``
>
> Synchronization between threads basically descends from this pairing of
> a release operation and an acquire operation. Therefore, atomic operations
> -other than ``atomic_set()`` and ``atomic_read()`` will almost always be
> +other than ``qatomic_set()`` and ``qatomic_read()`` will almost always be
> paired with another operation of the opposite kind: an acquire operation
> will pair with a release operation and vice versa. This rule of thumb is
> extremely useful; in the case of QEMU, however, note that the other
> operation may actually be in a driver that runs in the guest!
>
> ``smp_read_barrier_depends()``, ``smp_rmb()``, ``smp_mb_acquire()``,
> -``atomic_load_acquire()`` and ``atomic_rcu_read()`` all count
> +``qatomic_load_acquire()`` and ``qatomic_rcu_read()`` all count
> as acquire operations. ``smp_wmb()``, ``smp_mb_release()``,
> -``atomic_store_release()`` and ``atomic_rcu_set()`` all count as release
> +``qatomic_store_release()`` and ``qatomic_rcu_set()`` all count as release
> operations. ``smp_mb()`` counts as both acquire and release, therefore
> it can pair with any other atomic operation. Here is an example:
>
> @@ -375,11 +375,11 @@ it can pair with any other atomic operation. Here is an example:
> +======================+==============================+
> | :: | :: |
> | | |
> - | atomic_set(&a, 1); | |
> + | qatomic_set(&a, 1);| |
> | smp_wmb(); | |
> - | atomic_set(&b, 2); | x = atomic_read(&b); |
> + | qatomic_set(&b, 2);| x = qatomic_read(&b); |
> | | smp_rmb(); |
> - | | y = atomic_read(&a); |
> + | | y = qatomic_read(&a); |
> +----------------------+------------------------------+
>
> Note that a load-store pair only counts if the two operations access the
> @@ -393,9 +393,9 @@ correct synchronization:
> +================================+================================+
> | :: | :: |
> | | |
> - | atomic_set(&a, 1); | |
> - | atomic_store_release(&b, 2); | x = atomic_load_acquire(&b); |
> - | | y = atomic_read(&a); |
> + | qatomic_set(&a, 1); | |
> + | qatomic_store_release(&b, 2);| x = qatomic_load_acquire(&b);|
> + | | y = qatomic_read(&a); |
> +--------------------------------+--------------------------------+
>
> Acquire and release semantics of higher-level primitives can also be
> @@ -421,7 +421,7 @@ cannot be a data race:
> | smp_wmb(); | |
> | x->i = 2; | |
> | smp_wmb(); | |
> - | atomic_set(&a, x); | x = atomic_read(&a); |
> + | qatomic_set(&a, x);| x = qatomic_read(&a); |
> | | smp_read_barrier_depends(); |
> | | y = x->i; |
> | | smp_read_barrier_depends(); |
> @@ -442,7 +442,7 @@ and memory barriers, and the equivalents in QEMU:
> at all. Linux 4.1 updated them to implement volatile
> semantics via ``ACCESS_ONCE`` (or the more recent ``READ``/``WRITE_ONCE``).
>
> - QEMU's ``atomic_read`` and ``atomic_set`` implement C11 atomic relaxed
> + QEMU's ``qatomic_read`` and ``qatomic_set`` implement C11 atomic relaxed
> semantics if the compiler supports it, and volatile semantics otherwise.
> Both semantics prevent the compiler from doing certain transformations;
> the difference is that atomic accesses are guaranteed to be atomic,
> @@ -451,8 +451,8 @@ and memory barriers, and the equivalents in QEMU:
> since we assume the variables passed are machine-word sized and
> properly aligned.
>
> - No barriers are implied by ``atomic_read`` and ``atomic_set`` in either Linux
> - or QEMU.
> + No barriers are implied by ``qatomic_read`` and ``qatomic_set`` in either
> + Linux or QEMU.
>
> - atomic read-modify-write operations in Linux are of three kinds:
>
> @@ -469,7 +469,7 @@ and memory barriers, and the equivalents in QEMU:
> a different set of memory barriers; in QEMU, all of them enforce
> sequential consistency.
>
> -- in QEMU, ``atomic_read()`` and ``atomic_set()`` do not participate in
> +- in QEMU, ``qatomic_read()`` and ``qatomic_set()`` do not participate in
> the total ordering enforced by sequentially-consistent operations.
> This is because QEMU uses the C11 memory model. The following example
> is correct in Linux but not in QEMU:
> @@ -479,8 +479,8 @@ and memory barriers, and the equivalents in QEMU:
> +==================================+================================+
> | :: | :: |
> | | |
> - | a = atomic_fetch_add(&x, 2); | a = atomic_fetch_add(&x, 2); |
> - | b = READ_ONCE(&y); | b = atomic_read(&y); |
> + | a = atomic_fetch_add(&x, 2); | a = qatomic_fetch_add(&x, 2);|
> + | b = READ_ONCE(&y); | b = qatomic_read(&y); |
> +----------------------------------+--------------------------------+
>
> because the read of ``y`` can be moved (by either the processor or the
> @@ -495,10 +495,10 @@ and memory barriers, and the equivalents in QEMU:
> +================================+
> | :: |
> | |
> - | a = atomic_read(&x); |
> - | atomic_set(&x, a + 2); |
> + | a = qatomic_read(&x); |
> + | qatomic_set(&x, a + 2); |
> | smp_mb(); |
> - | b = atomic_read(&y); |
> + | b = qatomic_read(&y); |
> +--------------------------------+
>
> Sources
> diff --git a/scripts/kernel-doc b/scripts/kernel-doc
> index 030b5c8691..40ad782e34 100755
> --- a/scripts/kernel-doc
> +++ b/scripts/kernel-doc
> @@ -1625,7 +1625,7 @@ sub dump_function($$) {
> # If you mess with these regexps, it's a good idea to check that
> # the following functions' documentation still comes out right:
> # - parport_register_device (function pointer parameters)
> - # - atomic_set (macro)
> + # - qatomic_set (macro)
> # - pci_match_device, __copy_to_user (long return type)
>
> if ($define && $prototype =~ m/^()([a-zA-Z0-9_~:]+)\s+/) {
> diff --git a/tcg/aarch64/tcg-target.c.inc b/tcg/aarch64/tcg-target.c.inc
> index 948c35d825..2607fe4ab9 100644
> --- a/tcg/aarch64/tcg-target.c.inc
> +++ b/tcg/aarch64/tcg-target.c.inc
> @@ -1365,7 +1365,7 @@ void tb_target_set_jmp_target(uintptr_t tc_ptr, uintptr_t jmp_addr,
> i2 = I3401_ADDI | rt << 31 | (addr & 0xfff) << 10 | rd << 5 | rd;
> }
> pair = (uint64_t)i2 << 32 | i1;
> - atomic_set((uint64_t *)jmp_addr, pair);
> + qatomic_set((uint64_t *)jmp_addr, pair);
> flush_icache_range(jmp_addr, jmp_addr + 8);
> }
>
> diff --git a/tcg/mips/tcg-target.c.inc b/tcg/mips/tcg-target.c.inc
> index bd5b8e09a0..7aa2073520 100644
> --- a/tcg/mips/tcg-target.c.inc
> +++ b/tcg/mips/tcg-target.c.inc
> @@ -2662,7 +2662,7 @@ static void tcg_target_init(TCGContext *s)
> void tb_target_set_jmp_target(uintptr_t tc_ptr, uintptr_t jmp_addr,
> uintptr_t addr)
> {
> - atomic_set((uint32_t *)jmp_addr, deposit32(OPC_J, 0, 26, addr >> 2));
> + qatomic_set((uint32_t *)jmp_addr, deposit32(OPC_J, 0, 26, addr >> 2));
> flush_icache_range(jmp_addr, jmp_addr + 4);
> }
>
> diff --git a/tcg/ppc/tcg-target.c.inc b/tcg/ppc/tcg-target.c.inc
> index 393c4b30e0..7cb40b0466 100644
> --- a/tcg/ppc/tcg-target.c.inc
> +++ b/tcg/ppc/tcg-target.c.inc
> @@ -1756,13 +1756,13 @@ void tb_target_set_jmp_target(uintptr_t tc_ptr, uintptr_t jmp_addr,
> #endif
>
> /* As per the enclosing if, this is ppc64. Avoid the _Static_assert
> - within atomic_set that would fail to build a ppc32 host. */
> - atomic_set__nocheck((uint64_t *)jmp_addr, pair);
> + within qatomic_set that would fail to build a ppc32 host. */
> + qatomic_set__nocheck((uint64_t *)jmp_addr, pair);
> flush_icache_range(jmp_addr, jmp_addr + 8);
> } else {
> intptr_t diff = addr - jmp_addr;
> tcg_debug_assert(in_range_b(diff));
> - atomic_set((uint32_t *)jmp_addr, B | (diff & 0x3fffffc));
> + qatomic_set((uint32_t *)jmp_addr, B | (diff & 0x3fffffc));
> flush_icache_range(jmp_addr, jmp_addr + 4);
> }
> }
> diff --git a/tcg/sparc/tcg-target.c.inc b/tcg/sparc/tcg-target.c.inc
> index 0f1d91fc21..40bc12290c 100644
> --- a/tcg/sparc/tcg-target.c.inc
> +++ b/tcg/sparc/tcg-target.c.inc
> @@ -1839,7 +1839,8 @@ void tb_target_set_jmp_target(uintptr_t tc_ptr, uintptr_t jmp_addr,
> tcg_debug_assert(br_disp == (int32_t)br_disp);
>
> if (!USE_REG_TB) {
> - atomic_set((uint32_t *)jmp_addr, deposit32(CALL, 0, 30, br_disp >> 2));
> + qatomic_set((uint32_t *)jmp_addr,
> + deposit32(CALL, 0, 30, br_disp >> 2));
> flush_icache_range(jmp_addr, jmp_addr + 4);
> return;
> }
> @@ -1863,6 +1864,6 @@ void tb_target_set_jmp_target(uintptr_t tc_ptr, uintptr_t jmp_addr,
> | INSN_IMM13((tb_disp & 0x3ff) | -0x400));
> }
>
> - atomic_set((uint64_t *)jmp_addr, deposit64(i2, 32, 32, i1));
> + qatomic_set((uint64_t *)jmp_addr, deposit64(i2, 32, 32, i1));
> flush_icache_range(jmp_addr, jmp_addr + 8);
> }
>
More information about the sheepdog
mailing list