On Wed, Sep 23, 2020 at 05:10:31PM +0100, 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 <[email protected]>
> Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
> Acked-by: Paolo Bonzini <[email protected]>
> Message-Id: <[email protected]>
> ---
> 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 +-
Hi Stefan,
pvrdma_ring.h is an update-linux-headers.sh file. When running the
script again we lose the atomic_ to qatomic_ renaming. I've hacked
the script by adding
-e 's/\batomic_read/qatomic_read/g;s/\batomic_set/qatomic_set/g'
to the cp_portable() sed command, but only considering the two
qatomic_ functions currently used is obviously not a complete
solution.
Any ideas?
Thanks,
drew