unicorn/qemu
Peter Maydell d5298c5370
qom/cpu: Add cluster_index to CPUState
For TCG we want to distinguish which cluster a CPU is in, and
we need to do it quickly. Cache the cluster index in the CPUState
struct, by having the cluster object set cpu->cluster_index for
each CPU child when it is realized.

This means that board/SoC code must add all CPUs to the cluster
before realizing the cluster object. Regrettably QOM provides no
way to prevent adding children to a realized object and no way for
the parent to be notified when a new child is added to it, so
we don't have any way to enforce/assert this constraint; all
we can do is document it in a comment. We can at least put in a
check that the cluster contains at least one CPU, which should
catch the typical cases of "realized cluster too early" or
"forgot to parent the CPUs into it".

The restriction on how many clusters can exist in the system
is imposed by TCG code which will be added in a subsequent commit,
but the check to enforce it in cluster.c fits better in this one.

Backports relevant parts of commit 7ea7b9ad532e59c3efbcabff0e3484f4df06104c from qemu
2019-01-30 12:59:59 -05:00
..
accel tcg: Add opcodes for vector minmax arithmetic 2019-01-29 16:24:52 -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/devel/memory.txt: Document _with_attrs accessors 2018-10-04 04:46:26 -04:00
fpu include/fpu/softfloat: Fix compilation with Clang on s390x 2019-01-24 18:37:51 -05:00
hw hw/mips/mips_r4k: Fix initialization of MIPS target CPUs 2018-09-03 17:40:08 -04:00
include qom/cpu: Add cluster_index to CPUState 2019-01-30 12:59:59 -05:00
qapi qapi: Rewrite string-input-visitor's integer and list parsing 2018-12-18 04:57:25 -05:00
qobject qstring: Move qstring_from_substr()'s @end one to the right 2018-08-02 21:24:19 -04:00
qom qom/cpu: Add cluster_index to CPUState 2019-01-30 12:59:59 -05:00
scripts decodetree: re.fullmatch was added in 3.4 2019-01-25 13:47:47 -05:00
target target/arm: Don't clear supported PMU events when initializing PMCEID1 2019-01-29 17:12:23 -05:00
tcg tcg/aarch64: Implement vector minmax arithmetic 2019-01-29 16:44:09 -05:00
util qemu-thread: Don't block SEGV, ILL and FPE 2019-01-13 19:50:32 -05:00
aarch64.h target/arm: Don't clear supported PMU events when initializing PMCEID1 2019-01-29 17:12:23 -05:00
aarch64eb.h target/arm: Don't clear supported PMU events when initializing PMCEID1 2019-01-29 17:12:23 -05:00
accel.c clean-up: removed duplicate #includes 2018-02-28 08:51:56 -05:00
arm.h target/arm: Don't clear supported PMU events when initializing PMCEID1 2019-01-29 17:12:23 -05:00
armeb.h target/arm: Don't clear supported PMU events when initializing PMCEID1 2019-01-29 17:12:23 -05:00
CODING_STYLE import 2015-08-21 15:04:50 +08:00
configure configure: Force the C standard to gnu99 2019-01-22 20:18:58 -05:00
COPYING import 2015-08-21 15:04:50 +08:00
COPYING.LIB import 2015-08-21 15:04:50 +08:00
cpus.c Include qapi/error.h exactly where needed 2018-03-07 12:26:38 -05:00
exec.c exec.c: Use correct attrs in cpu_memory_rw_debug() 2019-01-29 17:05:50 -05:00
gen_all_header.sh arm64eb: add support for ARM64 big endian. 2017-04-24 23:30:01 +08:00
glib_compat.c Use cpu_create(type) instead of cpu_init(cpu_model) 2018-03-20 14:20:30 -04:00
HACKING HACKING: document preference for g_new instead of g_malloc 2018-05-22 00:30:50 -04:00
header_gen.py target/arm: Don't clear supported PMU events when initializing PMCEID1 2019-01-29 17:12:23 -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 tcg: Add opcodes for vector minmax arithmetic 2019-01-29 16:24:52 -05:00
Makefile Revert "Makefile: Rename TARGET_DIRS to TARGET_LIST" 2018-07-05 17:40:24 -04:00
Makefile.objs qapi: Move qapi-schema.json to qapi/, rename generated files 2018-03-09 11:35:11 -05:00
Makefile.target configure: Remove old -fno-gcse workaround for GCC 4.6.x and 4.7.[012] 2018-12-18 03:52:36 -05:00
memory.c memory: learn about non-volatile memory region 2018-11-11 08:50:39 -05:00
memory_ldst.inc.c exec: Fix MAP_RAM for cached access 2018-07-03 01:11:12 -04:00
memory_mapping.c include/qemu/osdep.h: Don't include qapi/error.h 2018-02-21 23:08:18 -05:00
mips.h tcg: Add opcodes for vector minmax arithmetic 2019-01-29 16:24:52 -05:00
mips64.h tcg: Add opcodes for vector minmax arithmetic 2019-01-29 16:24:52 -05:00
mips64el.h tcg: Add opcodes for vector minmax arithmetic 2019-01-29 16:24:52 -05:00
mipsel.h tcg: Add opcodes for vector minmax arithmetic 2019-01-29 16:24:52 -05:00
powerpc.h tcg: Add opcodes for vector minmax arithmetic 2019-01-29 16:24:52 -05:00
qemu-timer.c timer/cpus: fix some typos and update some comments 2018-02-25 23:21:57 -05:00
riscv32.h target/arm: Add v8M stack checks on ADD/SUB/MOV of SP 2018-10-08 14:15:15 -04:00
riscv64.h target/arm: Add v8M stack checks on ADD/SUB/MOV of SP 2018-10-08 14:15:15 -04:00
rules.mak build-sys: silence make by default or V=0 2018-03-06 08:58:03 -05:00
sparc.h tcg: Add opcodes for vector minmax arithmetic 2019-01-29 16:24:52 -05:00
sparc64.h tcg: Add opcodes for vector minmax arithmetic 2019-01-29 16:24:52 -05:00
unicorn_common.h unicorn_common: Fix unicorn memory functions failing 2018-09-03 10:40:14 -04:00
VERSION Open 4.0 development tree 2018-12-11 20:33:45 -05:00
vl.c Use cpu_create(type) instead of cpu_init(cpu_model) 2018-03-20 14:20:30 -04:00
vl.h import 2015-08-21 15:04:50 +08:00
x86_64.h tcg: Add opcodes for vector minmax arithmetic 2019-01-29 16:24:52 -05:00