[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v7 00/35] cmpxchg-based emulation of atomics
From: |
Alex Bennée |
Subject: |
Re: [Qemu-devel] [PATCH v7 00/35] cmpxchg-based emulation of atomics |
Date: |
Thu, 20 Oct 2016 09:50:09 +0100 |
User-agent: |
mu4e 0.9.17; emacs 25.1.50.9 |
Richard Henderson <address@hidden> writes:
> I believe we're about ready for merge.
>
> Changes since v6:
> * atomic_add-bench update (Emilio).
> * Use atomic_load(__nocheck) prior to the cmpxchg in the
> reverse-endian atomic addition routines (Emilio).
> * tcg temp free-after-free in arm32 load_exclusive (Alex).
Testing is fine (I ran concurrency kits ARMv7 regression tests) but we
still seem to be having (different) problems with older compilers:
make address@hidden
gives:
CC util/qemu-thread-posix.o
In file included from /tmp/qemu-test/src/include/qom/cpu.h:29:0,
from /tmp/qemu-test/src/trace/control-internal.h:15,
from /tmp/qemu-test/src/trace/control.h:243,
from /tmp/qemu-test/src/trace/control.c:11:
/tmp/qemu-test/src/include/qemu/thread.h: In function ‘qemu_spin_lock’:
/tmp/qemu-test/src/include/qemu/thread.h:77:31: error: ‘ptr’ undeclared (first
use in this function)
/tmp/qemu-test/src/include/qemu/thread.h:77:31: note: each undeclared
identifier is reported only once for each function it appears in
/tmp/qemu-test/src/include/qemu/thread.h: In function ‘qemu_spin_locked’:
/tmp/qemu-test/src/include/qemu/thread.h:90:27: error: ‘ptr’ undeclared (first
use in this function)
In file included from /tmp/qemu-test/src/include/block/block.h:4:0,
from /tmp/qemu-test/src/include/monitor/monitor.h:6,
from /tmp/qemu-test/src/trace/control.c:28:
/tmp/qemu-test/src/include/block/aio.h: In function ‘aio_external_disabled’:
/tmp/qemu-test/src/include/block/aio.h:439:27: error: ‘ptr’ undeclared (first
use in this function)
In file included from /tmp/qemu-test/src/include/block/block.h:4:0,
from /tmp/qemu-test/src/include/monitor/monitor.h:6,
from /tmp/qemu-test/src/trace/control.c:28:
/tmp/qemu-test/src/include/block/aio.h: In function ‘aio_node_check’:
/tmp/qemu-test/src/include/block/aio.h:452:44: error: ‘ptr’ undeclared (first
use in this function)
make: *** [trace/control.o] Error 1
make: *** Waiting for unfinished jobs....
In file included from /tmp/qemu-test/src/include/block/aio.h:20:0,
from /tmp/qemu-test/src/include/block/block.h:4,
from /tmp/qemu-test/src/include/monitor/monitor.h:6,
from /tmp/qemu-test/src/util/osdep.c:39:
/tmp/qemu-test/src/include/qemu/thread.h: In function ‘qemu_spin_lock’:
/tmp/qemu-test/src/include/qemu/thread.h:77:31: error: ‘ptr’ undeclared (first
use in this function)
/tmp/qemu-test/src/include/qemu/thread.h:77:31: note: each undeclared
identifier is reported only once for each function it appears in
/tmp/qemu-test/src/include/qemu/thread.h: In function ‘qemu_spin_locked’:
/tmp/qemu-test/src/include/qemu/thread.h:90:27: error: ‘ptr’ undeclared (first
use in this function)
In file included from /tmp/qemu-test/src/include/block/block.h:4:0,
from /tmp/qemu-test/src/include/monitor/monitor.h:6,
from /tmp/qemu-test/src/util/osdep.c:39:
/tmp/qemu-test/src/include/block/aio.h: In function ‘aio_external_disabled’:
/tmp/qemu-test/src/include/block/aio.h:439:27: error: ‘ptr’ undeclared (first
use in this function)
In file included from /tmp/qemu-test/src/include/block/block.h:4:0,
from /tmp/qemu-test/src/include/monitor/monitor.h:6,
from /tmp/qemu-test/src/util/osdep.c:39:
/tmp/qemu-test/src/include/block/aio.h: In function ‘aio_node_check’:
/tmp/qemu-test/src/include/block/aio.h:452:44: error: ‘ptr’ undeclared (first
use in this function)
make: *** [util/osdep.o] Error 1
In file included from /tmp/qemu-test/src/include/qom/cpu.h:29:0,
from /tmp/qemu-test/src/trace/control-internal.h:15,
from /tmp/qemu-test/src/trace/control.h:243,
from /tmp/qemu-test/src/trace/qmp.c:12:
/tmp/qemu-test/src/include/qemu/thread.h: In function ‘qemu_spin_lock’:
/tmp/qemu-test/src/include/qemu/thread.h:77:31: error: ‘ptr’ undeclared (first
use in this function)
/tmp/qemu-test/src/include/qemu/thread.h:77:31: note: each undeclared
identifier is reported only once for each function it appears in
/tmp/qemu-test/src/include/qemu/thread.h: In function ‘qemu_spin_locked’:
/tmp/qemu-test/src/include/qemu/thread.h:90:27: error: ‘ptr’ undeclared (first
use in this function)
make: *** [trace/qmp.o] Error 1
In file included from /tmp/qemu-test/src/util/compatfd.c:19:0:
/tmp/qemu-test/src/include/qemu/thread.h: In function ‘qemu_spin_lock’:
/tmp/qemu-test/src/include/qemu/thread.h:77:31: error: ‘ptr’ undeclared (first
use in this function)
/tmp/qemu-test/src/include/qemu/thread.h:77:31: note: each undeclared
identifier is reported only once for each function it appears in
/tmp/qemu-test/src/include/qemu/thread.h: In function ‘qemu_spin_locked’:
/tmp/qemu-test/src/include/qemu/thread.h:90:27: error: ‘ptr’ undeclared (first
use in this function)
make: *** [util/compatfd.o] Error 1
In file included from /tmp/qemu-test/src/util/qemu-thread-posix.c:18:0:
/tmp/qemu-test/src/include/qemu/thread.h: In function ‘qemu_spin_lock’:
/tmp/qemu-test/src/include/qemu/thread.h:77:31: error: ‘ptr’ undeclared (first
use in this function)
/tmp/qemu-test/src/include/qemu/thread.h:77:31: note: each undeclared
identifier is reported only once for each function it appears in
/tmp/qemu-test/src/include/qemu/thread.h: In function ‘qemu_spin_locked’:
/tmp/qemu-test/src/include/qemu/thread.h:90:27: error: ‘ptr’ undeclared (first
use in this function)
/tmp/qemu-test/src/util/qemu-thread-posix.c: In function ‘qemu_event_set’:
/tmp/qemu-test/src/util/qemu-thread-posix.c:367:24: error: ‘ptr’ undeclared
(first use in this function)
/tmp/qemu-test/src/util/qemu-thread-posix.c: In function ‘qemu_event_reset’:
/tmp/qemu-test/src/util/qemu-thread-posix.c:379:28: error: ‘ptr’ undeclared
(first use in this function)
/tmp/qemu-test/src/util/qemu-thread-posix.c: In function ‘qemu_event_wait’:
/tmp/qemu-test/src/util/qemu-thread-posix.c:394:28: error: ‘ptr’ undeclared
(first use in this function)
make: *** [util/qemu-thread-posix.o] Error 1
In file included from /tmp/qemu-test/src/include/block/aio.h:20:0,
from /tmp/qemu-test/src/include/sysemu/char.h:8,
from /tmp/qemu-test/src/util/event_notifier-posix.c:17:
/tmp/qemu-test/src/include/qemu/thread.h: In function ‘qemu_spin_lock’:
/tmp/qemu-test/src/include/qemu/thread.h:77:31: error: ‘ptr’ undeclared (first
use in this function)
/tmp/qemu-test/src/include/qemu/thread.h:77:31: note: each undeclared
identifier is reported only once for each function it appears in
/tmp/qemu-test/src/include/qemu/thread.h: In function ‘qemu_spin_locked’:
/tmp/qemu-test/src/include/qemu/thread.h:90:27: error: ‘ptr’ undeclared (first
use in this function)
In file included from /tmp/qemu-test/src/include/sysemu/char.h:8:0,
from /tmp/qemu-test/src/util/event_notifier-posix.c:17:
/tmp/qemu-test/src/include/block/aio.h: In function ‘aio_external_disabled’:
/tmp/qemu-test/src/include/block/aio.h:439:27: error: ‘ptr’ undeclared (first
use in this function)
In file included from /tmp/qemu-test/src/include/sysemu/char.h:8:0,
from /tmp/qemu-test/src/util/event_notifier-posix.c:17:
/tmp/qemu-test/src/include/block/aio.h: In function ‘aio_node_check’:
/tmp/qemu-test/src/include/block/aio.h:452:44: error: ‘ptr’ undeclared (first
use in this function)
make: *** [util/event_notifier-posix.o] Error 1
In file included from /tmp/qemu-test/src/include/block/aio.h:20:0,
from /tmp/qemu-test/src/include/qemu/main-loop.h:28,
from /tmp/qemu-test/src/include/sysemu/sysemu.h:10,
from /tmp/qemu-test/src/util/oslib-posix.c:35:
/tmp/qemu-test/src/include/qemu/thread.h: In function ‘qemu_spin_lock’:
/tmp/qemu-test/src/include/qemu/thread.h:77:31: error: ‘ptr’ undeclared (first
use in this function)
/tmp/qemu-test/src/include/qemu/thread.h:77:31: note: each undeclared
identifier is reported only once for each function it appears in
/tmp/qemu-test/src/include/qemu/thread.h: In function ‘qemu_spin_locked’:
/tmp/qemu-test/src/include/qemu/thread.h:90:27: error: ‘ptr’ undeclared (first
use in this function)
In file included from /tmp/qemu-test/src/include/qemu/main-loop.h:28:0,
from /tmp/qemu-test/src/include/sysemu/sysemu.h:10,
from /tmp/qemu-test/src/util/oslib-posix.c:35:
/tmp/qemu-test/src/include/block/aio.h: In function ‘aio_external_disabled’:
/tmp/qemu-test/src/include/block/aio.h:439:27: error: ‘ptr’ undeclared (first
use in this function)
In file included from /tmp/qemu-test/src/include/qemu/main-loop.h:28:0,
from /tmp/qemu-test/src/include/sysemu/sysemu.h:10,
from /tmp/qemu-test/src/util/oslib-posix.c:35:
/tmp/qemu-test/src/include/block/aio.h: In function ‘aio_node_check’:
/tmp/qemu-test/src/include/block/aio.h:452:44: error: ‘ptr’ undeclared (first
use in this function)
make: *** [util/oslib-posix.o] Error 1
/home/alex/lsrc/qemu/qemu.git/tests/docker/Makefile.include:112: recipe for
target 'docker-run' failed
make[1]: *** [docker-run] Error 2
make[1]: Leaving directory '/home/alex/lsrc/qemu/qemu.git'
/home/alex/lsrc/qemu/qemu.git/tests/docker/Makefile.include:143: recipe for
target 'address@hidden' failed
make: *** address@hidden Error 2
Compilation exited abnormally with code 2 at Thu Oct 20 09:46:38
>
>
> r~
>
>
> Alex Bennée (1):
> linux-user: enable parallel code generation on clone
>
> Emilio G. Cota (18):
> atomics: add atomic_xor
> atomics: add atomic_op_fetch variants
> target-i386: emulate LOCK'ed cmpxchg using cmpxchg helpers
> target-i386: emulate LOCK'ed OP instructions using atomic helpers
> target-i386: emulate LOCK'ed INC using atomic helper
> target-i386: emulate LOCK'ed NOT using atomic helper
> target-i386: emulate LOCK'ed NEG using cmpxchg helper
> target-i386: emulate LOCK'ed XADD using atomic helper
> target-i386: emulate LOCK'ed BTX ops using atomic helpers
> target-i386: emulate XCHG using atomic helper
> target-i386: remove helper_lock()
> tests: add atomic_add-bench
> target-arm: emulate LL/SC using cmpxchg helpers
> target-arm: emulate SWP with atomic_xchg helper
> target-arm: emulate aarch64's LL/SC using cmpxchg helpers
> linux-user: remove handling of ARM's EXCP_STREX
> linux-user: remove handling of aarch64's EXCP_STREX
> target-arm: remove EXCP_STREX + cpu_exclusive_{test, info}
>
> Richard Henderson (16):
> exec: Avoid direct references to Int128 parts
> int128: Use __int128 if available
> int128: Add int128_make128
> tcg: Add EXCP_ATOMIC
> cputlb: Replace SHIFT with DATA_SIZE
> cputlb: Move probe_write out of softmmu_template.h
> cputlb: Remove includes from softmmu_template.h
> cputlb: Move most of iotlb code out of line
> cputlb: Tidy some macros
> tcg: Add atomic helpers
> tcg: Add atomic128 helpers
> tcg: Add CONFIG_ATOMIC64
> tcg: Emit barriers with parallel_cpus
> target-arm: Rearrange aa32 load and store functions
> target-alpha: Introduce MMU_PHYS_IDX
> target-alpha: Emulate LL/SC using cmpxchg helpers
>
> Makefile.objs | 2 +-
> Makefile.target | 1 +
> atomic_template.h | 215 +++++++++++++++++++++++++
> configure | 62 +++++++-
> cpu-exec-common.c | 6 +
> cpu-exec.c | 30 ++++
> cpus.c | 2 +
> cputlb.c | 203 ++++++++++++++++++++++--
> exec.c | 4 +-
> include/exec/cpu-all.h | 1 +
> include/exec/exec-all.h | 1 +
> include/qemu-common.h | 1 +
> include/qemu/atomic.h | 67 ++++++--
> include/qemu/int128.h | 171 +++++++++++++++++++-
> linux-user/main.c | 312 ++++++------------------------------
> linux-user/syscall.c | 8 +
> softmmu_template.h | 104 ++----------
> target-alpha/cpu.h | 22 +--
> target-alpha/helper.c | 14 +-
> target-alpha/helper.h | 9 --
> target-alpha/machine.c | 2 -
> target-alpha/mem_helper.c | 73 ---------
> target-alpha/translate.c | 148 +++++++++--------
> target-arm/cpu.h | 17 +-
> target-arm/helper-a64.c | 113 +++++++++++++
> target-arm/helper-a64.h | 2 +
> target-arm/internals.h | 4 +-
> target-arm/translate-a64.c | 106 ++++++-------
> target-arm/translate.c | 344 +++++++++++++++-------------------------
> target-arm/translate.h | 4 -
> target-i386/helper.h | 4 +-
> target-i386/mem_helper.c | 153 ++++++++++++------
> target-i386/translate.c | 386
> +++++++++++++++++++++++++++++----------------
> tcg-runtime.c | 74 +++++++--
> tcg/tcg-op.c | 354 +++++++++++++++++++++++++++++++++++++++--
> tcg/tcg-op.h | 44 ++++++
> tcg/tcg-runtime.h | 109 +++++++++++++
> tcg/tcg.h | 85 ++++++++++
> tests/.gitignore | 1 +
> tests/Makefile.include | 4 +-
> tests/atomic_add-bench.c | 163 +++++++++++++++++++
> tests/test-int128.c | 22 +--
> translate-all.c | 1 +
> 43 files changed, 2353 insertions(+), 1095 deletions(-)
> create mode 100644 atomic_template.h
> create mode 100644 tests/atomic_add-bench.c
--
Alex Bennée
- [Qemu-devel] [PATCH v7 27/35] target-arm: Rearrange aa32 load and store functions, (continued)
- [Qemu-devel] [PATCH v7 27/35] target-arm: Rearrange aa32 load and store functions, Richard Henderson, 2016/10/19
- [Qemu-devel] [PATCH v7 29/35] target-arm: emulate SWP with atomic_xchg helper, Richard Henderson, 2016/10/19
- [Qemu-devel] [PATCH v7 28/35] target-arm: emulate LL/SC using cmpxchg helpers, Richard Henderson, 2016/10/19
- [Qemu-devel] [PATCH v7 30/35] target-arm: emulate aarch64's LL/SC using cmpxchg helpers, Richard Henderson, 2016/10/19
- [Qemu-devel] [PATCH v7 32/35] linux-user: remove handling of aarch64's EXCP_STREX, Richard Henderson, 2016/10/19
- [Qemu-devel] [PATCH v7 24/35] target-i386: emulate XCHG using atomic helper, Richard Henderson, 2016/10/19
- [Qemu-devel] [PATCH v7 35/35] target-alpha: Emulate LL/SC using cmpxchg helpers, Richard Henderson, 2016/10/19
- [Qemu-devel] [PATCH v7 33/35] target-arm: remove EXCP_STREX + cpu_exclusive_{test, info}, Richard Henderson, 2016/10/19
- [Qemu-devel] [PATCH v7 34/35] target-alpha: Introduce MMU_PHYS_IDX, Richard Henderson, 2016/10/19
- [Qemu-devel] [PATCH v7 06/35] tcg: Add EXCP_ATOMIC, Richard Henderson, 2016/10/19
- Re: [Qemu-devel] [PATCH v7 00/35] cmpxchg-based emulation of atomics,
Alex Bennée <=