unicorn/qemu
Pavel Fedin 825bc2fb04
qom: Replace object property list with GHashTable
ARM GICv3 systems with large number of CPUs create lots of IRQ pins. Since
every pin is represented as a property, number of these properties becomes
very large. Every property add first makes sure there's no duplicates.
Traversing the list becomes very slow, therefore QEMU initialization takes
significant time (several seconds for e. g. 16 CPUs).

This patch replaces list with GHashTable, making lookup very fast. The only
drawback is that object_child_foreach() and object_child_foreach_recursive()
cannot add or remove properties during traversal, since GHashTableIter does
not have modify-safe version. However, the code seems not to modify objects
via these functions.

Backports commit b604a854e843505007c59d68112c654556102a20 from qemu
2018-02-21 13:35:10 -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: Remove lingering fast casts 2018-02-20 19:04:22 -05:00
hw x86: Clean up includes 2018-02-19 01:00:09 -05:00
include qom: Replace object property list with GHashTable 2018-02-21 13:35:10 -05:00
qapi qapi: Don't box branches of flat unions 2018-02-20 16:44:55 -05:00
qobject qapi: Convert QType into QAPI built-in enum type 2018-02-19 21:47:05 -05:00
qom qom: Replace object property list with GHashTable 2018-02-21 13:35:10 -05:00
scripts qapi: Don't box branches of flat unions 2018-02-20 16:44:55 -05:00
target-arm target-arm: Only trap SRS from S-EL1 if specified mode is MON 2018-02-21 02:49:28 -05:00
target-i386 tcg: Make cpu_tmp1 and cpu_tmp4 a TCGv 2018-02-21 00:07:23 -05:00
target-m68k tcg: Make store_dummy a TCGv 2018-02-21 00:24:40 -05:00
target-mips tcg: Make cpu_gpr a TCGv array 2018-02-21 01:02:46 -05:00
target-sparc tcg: Make cpu_regs_sparc a TCGv array 2018-02-21 01:50:28 -05:00
tcg tcg: Make cpu_regs_sparc a TCGv array 2018-02-21 01:50:28 -05:00
util error: New error_fatal 2018-02-20 08:22:27 -05:00
aarch64.h memory: Implement memory_region_get_ram_addr with mr->ram_block 2018-02-21 08:53:08 -05:00
aarch64eb.h memory: Implement memory_region_get_ram_addr with mr->ram_block 2018-02-21 08:53:08 -05:00
accel.c all: Clean up includes 2018-02-19 01:34:28 -05:00
arm.h memory: Implement memory_region_get_ram_addr with mr->ram_block 2018-02-21 08:53:08 -05:00
armeb.h memory: Implement memory_region_get_ram_addr with mr->ram_block 2018-02-21 08:53:08 -05:00
CODING_STYLE import 2015-08-21 15:04:50 +08:00
configure tcg: Drop ia64 host support 2018-02-04 18:33:02 -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 exec: Clean up includes 2018-02-19 00:49:55 -05:00
cpu-exec.c exec: Clean up includes 2018-02-19 00:49:55 -05:00
cpus.c exec: Clean up includes 2018-02-19 00:49:55 -05:00
cputlb.c memory: Drop MemoryRegion.ram_addr 2018-02-21 08:53:08 -05:00
exec.c exec: Remove unnecessary return in qemu_ram_remap 2018-02-21 09:51:23 -05:00
gen_all_header.sh arm64eb: add support for ARM64 big endian. 2017-04-24 23:30:01 +08:00
glib_compat.c glib_compat: backport hashtable iterator interfaces 2018-02-21 13:18:44 -05:00
HACKING import 2015-08-21 15:04:50 +08:00
header_gen.py memory: Implement memory_region_get_ram_addr with mr->ram_block 2018-02-21 08:53:08 -05:00
ioport.c all: Clean up includes 2018-02-19 01:34:28 -05:00
LICENSE import 2015-08-21 15:04:50 +08:00
m68k.h memory: Implement memory_region_get_ram_addr with mr->ram_block 2018-02-21 08:53:08 -05:00
Makefile qapi: Turn generators' mandatory option -i into an argument 2018-02-19 15:22:27 -05:00
Makefile.objs crypto: move crypto objects out of libqemuutil.la 2018-02-17 15:23:50 -05:00
Makefile.target tcg: split tcg_op_defs to -common 2018-02-17 15:23:51 -05:00
memory.c memory: Fix bad error handling in memory_region_init_ram_ptr() 2018-02-21 11:24:38 -05:00
memory_mapping.c all: Clean up includes 2018-02-19 01:34:28 -05:00
mips.h memory: Implement memory_region_get_ram_addr with mr->ram_block 2018-02-21 08:53:08 -05:00
mips64.h memory: Implement memory_region_get_ram_addr with mr->ram_block 2018-02-21 08:53:08 -05:00
mips64el.h memory: Implement memory_region_get_ram_addr with mr->ram_block 2018-02-21 08:53:08 -05:00
mipsel.h memory: Implement memory_region_get_ram_addr with mr->ram_block 2018-02-21 08:53:08 -05:00
powerpc.h memory: Implement memory_region_get_ram_addr with mr->ram_block 2018-02-21 08:53:08 -05:00
qapi-schema.json qapi: Lazy creation of array types 2018-02-19 18:55:35 -05:00
qemu-log.c all: Clean up includes 2018-02-19 01:34:28 -05:00
qemu-timer.c all: Clean up includes 2018-02-19 01:34:28 -05:00
rules.mak import 2015-08-21 15:04:50 +08:00
softmmu_template.h exec.c: Pass MemTxAttrs to iotlb_to_region so it uses the right AS 2018-02-17 23:19:00 -05:00
sparc.h memory: Implement memory_region_get_ram_addr with mr->ram_block 2018-02-21 08:53:08 -05:00
sparc64.h memory: Implement memory_region_get_ram_addr with mr->ram_block 2018-02-21 08:53:08 -05:00
tcg-runtime.c all: Clean up includes 2018-02-19 01:34:28 -05:00
translate-all.c all: Clean up includes 2018-02-19 01:34:28 -05:00
translate-all.h translate-all: remove unnecessary argument to tb_invalidate_phys_range 2018-02-13 09:04:51 -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 vl.c: Remove periods and exclamation points from error messages 2018-02-17 15:24:14 -05:00
vl.h import 2015-08-21 15:04:50 +08:00
x86_64.h memory: Implement memory_region_get_ram_addr with mr->ram_block 2018-02-21 08:53:08 -05:00