[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 &sections[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(&region.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(&region.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, &registry, 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(&registry)) {
> -        /* 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