On Wed, Sep 23, 2020 at 11:56:46AM +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 <stefanha@xxxxxxxxxx> > --- > 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 Thanks, applied quickly due to high risk of conflicts: https://github.com/stefanha/qemu/commits/block Stefan
Attachment:
signature.asc
Description: PGP signature