unicorn/qemu
Alex Bennée 6760605e1c
tcg: enable thread-per-vCPU
There are a couple of changes that occur at the same time here:

- introduce a single vCPU qemu_tcg_cpu_thread_fn

One of these is spawned per vCPU with its own Thread and Condition
variables. qemu_tcg_rr_cpu_thread_fn is the new name for the old
single threaded function.

- the TLS current_cpu variable is now live for the lifetime of MTTCG
vCPU threads. This is for future work where async jobs need to know
the vCPU context they are operating in.

The user to switch on multi-thread behaviour and spawn a thread
per-vCPU. For a simple test kvm-unit-test like:

./arm/run ./arm/locking-test.flat -smp 4 -accel tcg,thread=multi

Will now use 4 vCPU threads and have an expected FAIL (instead of the
unexpected PASS) as the default mode of the test has no protection when
incrementing a shared variable.

We enable the parallel_cpus flag to ensure we generate correct barrier
and atomic code if supported by the front and backends. This doesn't
automatically enable MTTCG until default_mttcg_enabled() is updated to
check the configuration is supported.

Backports relevant parts of commit 372579427a5040a26dfee78464b50e2bdf27ef26
2018-03-02 09:43:14 -05:00
..
crypto crypto: Clean up includes 2018-02-19 00:47:40 -05:00
default-configs arm64eb: add support for ARM64 big endian. 2017-04-24 23:30:01 +08:00
docs docs: clarify memory region lifecycle 2018-02-12 15:11:21 -05:00
fpu softfloat: Add float128_to_uint32_round_to_zero() 2018-03-02 08:33:09 -05:00
hw i386: Remove AMD feature flag aliases from Opteron models 2018-03-01 23:49:04 -05:00
include tcg: add options for enabling MTTCG 2018-03-02 09:25:01 -05:00
qapi qapi: rename QmpOutputVisitor to QObjectOutputVisitor 2018-02-27 08:05:33 -05:00
qobject util/cutils: Rename qemu_strtoll(), qemu_strtoull() 2018-03-02 08:39:45 -05:00
qom arm: Correctly handle watchpoints for BE32 CPUs 2018-03-02 00:24:33 -05:00
scripts qapi: rename QmpOutputVisitor to QObjectOutputVisitor 2018-02-27 08:05:33 -05:00
target util/cutils: Change qemu_strtosz*() from int64_t to uint64_t 2018-03-02 08:58:55 -05:00
tcg tcg: add options for enabling MTTCG 2018-03-02 09:25:01 -05:00
util util/cutils: Change qemu_strtosz*() from int64_t to uint64_t 2018-03-02 08:58:55 -05:00
aarch64.h Resolve symbol errors with softfloat 2018-03-02 09:25:05 -05:00
aarch64eb.h Resolve symbol errors with softfloat 2018-03-02 09:25:05 -05:00
accel.c clean-up: removed duplicate #includes 2018-02-28 08:51:56 -05:00
arm.h Resolve symbol errors with softfloat 2018-03-02 09:25:05 -05:00
armeb.h Resolve symbol errors with softfloat 2018-03-02 09:25:05 -05:00
atomic_template.h tcg: Add atomic128 helpers 2018-02-27 21:43:48 -05:00
CODING_STYLE import 2015-08-21 15:04:50 +08:00
configure tcg: Add CONFIG_ATOMIC64 2018-02-27 22:25:36 -05:00
COPYING import 2015-08-21 15:04:50 +08:00
COPYING.LIB import 2015-08-21 15:04:50 +08:00
cpu-exec-common.c tcg: Add EXCP_ATOMIC 2018-02-27 11:57:58 -05:00
cpu-exec.c tcg: enable thread-per-vCPU 2018-03-02 09:43:14 -05:00
cpus.c tcg: remove global exit_request 2018-03-02 09:38:08 -05:00
cputlb.c cputlb: drop flush_global flag from tlb_flush 2018-03-01 19:36:04 -05:00
exec.c exec: make address_space_cache_destroy idempotent 2018-03-02 08:16:17 -05:00
gen_all_header.sh arm64eb: add support for ARM64 big endian. 2017-04-24 23:30:01 +08:00
glib_compat.c qapi: Fix memleak in string visitors on int lists 2018-02-25 00:20:34 -05:00
HACKING import 2015-08-21 15:04:50 +08:00
header_gen.py Resolve symbol errors with softfloat 2018-03-02 09:25:05 -05:00
ioport.c hw: remove pio_addr_t 2018-02-24 02:43:16 -05:00
LICENSE import 2015-08-21 15:04:50 +08:00
m68k.h Resolve symbol errors with softfloat 2018-03-02 09:25:05 -05:00
Makefile Makefile: Add a FORCE target 2018-02-24 17:03:51 -05:00
Makefile.objs tcg: Add atomic helpers 2018-02-27 15:57:47 -05:00
Makefile.target Move target-* CPU file into a target/ folder 2018-03-01 22:50:58 -05:00
memory.c cputlb: drop flush_global flag from tlb_flush 2018-03-01 19:36:04 -05:00
memory_ldst.inc.c exec: introduce memory_ldst.inc.c 2018-03-01 09:59:34 -05:00
memory_mapping.c include/qemu/osdep.h: Don't include qapi/error.h 2018-02-21 23:08:18 -05:00
mips.h Resolve symbol errors with softfloat 2018-03-02 09:25:05 -05:00
mips64.h Resolve symbol errors with softfloat 2018-03-02 09:25:05 -05:00
mips64el.h Resolve symbol errors with softfloat 2018-03-02 09:25:05 -05:00
mipsel.h Resolve symbol errors with softfloat 2018-03-02 09:25:05 -05:00
powerpc.h Resolve symbol errors with softfloat 2018-03-02 09:25:05 -05:00
qapi-schema.json qapi: add missing colon-ending for section name 2018-03-01 09:07:10 -05:00
qemu-timer.c timer/cpus: fix some typos and update some comments 2018-02-25 23:21:57 -05:00
rules.mak rules.mak: Don't extract libs from .mo-libs in link command 2018-02-26 02:08:03 -05:00
softmmu_template.h cputlb: Remove includes from softmmu_template.h 2018-02-27 12:40:43 -05:00
sparc.h Resolve symbol errors with softfloat 2018-03-02 09:25:05 -05:00
sparc64.h Resolve symbol errors with softfloat 2018-03-02 09:25:05 -05:00
tcg-runtime.c tcg: Add opcode for ctpop 2018-03-01 18:26:41 -05:00
translate-all.c tcg: enable thread-per-vCPU 2018-03-02 09:43:14 -05:00
translate-all.h translate-all.c: Compute L1 page table properties at runtime 2018-02-26 11:46:58 -05:00
translate-common.c exec: Clean up includes 2018-02-19 00:49:55 -05:00
unicorn_common.h qom/cpu: Add MemoryRegion property 2018-02-18 21:54:50 -05:00
VERSION import 2015-08-21 15:04:50 +08:00
vl.c tcg: add options for enabling MTTCG 2018-03-02 09:25:01 -05:00
vl.h import 2015-08-21 15:04:50 +08:00
x86_64.h Resolve symbol errors with softfloat 2018-03-02 09:25:05 -05:00